Springboot集成mybatis通用Mapper与分页插件PageHelper

插件介绍

通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,PageHelper则提供通用的分页查询功能,使用它们可以很方便的进行开发,可以节省开发人员大量的时间。

通用Mapper的GIT地址: https://gitee.com/free/Mapper

分页插件的GIT地址: https://github.com/pagehelper/Mybatis-PageHelper

项目结构

导入依赖

 1 <!-- 通用Mapper插件2  文档地址:https://gitee.com/free/Mapper/wikis/Home -->3 <dependency>4     <groupId>tk.mybatis</groupId>5     <artifactId>mapper-spring-boot-starter</artifactId>6     <version>2.0.2</version>7 </dependency>8 <!-- 分页插件9  文档地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md -->
10 <dependency>
11     <groupId>com.github.pagehelper</groupId>
12     <artifactId>pagehelper-spring-boot-starter</artifactId>
13     <version>1.2.5</version>
14 </dependency>
15 <!-- MYSQL包 -->
16 <dependency>
17     <groupId>mysql</groupId>
18     <artifactId>mysql-connector-java</artifactId>
19 </dependency>
20 <!-- 默认就内嵌了Tomcat 容器,如需要更换容器也极其简单-->
21 <dependency>
22     <groupId>org.springframework.boot</groupId>
23     <artifactId>spring-boot-starter-web</artifactId>
24 </dependency>

属性配置

在 application.properties 文件中分别添加上数据库、Mybatis、通用Mapper、PageHelper的属性配置

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# 如果想看到mybatis日志需要做如下配置
logging.level.com.carry=DEBUG
######### Mybatis 自身配置 ##########
mybatis.mapper-locations=classpath:com/carry/mapper/*Mapper.xml
mybatis.type-aliases-package=com.carry.entity
# 驼峰命名规范 如:数据库字段是  order_id 那么 实体字段就要写成 orderId
mybatis.configuration.map-underscore-to-camel-case=true
# 配置控制台打印sql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
######### 通用Mapper ##########
# 主键自增回写方法,默认值MYSQL,详细说明请看文档
mapper.identity=MYSQL
mapper.mappers=tk.mybatis.mapper.common.BaseMapper
# 设置 insert 和 update 中,是否判断字符串类型!=''
mapper.not-empty=true
# 枚举按简单类型处理
mapper.enum-as-simple-type=true
######### 分页插件 ##########
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=false
pagehelper.support-methods-arguments=true

通用Mapper:

  • mapper.enum-as-simple-type: 枚举按简单类型处理,如果有枚举字段则需要加上该配置才会做映射
  • mapper.not-empty: 设置以后,会去判断 insert 和 update 中符串类型!=''

分页插件:

  • pagehelper.reasonable: 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询
  • support-methods-arguments: 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页

注意事项:

由于 mybatis.mapper-locations=classpath:com/carry/mapper/*.xml配置的在java package中,而Spring Boot默认只打入java package -> *.java,所以我们需要给pom.xml文件添加如下内容

 1 <build>2     <resources>3         <resource>4             <directory>src/main/resources</directory>5         </resource>6         <resource>7             <directory>src/main/java</directory>8             <includes>9                 <include>**/*.xml</include>
10             </includes>
11             <filtering>true</filtering>
12         </resource>
13     </resources>
14     <plugins>
15         <plugin>
16             <groupId>org.springframework.boot</groupId>
17             <artifactId>spring-boot-maven-plugin</artifactId>
18         </plugin>
19     </plugins>
20 </build>

具体编码

1、表结构

创建一张 user

1

2

3

4

5

6

