MyBatis 是一款优秀的持久层框架,它对 JDBC 的操作数据库的过程进行封装,支持定制化 SQL、存储过程以及高级映射,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
通俗地讲,MyBatis 就是我们使用 Java 程序操作数据库时的一种工具,可以简化我们使用 JDBC 时的很多操作,而且还简化了数据库记录与 POJO 之间的映射方式。
添加相关依赖
MyBatis 依赖
1 | <dependency> |
2 | <groupId>org.mybatis.spring.boot</groupId> |
3 | <artifactId>mybatis-spring-boot-starter</artifactId> |
4 | <version>1.3.1</version> |
5 | </dependency> |
PageHelper 分页插件依赖
1 | <dependency> |
2 | <groupId>com.github.pagehelper</groupId> |
3 | <artifactId>pagehelper-spring-boot-starter</artifactId> |
4 | <version>1.2.3</version> |
5 | </dependency> |
配置数据源信息
- application.properties
1 | # 数据源配置 |
2 | jdbc:mysql://localhost:3306/game?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 = |
3 | root = |
4 | root = |
5 | com.mysql.jdbc.Driver = |
6 | |
7 | # 配置数据源,使用阿里巴巴的 druid 数据库连接池 |
8 | 1 = |
9 | 1 = |
10 | 20 = |
11 | true = |
12 | true = |
配置 MyBatis 与 PageHelper 信息
1 | # MyBatis 配置 |
2 | classpath:mybatis/mybatis-config.xml = |
3 | classpath:mybatis/mapper/*.xml = |
4 | com.example.mybatis.entity = |
5 | |
6 | # PagerHelper 分页 |
7 | mysql = |
8 | true = |
9 | true = |
10 | count=countSql = |
Mapper 映射配置
Mapper 类是一个接口,它的实现类不是一个 JAVA 类,而是一个与之对应的 XML 文件。Mapper 类中声明的方法对应 XML 文件中的一段 SQL 语句 。
Mapper 类
1 | public interface StudentMapper { |
2 | |
3 | Student selectById(Integer id); |
4 | |
5 | List<Student> selectAll(); |
6 | |
7 | void updateStudent(Student student); |
8 | |
9 | void insertStudent(Student student); |
10 | |
11 | void deleteStudent(Integer id); |
12 | |
13 | } |
Mapper 映射的 XML 文件
1 |
|
2 |
|
3 | <mapper namespace="com.example.mybatis.mapper.StudentMapper"> |
4 | <resultMap id="BaseResultMap" type="com.example.mybatis.entity.Student"> |
5 | <result column="id" property="id" javaType="java.lang.Integer"/> |
6 | <result column="name" property="name" javaType="java.lang.String"/> |
7 | <result column="age" property="age" javaType="java.lang.Integer"/> |
8 | <result column="gender" property="gender" javaType="com.example.mybatis.constant.GenderEnum"/> |
9 | </resultMap> |
10 | |
11 | <sql id="BaseColumnList" > |
12 | id, name, age, gender |
13 | </sql> |
14 | |
15 | <select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.Integer"> |
16 | SELECT |
17 | <include refid="BaseColumnList"/> |
18 | FROM student |
19 | WHERE id = #{id} |
20 | </select> |
21 | |
22 | <select id="selectAll" resultMap="BaseResultMap"> |
23 | SELECT |
24 | <include refid="BaseColumnList"/> |
25 | FROM student |
26 | </select> |
27 | |
28 | <insert id="insertStudent"> |
29 | INSERT INTO student ( |
30 | name, |
31 | age, |
32 | gender |
33 | ) VALUES ( |
34 | #{name}, |
35 | #{age}, |
36 | #{gender} |
37 | ) |
38 | </insert> |
39 | |
40 | <update id="updateStudent"> |
41 | UPDATE student |
42 | SET |
43 | <if test="name != null || name != ''">name = #{name},</if> |
44 | <if test="age != null">age = #{age},</if> |
45 | <if test="gender != null">gender = #{gender}</if> |
46 | WHERE id = #{id} |
47 | </update> |
48 | |
49 | <delete id="deleteStudent"> |
50 | DELETE FROM student WHERE id = #{id} |
51 | </delete> |
52 | |
53 | </mapper> |
其中 namespace 指定了该 XML 文件对应的 Mapper 类。resultMap 的标签,定义的是我们 SQL 查询的字段与实体类之间的映射关系。
编写 Service 类
1 |
|
2 | public class StudentService { |
3 | |
4 | |
5 | private StudentMapper studentMapper; |
6 | |
7 | public Student getStudent(Integer id) { |
8 | Student student = studentMapper.selectById(id); |
9 | |
10 | return student; |
11 | } |
12 | |
13 | public List<Student> listStudent(Integer pageNum, Integer pageSize) { |
14 | // 如果 pageSize 为空,默认返回 10 条数据 |
15 | if (pageSize == null) { |
16 | pageSize = 10; |
17 | } |
18 | // 分页 |
19 | Page<Student> studentPage = PageHelper.startPage(pageNum, pageSize) |
20 | .doSelectPage(() -> studentMapper.selectAll()); |
21 | List<Student> students = studentPage.getResult(); |
22 | |
23 | return students; |
24 | } |
25 | |
26 | public void saveStudent(Student student) { |
27 | studentMapper.insertStudent(student); |
28 | } |
29 | |
30 | public void updateStudent(Student student) { |
31 | studentMapper.updateStudent(student); |
32 | } |
33 | |
34 | public void deleteStudent(Integer id) { |
35 | studentMapper.deleteStudent(id); |
36 | } |
37 | } |
最后, 详细代码可以查看本示例的 Demo。
参考
MyBatis 中文官网:http://www.mybatis.cn/
PageHelper 官网:https://pagehelper.github.io/