1. 什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2. Mybatis操作步骤
首先我们要写一个Mybatis的核心配置文件,我们一般叫Mybatis-config.xml,这个名字其实是可以随便起的,但是我们有一句话叫约定大于配置.
Mybatis.config.xml文件代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3308/atm?useUnicode=true&characterEncoding=utf8&useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<!--每一个Mapper都要注册-->
<mappers>
<mapper resource="myMapper/UserMapper.xml"/>
</mappers>
</configuration>
对于里面的代码就不过多阐述,应该都能理解,environments的意思是多个环境,学习框架大家可以多去看看框架中文文档,学习很有帮助
Mybatis中文文档:入门_MyBatis中文网
第二步 我们需要写一个Mybatis工具类
MybatisUtils.java
public class Util {
public static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlSession对象,它完全包含了面向数据库执行SQL语句所需的所有方法
public static SqlSession getSqlSession() {
if(sqlSessionFactory==null){
System.out.println("这个是空的");
}
return sqlSessionFactory.openSession();
}
}
这里我们要特别注意
Mybatis中文文档里面是这样写的
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
但是由于sqlSessionFactory是个静态变量,这样写,sqlSessionFactory是个null;
所以我们应该把上面那句代码改成
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
否则就会报空指针异常,我第一次的时候看了一个多点才发现问题
第三步 创建实体类
者一步就很简单了,跟数据库中的字段对应上就可以了,具体的代码就不写了,注意的我们一般叫这种模型起名叫POJO
第四步 写一个Mapper接口
这里也很简单就是写一个方法
package myMapper;
import pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
我们这里写的是一个查询方法
第五步 编写配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace绑定一个Mapper接口-->
<mapper namespace="myMapper.UserMapper">
<!--id绑定接口里面的方法,resultType是指返回类型-->
<select id="getUserList" resultType="pojo.User">
select * from aaa
</select>
</mapper>
第六步 执行方法
ublic class UserMapperTest {
@Test
public void Test() {
SqlSession sqlSession = Util.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
到这里我们就可以实现查询方法了,增,删,改我们只需修改,sql语句和执行哪里的代码就ok了
查询id为1001的
我们在UserMapper.java中新增一个查询方法
//根据Id来查询用户
User getById(int id);
在UserMapper.xml中也新增一个sql语句
<!--parameterType表示参数类型-->
<select id="getById" resultType="pojo.User" parameterType="int">
select * from aaa where id =#{id}
</select>
最后就是在写一个执行方法了
@Test
public void Test01(){
SqlSession sqlSession = Util.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User byId = mapper.getById(1001);
System.out.println(byId);
sqlSession.close();
}
是不是大大的减少了我们的工作量
修改和新增,删除
UserMapper.java
//新增一个用户
int getInsert(User user);
//删除一个用户
int getDelete(int id);
//修改一个用户
int getChange(User user);
UserMapper.xml
<insert id="getInsert" parameterType="pojo.User">
insert into aaa (id,myname,sex,myaddress) values(#{id},#{myname},#{sex},#{address})
</insert>
<delete id="getDelete" parameterType="int" >
delete from aaa where id=#{id}
</delete>
<update id="getChange" parameterType="pojo.User">
update aaa set myname=#{myname},sex=#{sex},myaddress=#{address} where id=#{id}
</update>
执行方法
@Test
//我们注意增,删,改需要提交事务
public void Test02(){
SqlSession sqlSession = Util.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(1015, "刘甜", "女", "天津");
mapper.getInsert(user);
//提交事务
sqlSession.commit();
System.out.println("添加成功");
}
@Test
public void Test03(){
SqlSession sqlSession = Util.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.getDelete(1015);
//提交事务
sqlSession.commit();
System.out.println("删除成功");
}
@Test
public void Test04(){
SqlSession sqlSession = Util.getSqlSession();
//执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(1014, "张浩", "女", "吉林");
mapper.getChange(user);
//提交事务
sqlSession.commit();
System.out.println("修改成功");
}