SpringBoot整合Mybatis使用通用Mapper和分页插件PageHelper

我的上一篇博客里面介绍了,如何在SpringBoot环境下集成Mybatis
SpringBoot整合Mybatis
这篇主要来讲解一下SpringBoot整合Mybatyis使用通用Mapper和分页插件PageHelper
使用的SpringBoot版本2.1.4.RELEASE,Mysql版本8.0+

  1. 添加依赖,都有注释

    		
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <scope>runtimescope>
            dependency>
    
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-jdbcartifactId>
            dependency>
    
            
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>1.3.2version>
            dependency>
    
            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>1.1.10version>
            dependency>
    
            
            <dependency>
                <groupId>tk.mybatisgroupId>
                <artifactId>mapper-spring-boot-starterartifactId>
                <version>2.1.4version>
            dependency>
    
            
            <dependency>
                <groupId>com.github.pagehelpergroupId>
                <artifactId>pagehelper-spring-boot-starterartifactId>
                <version>1.2.10version>
            dependency>
    
  2. 如果自己写了一个通用接口,然后想让所有的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> {
    
    }
    
  3. 当然也可以不自己写一个通用接口,直接让所有Mapper接口都继承Mapper或者其他,则没有上述第二步的配置
    如:

    /**
     * @Author: xiaoshijiu
     * @Date: 2019/5/21
     * @Description: 通用Mapper下的雇员相关接口
     */
    public interface EmployeeTKMapper extends Mapper<Employee> {
    
    }
    
  4. 再编写实体类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")指定数据库中对应的表名,如果不一样的话(一样的话也推荐,最好都指明)

    
    
    <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进行优化,这是一种很不错的开发模式。

  5. 这是一个非常重要的主意点,从常规的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);
    	}
    
    }
    
  6. 分页插件无需任何配置,可以直接使用常规功能

  7. 编写controller,测试

    	/**
         * 通用Mapper查询雇员
         * @return ApiResult
         */
        @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);
        }
    

你可能感兴趣的:(SpringBoot,SpringBoot学习历程)