除了JPA之外,实际开发中,也常常使用 MyBatis. 这一章节,讲解一下整合Mybatis的使用。
关于 MyBatis的相关知识,可以看老蝴蝶以前写的MyBatis系列文章
一. SpringBoot 整合 MyBatis 前期准备
按照老蝴蝶以前讲解的方式,采用Maven 构建SpringBoot项目。
一.一 pom.xml 添加依赖
<!--引入MySql的驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--引入springboot与mybatis整合的依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- 引入pagehelper分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency>
一.二 application.yml 添加JPA的配置
# 引入 数据库的相关配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true username: root password: abc123 #整合mybatis时使用的 mybatis: #包别名 type-aliases-package: top.yueshushu.learn.pojo #映射文件路径 mapper-locations: classpath:mybatis/mapper/**/*.xml configuration: #日志信息 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
注意,
- 数据库的连接信息 url 后面添加了一个 allowMultiQueries=true (允许多条语句执行)
- 在 resources 目录下,需要创建 mybatis/mapper 目录,放置相关的 XxxMapper.xml 文件。
一.三 创建 User 表
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(15) DEFAULT NULL, `sex` varchar(20) DEFAULT NULL, `age` int(6) DEFAULT NULL, `description` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
不采用Mybatis自动生成代码,只演示一些基本的操作。
二. 代码准备
二.一 pojo包下创建 User.java 类
@Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable { /** * @param id id编号 * @param name 姓名 * @param sex 性别 * @param age 年龄 * @param description 描述 */ private Integer id; private String name; private String sex; private Integer age; private String description; }
二.二 mapper包下创建 UserMapper 接口
resources/mybatis/mapper目录下创建相应的XML映射文件
@Mapper public interface UserMapper { }
注意,需要添加 @Mapper的注解(SpringBoot启动类,就不用加@MapperScan 扫描了)。
<?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"> <mapper namespace="top.yueshushu.learn.mapper.UserMapper"> </mapper>
二.三 service包下创建相应的接口和实现类
二.三.一 UserService 接口
public interface UserService { }
二.三.二 UserServiceImpl 实现类
@Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; }
二.四 测试类 MyBatisTests
放置在 test目录下的 top.yueshushu.learn 包下
@SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) @Log4j2 public class MyBatisTests { @Autowired private UserService userService; }
三. 整合MyBatis方法
ServiceImpl 层,除分页之外,均是一层调用,老蝴蝶为了减少篇幅,故省略 UserServiceImpl 层的代码,具体可看最后的Github链接.
所用的例子,也与 JPA时基本一样。
三.一 添加方法
三.一.一 测试类
@Test public void insertTest(){ //1. 构建对象 User user=new User(); user.setName("欢欢"); user.setAge(22); user.setSex("女"); user.setDescription("一个非常可爱的女孩纸"); //2. 添加方法 userService.addUser(user); log.info("添加成功,{}",user); }
三.一.二 Mapper接口及其相关XML文件实现
UserMapper接口
void addUser(@Param("user") User user);
UserMapper.xml 实现
<insert id="addUser"> insert into user(name,sex,age,description) values( #{user.name},#{user.sex},#{user.age},#{user.description} ) </insert>
三.一.三 验证
数据库中也正常的插入了数据。(后面,数据库的结果数据,除特别案例之外,老蝴蝶均不再贴出。)
三.二 修改方法
三.二.一 测试类
@Test public void updateTest(){ //1. 构建对象 User user=new User(); user.setId(1); //id不存在,会添加 user.setName("欢欢"); user.setDescription("岳泽霖最好的朋友"); //2. 修改方法 userService.updateUser(user); log.info("修改成功,{}",user); }
三.二.二 Mapper接口及其相关XML文件实现
UserMapper接口
void updateUser(@Param("user") User user);
void updateUser(@Param("user") User user);
<update id="updateUser"> update user set name=#{user.name},sex=#{user.sex}, age=#{user.age},description=#{user.description} where id=#{user.id} </update>
三.二.三 验证