springboot集成tkbatis,并借助PageHelper进行分页 添加依赖

13 篇文章 1 订阅
7 篇文章 0 订阅

springboot集成tkbatis,并借助PageHelper进行分页

添加依赖

spring依赖

jdbc依赖

tkmybatis依赖

pagehelper依赖

pagehelper-autoconfigure依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>


        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.1.4</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

依赖中的pagehelper依赖相关的有3个, 不要掉哦

  • pagehelper
  • pagehelper-spring-boot-autoconfigure
  • pagehelper-spring-boot-starter

结构图

image.png

配置相关

  • application.properties:

    datasource.jdbc-url=jdbc:mysql://localhost:3306/common?characterEncoding=utf-8
    datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    datasource.username=root
    datasource.password=root
    spring.profiles.active=develop
    server.port=9090
     
    /#控制台打印mybatis语句
    logging.level.com.example.mybatisplus.demo=debug
    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    
  • 配置数据源

    1. 配置datasource:

      pprefix = "datasource" 在application.properties里找以 datasource开头的配置,然后spring自动创建datasource

          @Bean
          @ConfigurationProperties(prefix = "datasource")
          public DataSource dataSource(){
              return DataSourceBuilder.create().build();
          }
      
    2. 配置sqlSessionFactory

    @Qualifier("datasource") 是指定名为 datasource 的bean, 也就是上面的datasource方法, 默认以方法名为bean的名称(如果方法名为Datasource(), bean的名称为 dataSource, 首字母变小写)

    		@Bean
        public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
            ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
            //设置mapper.xml的位置
            sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources("classpath:mapper/*.xml"));
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
            return sqlSessionFactory;
        }
    
    1. 配置mapper

        	@Bean
          public MapperScannerConfigurer mapperScannerConfigurer(){
              MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
              mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
      
              //设置mapper接口的位置
              mapperScannerConfigurer.setBasePackage("com.example.mybatisplus.demo.mapper.primary");
              Properties properties = new Properties();
      
              //配置的通用mapper, 集成tkbatis的多个接口,可以实现大多数增删改查方法
              properties.setProperty("mappers", "com.example.mybatisplus.demo.mapper.core.CustomMapper");
              mapperScannerConfigurer.setProperties(properties);
              return mapperScannerConfigurer;
          }
      