CREATE TABLE `user` (

  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主键自增',

  `username` varchar(50) NOT NULL COMMENT '用户名',

  `passwordvarchar(50) NOT NULL COMMENT '密码',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

2、实体类

 1 package com.carry.entity;2 3 import java.io.Serializable;4 5 import javax.persistence.GeneratedValue;6 import javax.persistence.GenerationType;7 import javax.persistence.Id;8 import javax.persistence.Table;9
10 @Table(name = "user")
11 public class User implements Serializable {
12
13     private static final long serialVersionUID = -8057591359892731452L;
14
15     @Id
16     @GeneratedValue(strategy = GenerationType.IDENTITY)
17     private Long id;
18     private String username;
19     private String password;
20     public Long getId() {
21         return id;
22     }
23     public void setId(Long id) {
24         this.id = id;
25     }
26     public String getUsername() {
27         return username;
28     }
29     public void setUsername(String username) {
30         this.username = username;
31     }
32     public String getPassword() {
33         return password;
34     }
35     public void setPassword(String password) {
36         this.password = password;
37     }
38
39
40     public User() {}
41     public User(String username, String password) {
42         super();
43         this.username = username;
44         this.password = password;
45     }
46 }

3、持久层

package com.carry.mapper;import org.apache.ibatis.annotations.Mapper;import com.carry.entity.User;import tk.mybatis.mapper.common.BaseMapper;@Mapper
public interface UserMapper extends BaseMapper<User> {/*** 根据用户名统计(假设它是一个很复杂的SQL)** @param username 用户名* @return 统计结果*/int countByUsername(String username);
}

4、映射文件UserMapper.xml

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 <mapper namespace="com.carry.mapper.UserMapper">
4
5   <select id="countByUsername" resultType="java.lang.Integer">
6       SELECT count(1) FROM user WHERE username = #{username}
7   </select>
8 </mapper>

测试

完成数据访问层接口后,编写一个junit测试类来检验代码的正确性。

 1 package com.carry;2 3 import org.junit.Test;4 import org.junit.runner.RunWith;5 import org.slf4j.Logger;6 import org.slf4j.LoggerFactory;7 import org.springframework.beans.factory.annotation.Autowired;8 import org.springframework.boot.test.context.SpringBootTest;9 import org.springframework.test.context.junit4.SpringRunner;
10
11 import com.carry.entity.User;
12 import com.carry.mapper.UserMapper;
13 import com.github.pagehelper.PageHelper;
14 import com.github.pagehelper.PageInfo;
15
16 @RunWith(SpringRunner.class)
17 @SpringBootTest
18 public class SpringbootMapperPagehelperApplicationTests {
19
20     private final Logger logger = LoggerFactory.getLogger(this.getClass());
21
22     @Autowired
23     private UserMapper userMapper;
24
25     @Test
26     public void test() {
27         try {
28             final User user1 = new User("u1", "p1");
29             final User user2 = new User("u1", "p2");
30             final User user3 = new User("u3", "p3");
31             userMapper.insertSelective(user1);
32             logger.info("[user1回写主键] - [{}]", user1.getId());
33             userMapper.insertSelective(user2);
34             logger.info("[user2回写主键] - [{}]", user2.getId());
35             userMapper.insertSelective(user3);
36             logger.info("[user3回写主键] - [{}]", user3.getId());
37             final int count = userMapper.countByUsername("u1");
38             logger.info("[调用自己写的SQL] - [{}]", count);
39
40             // TODO 模拟分页
41             for (int i = 0; i < 20; i++) {
42                 userMapper.insertSelective(new User("u" + i, "p" + i));
43             }
44             // TODO 分页 + 排序 this.userMapper.selectAll() 这一句就是我们需要写的查询,有了这两款插件无缝切换各种数据库
45             final PageInfo<User> pageInfo = PageHelper.startPage(1, 10).setOrderBy("id desc")
46                     .doSelectPageInfo(() -> this.userMapper.selectAll());
47             logger.info("[lambda写法] - [分页信息] - [{}]", pageInfo.toString());
48
49             PageHelper.startPage(1, 10).setOrderBy("id desc");
50             final PageInfo<User> userPageInfo = new PageInfo<>(this.userMapper.selectAll());
51             logger.info("[普通写法] - [{}]", userPageInfo);
52         } catch (Exception e) {
53             logger.error(e.getMessage());
54         }
55     }
56
57 }

Springboot集成mybatis通用Mapper与分页插件PageHelper相关推荐

  1. 一起来学SpringBoot | 第八篇:通用Mapper与分页插件的集成

    **本文作者:**唐亚峰 本文链接:http://blog.battcn.com/2018/05/10/springboot/v2-orm-mybatis-plugin/ **版权声明:**本博客所有 ...

  2. Java使用lambda进行分页,SpringBoot(八):整合mybatis,通用mapper,分页插件,lambda,Logger,junit用法...

    本文作者:低调小熊猫 转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032 整合demo 配置依赖 tk.mybatis mapp ...

  3. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示

    http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...

  4. 第 5 课 SpringBoot集成Mybatis(2)-配置文件版

    第五课 SpringBoot集成Mybatis(2)-配置文件版 文章目录 第五课 SpringBoot集成Mybatis(2)-配置文件版 1. 引入依赖:pom.xml 2. 配置applicat ...

  5. spring boot整合mybatis+通用mapper+pagehelper分页插件

    spring boot整合mybatis+通用mapper+pagehelper分页插件 pom依赖 <?xml version="1.0" encoding="U ...

  6. SpringBoot集成MyBatis的分页插件PageHelper(回头草)

    俗话说:好?不吃回头草,但是在这里我建议不管你是好马还是不好马,都来吃吃,带你复习一下分页插件PageHelper. 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心 ...

  7. SpringBoot集成MyBatis的分页插件PageHelper

    [写在前面] 项目的后台管理系统需要展示所有资源信息,select * 虽然方便但数据量过于庞大会严重降低查找效率,页面加载慢,用户体验差.分页自然是必要选择,但原生的方法过于繁杂.MyBatis的分 ...

  8. springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三)

    springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三) 例: package com.example.demo.service;import com.exa ...

  9. SSM项目使用Mybatis通用mapper插件tk.mybatis的用法

    SSM项目使用Mybatis通用mapper插件tk.mybatis的用法 https://blog.csdn.net/qq_40060806/article/details/82949722 TKm ...

最新文章

  1. mysql引擎层存储层_MySQL存储底层技术:InnoDB底层原理解读
  2. 关于火狐(firefox4)
  3. jsp动作之 getProperty
  4. mysql 42642 安装报错_1/5 MySQL入门总结:下载安装
  5. boost asio io_context 没任务不退出
  6. java.util.Collections类使用(很多秘密,网上资料亲测)
  7. 【转】vue项目重构技术要点和总结
  8. perl学习二:简单变量
  9. linux通过usb给windows,如何从Linux创建Windows USB安装程序 | MOS86
  10. GCC Spec Files
  11. 马科维茨投资组合理论
  12. DBCP连接池配置优化分析
  13. iOS中获取NSError错误信息汇总
  14. 简单算法——奇因数代数和
  15. TERMIN汤铭,FE8.1芯片一进四出扩展坞(HUB)集线器芯片。
  16. 牛年贺岁特辑 | 盘点5G产业看趋势,喜迎牛年谋新局
  17. WORD设置标题格式
  18. Goroutine被动调度之一(18)
  19. 代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- itextpdf
  20. 使用python处理wps表格_python中常⽤的excel模块库

热门文章

  1. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之第一个驱动
  2. 【Python】画图海龟
  3. 数值计算方法(六)——迭代法求解线性方程组
  4. 数字信号处理——时频分析(短时傅里叶变换)
  5. STM32学习——中断方式下的发送数据
  6. 基于OK6410开发板Uboot源码简单分析
  7. input子系统分析一
  8. libevent源码深度剖析六
  9. android bitmap大小计算,android 之Bitmap 内存大小计算
  10. Spring中拦截/和拦截/*的区别