MyBatis 学习笔记
MyBatis 是一款优秀的持久层框架,免除了所有的 JDBC 代码以及设置参数和获取结果集的工作。
快速入门
1、Maven 加载依赖
1 | <dependency> |
2、使用 XML 构建 SqlSessionFactory
在 resource 目录下创建 mybatis-config.xml 文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
修改相关的参数,以确保能连接上数据库
3、新建接口
1 | public interface UserDao { |
定义相关的接口,在 resource 目录下创建与其全类名相同的 XML 文件1
2
3
4
5
6
7
8
9
10
11
12
<mapper namespace="com.haibara.dao.UserDao">
<select id="findAll" resultType="com.haibara.pojo.User">
select * from user
</select>
<select id="findUserById" resultType="com.haibara.pojo.User">
select * from user where id = #{id};
</select>
</mapper>
namespace 是接口的全路径
查询使用的是 select 标签
resultType 是结果的类型
id 是接口中的方法名
4、测试
1 | String resource = "mybatis-config.xml"; |
idea 模板
为了方便开发,可以在 idea 中添加 mybatis 的配置文件模板到 idea 中
获取参数
一个参数
1、参数为基础数据类型的情况
1 | User findUserById(int id); |
根据 ID 查询只需要传入一个参数1
select * from user where id = #{id};
2、参数并非基础数据类型的情况
1 | User findByUser(User user); |
1 | <select id="findByUser" parameterType="com.haibara.pojo.User" resultType="com.haibara.pojo.User"> |
但由于可以自动识别参数类型,所以 parameterType 可以省略
3、参数为 Map 时
1 | User findByMap(Map map); |
当参数为 Map 时,依旧是同样的写法1
2
3<select id="findByMap" resultType="com.haibara.pojo.User">
select * from user where id = #{id} and username = #{username}
</select>1
2
3
4
5HashMap hashMap = new HashMap();
hashMap.put("id",1);
hashMap.put("username","小明");
hashMap.put("password","123456");
User byMap = mapper.findByMap(hashMap);
多个参数
在多个参数时,在定义方法时需要通过注解对参数命名1
User findByUsernameAndPassword(; String username, String password)
1
2
3<select id="findByUsernameAndPassword" resultType="com.haibara.pojo.User">
select * from user where username = #{username} and password = #{password}
</select>
核心类
SqlSessionFactory
SqlSessionFactory 是一个 SqlSession 的工厂类,主要用来获取 SqlSession 对象
成员方法1
2SqlSession openSession();//非自动提交
SqlSession openSession(boolean autoCommit);//自动提交
SqlSession
SqlSession 提供了在数据库执行 SQL 命令所需要的所有方法,它提供了事务的相关操作
成员方法1
2
3
4T getMapper(Class<T> type);//获取Mapper对象
void commit();//提交事务
void rollback();//回滚事务
void close();//释放资源
MyBatis 实现增删查改
新增
在接口中新增方法1
void addUser(User user);
在 XML 映射文件中编写 SQL 语句1
2
3<insert id="addUser">
insert into user values (null, #{username},#{password})
</insert>
在测试类中调用测试1
2
3
4User user = new User();
user.setUsername("萧炎");
user.setPassword("123456");
mapper.addUser(user);
查询
在接口中添加方法1
List<User> findAll();
在 XML 映射文件中添加对应的映射1
2
3<select id="findAll" resultType="com.haibara.pojo.User">
select * from user;
</select>
调用方法测试1
2List<User> all = mapper.findAll();
System.out.println(all.toString());
修改
在接口中添加相关的方法1
void updatePasswordById(User user);
在 XML 映射文件添加映射1
2
3<update id="updatePasswordById">
update user set password=#{password} where id =#{id}
</update>
在测试类中测试1
2
3
4User user = new User();
user.setId(2);
user.setPassword("abcdefg");
mapper.updatePasswordById(user);
删除
在接口中添加相关的方法1
void deleteUserById(int id);
在 XML 映射文件添加映射1
2
3<delete id="deleteUserById">
delete from user where id=#{id}
</delete>
在测试类中测试1
mapper.deleteUserById(8);
配置文件
properties
在 mybatis-config.xml 中可以通过 properties 标签读取 properties 文件内容
在资源文件夹中新建一个 jdbc.properties 的文件1
2
3
4jdbc.url=jdbc:mysql:///mydb?characterEncoding=UTF-8
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
将 jdbc 连接数据库的配置写到 properties 文件中
在 mybatis-comfig.xml 中的 configuration 标签下的最前边添加一个 properties 标签,并且指定 jdbc.properties 的文件路径1
<properties resource="jdbc.properties"></properties>
因为 jdbc 的配置已经在 jdbc.properties 文件中添加了,所以在 mybatis-config.xml 中就可以换一种方式写配置1
2
3
4
5
6<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>