业务处理层

  • UserService.java

    定义一个简单的接口

    public interface UserService {
        ResultPage<User> getUserByPage(int pageNo, int pageSize);
    }
    
  • UserServiceImpl.java

    实现UserService接口

    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        UserMapper userMapper;
    
        @Override
        public ResultPage<User> getUserByPage(int pageNo, int pageSize) {
            //分页的主要方法, pageNo: 第几页  pageSize: 每页条数
            PageHelper.startPage(pageNo,pageSize);
            //创建condition
            Condition condition = new Condition(User.class);
            Example.Criteria criteria = condition.createCriteria();
            //条件类似于: select * from User where name = 'wuwei'
            criteria.andEqualTo("name", "wuwei");
            List<User> users = userMapper.selectByCondition(condition);
            PageInfo<User> pageInfo = new PageInfo(users);
            ResultPage<User> resultPage = new
                    ResultPage(pageInfo.getList(),pageInfo.getPageNum(),pageInfo.getPageSize(),pageInfo.getPages());
            return resultPage;
        }
    }
    
  • ResultPage.java

    封装分页信息的类

    package com.example.mybatisplus.demo.model;
    
    /**
     * @Author wuwei
     * @Date 2019/11/28 10:52 下午
     */
    public class ResultPage<T> {
        private T data;
        private int pageNo;
        private int pageSize;
        private int allPages;
    
        public ResultPage(T data, int pageNo, int pageSize, int allPages) {
            this.data = data;
            this.pageNo = pageNo;
            this.pageSize = pageSize;
            this.allPages = allPages;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public int getPageNo() {
            return pageNo;
        }
    
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getAllPages() {
            return allPages;
        }
    
        public void setAllPages(int allPages) {
            this.allPages = allPages;
        }
    }
    
    
  • CustomMapper接口

    继承tkbatis的接口, 这些接口里面有通用方法, 我们可以不用写sql语句,

    上文中,我们在 mapperScannerConfigurer 中配置了此CustomMapper

    public interface CustomMapper<T> extends
            IdsMapper<T>,
            ConditionMapper<T>,
            SelectMapper<T>,
            Mapper<T> {
    }
    
  • UserMapper继承CustomMapper

    @Repository
    public interface UserMapper extends CustomMapper<User> {
    
    }
    

###控制层controller

  • ResultResponse

    作为一个响应接口返回值的类, 对接口返回进行封装

    达到是接口返回值结构 统一 的目的

    public class ResultResponse<T> {
        private T data;
        private int code;
        private String msg;
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    
  • BaseController

    作为controller的基类, 提供方法将接口数据统一封装成ResultResponse类型的数据

    public class BaseController<T> {
        protected ResultResponse<T> handleResult(List<T> data){
            return handleResult(data, 0, "OK");
        }
    
        protected ResultResponse<T> handleResult(T data){
            ResultResponse resultResponse = new ResultResponse();
            resultResponse.setData(data);
            resultResponse.setMsg("OK");
            resultResponse.setCode(0);
            return resultResponse;
        }
    
        private ResultResponse<T> handleResult(List<T> data, int code, String msg){
            ResultResponse resultResponse = new ResultResponse();
            resultResponse.setData(data);
            resultResponse.setCode(code);
            resultResponse.setMsg(msg);
            return resultResponse;
        }
    }
    
  • UserController

    @RestController
    @RequestMapping("/start")
    public class UserController extends BaseController{
        @Autowired
        UserMapper userMapper;
    
        @Autowired
        UserService userService;
        @RequestMapping("/mybatisplus")
        public ResultResponse<ResultPage<User>> getUSer(int pageNo, int pageSize){
            return handleResult(userService.getUserByPage(pageNo,pageSize));
        }
    }
    
    
  • User类

    model

    public class User {
        @Id
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    }
    

表结构

在这里插入图片描述

运行

在这里插入图片描述

ps: 如果需要完整代码, GitHub springboot+mybatis+pagehelper简单demo

# Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper ## 项目依赖 ```xml <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> ``` ## Spring DevTools 配置 在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。 同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。 DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。 在 `src/main/resources` 中创建 META-INF 目录,在此目录下添加 spring-devtools.properties 配置,内容如下: ```properties restart.include.mapper=/mapper-[\\w-\\.]+jar restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar ``` 使用这个配置后,就会使用 restart 类加载加载 include 进去的 jar 包。 ## 集成 MyBatis Generator 通过 Maven 插件集成的,所以运行插件使用下面的命令: >mvn mybatis-generator:generate Mybatis Geneator 详解: >http://blog.csdn.net/isea533/article/details/42102297 ## application.properties 配置 ```properties #mybatis mybatis.type-aliases-package=tk.mybatis.springboot.model mybatis.mapper-locations=classpath:mapper/*.xml #mapper #mappers 多个接口时逗号隔开 mapper.mappers=tk.mybatis.springboot.util.MyMapper mapper.not-empty=false mapper.identity=MYSQL #pagehelper pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ``` ## application.yml 配置 完整配置可以参考 [src/main/resources/application-old.yml](https://github.com/abel533/MyBatis-Spring-Boot/blob/master/src/main/resources/application-old.yml) ,和 MyBatis 相关的部分配置如下: ```yaml mybatis: type-aliases-package: tk.mybatis.springboot.model mapper-locations: classpath:mapper/*.xml mapper: mappers: - tk.mybatis.springboot.util.MyMapper not-empty: false identity: MYSQL pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql ``` 注意 mapper 配置,因为参数名固定,所以接收参数使用的对象,按照 Spring Boot 配置规则,大写字母都变了带横线的小写字母。针对如 IDENTITY(对应i-d-e-n-t-i-t-y)提供了全小写的 identity 配置,如果 IDE 能自动提示,看自动提示即可。 ## SSM集成的基础项目 >https://github.com/abel533/Mybatis-Spring ## MyBatis工具 http://www.mybatis.tk - 推荐使用 Mybatis 通用 Mapper3 https://github.com/abel533/Mapper - 推荐使用 Mybatis 分页插件 PageHelper https://github.com/pagehelper/Mybatis-PageHelper ## 作者信息 - 作者博客:http://blog.csdn.net/isea533 - 作者邮箱:abel533@gmail.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值