我的上一篇博客里面介绍了,如何在SpringBoot环境下集成Mybatis SpringBoot整合Mybatis 这篇主要来讲解一下SpringBoot整合Mybatyis使用通用Mapper和分页插件PageHelper 使用的SpringBoot版本2.1.4.RELEASE,Mysql版本8.0+
添加依赖,都有注释
<!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 数据库连接的jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- 引入SpringBoot和Mybatis中间件 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!-- 通用Mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> </dependency>如果自己写了一个通用接口,然后想让所有的mapper接口都继承自己写的接口,则需要在application.yml中配置,自己写的接口的位置
#精确到接口名,详细的位置 mapper: mappers: com.fei.mappers.MyMapper内容如下
/** * Mapper接口:基本的增、删、改、查方法 * MySqlMapper:针对MySQL的额外补充接口,支持批量插入 * @Author: xiaoshijiu * @Date: 2019/5/21 * @Description: 通用Mapper下的Mapper接口 */ public interface MyMapper<T> extends Mapper<T>,MySqlMapper<T> { }然后自己的接口继承上面的MyMapper接口 如:
/** * @Author: xiaoshijiu * @Date: 2019/5/21 * @Description: 通用Mapper下的雇员相关接口 */ public interface EmployeeTKMapper extends MyMapper<Employee> { }当然也可以不自己写一个通用接口,直接让所有Mapper接口都继承Mapper或者其他,则没有上述第二步的配置 如:
/** * @Author: xiaoshijiu * @Date: 2019/5/21 * @Description: 通用Mapper下的雇员相关接口 */ public interface EmployeeTKMapper extends Mapper<Employee> { }再编写实体类Entity和Mapper.xml文件
/** * @Author: xiaoshijiu * @Date: 2019/5/21 * @Description: Employee实体类 */ @Setter @Getter @Table(name = "employee") public class Employee { @Id private Integer employeeId; private String employeeName; private String employeeSex; }需要使用@Table(name = "employee")指定数据库中对应的表名,如果不一样的话(一样的话也推荐,最好都指明)
<?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="com.fei.firstspringboot.webmvc.depart.mapper.EmployeeTKMapper"> <resultMap id="departMap" type="com.fei.firstspringboot.webmvc.depart.entity.Employee"> <id column="employee_id" property="employeeId"/> <result column="employee_name" property="employeeName"/> <result column="employee_sex" property="employeeSex"/> </resultMap> </mapper>这里指定了resultMap,将数据库字段和Entity属性进行了一一对应,那么在Entity里面就可以不用@Column在来映射 因为这样的好处就是能将通用Mapper和xml自己编写sql语句的方式结合起来使用,既利用了通用Mapper单表操作的便捷,又能在复杂业务处理时自己编写sql进行优化,这是一种很不错的开发模式。
这是一个非常重要的主意点,从常规的Mybatis到使用通用Mapper,需要将SpringBoot启动类的@MapperScan的这个注解import从 org.mybatis.spring.annotation.MapperScan这个包换成tk.mybatis.spring.annotation.MapperScan
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication //扫描mybatis的mapper接口,通用mapper下使用tk的扫描注解 @MapperScan("com.fei.firstspringboot.webmvc.depart.mapper") public class FirstspringbootApplication { public static void main(String[] args) { SpringApplication.run(FirstspringbootApplication.class, args); } }分页插件无需任何配置,可以直接使用常规功能
编写controller,测试
/** * 通用Mapper查询雇员 * @return ApiResult<Department> */ @GetMapping("/getAllByTk") public ApiResult<Department> getAllDeparts2() { //分页插件,可以直接使用,无需配置 PageHelper.startPage(1, 3); Example example = new Example(Employee.class); //Criteria条件查询 example.createCriteria().andEqualTo("employeeSex", "男"); List<Employee> list = employeeTKMapper.selectByExample(example); return ApiResult.success(list); }