Mybatis通用Mapper介绍

Mybatis 通用 Mapper

极其方便的使用 Mybatis 单表的增删改查,支持单表操作,不支持通用的多表联合查询

优点:

通用 Mapper 可以极大的方便开发人员。

为了让您更方便的了解通用 Mapper,下面贴一段代码来看实际效果。

通用Mapper

通用 Mapper 可以缓存,全部针对单表操作,每个实体类都需要继承通用 Mapper 接口来获得通用方法。

实际开发过程中,我们对数据库单表的操作情况有很多,有了通用mapper插件, 我们实现相对应的接口,整合到spring boot项目中,减少了xml文件的配置,使我们的开发更高效。

如何整合通用Mapper插件

引入依赖

    <!--mapper -->

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper-spring-boot-starter</artifactId>

<version>1.1.0</version>

</dependency>

<!--pagehelper -->

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper-spring-boot-starter</artifactId>

<version>1.1.0</version>

</dependency>

<!--阿里巴巴数据源 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.25</version>

</dependency>

通过pom.xml文件引入通用Mapper依赖,同时引入了druid数据源和PageHelper分页的插件,通过 springboot配置文件application.properties进行配置。

# 驱动配置信息

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.url = jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf-8

spring.datasource.username = root

spring.datasource.password = root

spring.datasource.driverClassName = com.mysql.jdbc.Driver

连接池的配置信息

初始化大小,最小,最大

spring.druid.initialSize=5


spring.druid.minIdle=5


spring.druid.maxActive=20

配置获取连接等待超时的时间

spring.druid.maxWait=60000

配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

spring.druid.timeBetweenEvictionRunsMillis=60000

配置一个连接在池中最小生存的时间,单位是毫秒

spring.druid.minEvictableIdleTimeMillis=300000


spring.druid.validationQuery=SELECT 1 FROM DUAL


spring.druid.testWhileIdle=true


spring.druid.testOnBorrow=false


spring.druid.testOnReturn=false


spring.druid.poolPreparedStatements=true


spring.druid.maxPoolPreparedStatementPerConnectionSize=20

配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙

spring.druid.filters=stat,wall,log4j

通过connectProperties属性来打开mergeSql功能;慢SQL记录

spring.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

mybatis

扫描entrity包

mybatis.type-aliases-package=cn.jj.model


mybatis.mapper-locations=classpath:mapper/*.xml

mappers 多个接口时逗号隔开

mapper.mappers=tk.mybatis.mapper.common.Mapper

mapper.mappers=cn.jj.common.MyMapper


mapper.not-empty=false


mapper.identity=MYSQL

pagehelper

pagehelper.helperDialect=mysql


pagehelper.reasonable=true


pagehelper.supportMethodsArguments=true


pagehelper.params=count=countSql

到这里,我们就做好了相关的配置。接着创建MyMapper接口继承Mapper。


public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

创建实体Bean,使用通用Mapper一定要保证实体类字段和数据库字段一致。如果不一致可以利用注解进行映射。

@Column(name = "nick")

private String name;

@Table(name = "city")

public class City implements Serializable{

private static final long serialVersionUID = 1L;

@Id

private String id;

private String name;

private String state;
public String getId() {</br>
return id;</br>
}</br></br> public void setId(String id) {</br>
this.id = id;</br>
}</br></br> public String getName() {</br>
return name;</br>
}</br></br> public void setName(String name) {</br>
this.name = name;</br>
}</br></br> public String getState() {</br>
return state;</br>
}</br></br> public void setState(String state) {</br>
this.state = state;</br>
}</br></br>

}


接着,在Mapper接口层继承刚才的MyMapper接口,到这里,单表的增删改查已经实现了。


@Mapper
public interface CityMapper extends MyMapper<City>{

}

接着,我们通过测试类测试下,数据库添加好相应数据。

    @Autowired

private CityMapper cityDao;

//查询</br>
@Test</br>
public void selectAll() {</br>
List&lt;City&gt; city = cityDao.selectAll();</br>
for (City city2 : city) {</br>
System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
}</br>
}</br>

控制台输出结果如下:


其他增删改方法大家大家试着自己尝试,也都特别简单。数据库一共有四条数据,接下来我们加上分页插件。首先我们通过官网看下分页插件所支持的数据库和Mybatis的版本。


可以看出PageHelper支持大部分主流关系型数据库,引用分页插件以后,Mybatis分页会变得特别简单,需要注意的是,在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。详细的使用方法我们看下官网的例子。

例一:

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);

assertEquals(2, list.get(0).getId());

assertEquals(10, list.size());

//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>

assertEquals(182, ((Page) list).getTotal());

例二:

//request: url?pageNum=1&pageSize=10

//支持 ServletRequest,Map,POJO 对象,需要配合 params 参数

PageHelper.startPage(request);

//紧跟着的第一个select方法会被分页

List<Country> list = countryMapper.selectIf(1);

//后面的不会被分页,除非再次调用PageHelper.startPage


List<Country> list2 = countryMapper.selectIf(null);


//list1


assertEquals(2, list.get(0).getId());


assertEquals(10, list.size());


//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,


//或者使用PageInfo类(下面的例子有介绍)


assertEquals(182, ((Page) list).getTotal());


//list2


assertEquals(1, list2.get(0).getId());


assertEquals(182, list2.size());


例三,使用PageInfo的用法:

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);

List<Country> list = countryMapper.selectAll();

//用PageInfo对结果进行包装

PageInfo page = new PageInfo(list);

//测试PageInfo全部属性

//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());

assertEquals(10, page.getPageSize());

assertEquals(1, page.getStartRow());

assertEquals(10, page.getEndRow());

assertEquals(183, page.getTotal());

assertEquals(19, page.getPages());

assertEquals(1, page.getFirstPage());

assertEquals(8, page.getLastPage());

assertEquals(true, page.isFirstPage());

assertEquals(false, page.isLastPage());

assertEquals(false, page.isHasPreviousPage());

assertEquals(true, page.isHasNextPage());

下面是我们自己的service层查询方法,使用PageHelper进行分页,取出第二页数据,每页显示两条:

@Override

public List<City> selectAll() {

//分页插件的使用 第一个参数是当前页 第二个参数是每页显示的条数

PageHelper.startPage(2, 2);

return cityDao.selectAll();

}

再来看一下测试类:

@RunWith(SpringRunner.class)

@SpringBootTest

public class MapperTest {

@Autowired</br>
private CityService cityService;</br></br> @Autowired</br>
private UserService userService;</br></br> //查询</br>
@Test</br>
public void selectAll() {</br>
List&lt;City&gt; city = cityService.selectAll();</br>
for (City city2 : city) {</br>
System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
}</br>
}</br>

}

接下来我们开始测试,通过查看控制台输出信息,说明分页已经生效。数据库一共是四条数据,我们取出第二页数据,取出两条。打印结果如下:


到此,通用Mapper和PageHelper已经和spring boot整合完毕!spring boot 对于开发者来说正变得越来越高效、敏捷!

(完)


参考文章

Mybatis通用Mapper
PageHelper官方文档

    </div>

spring-boot | 整合通用Mabatis 分页插件PageHelper的更多相关文章

  1. Spring Boot集成MyBatis与分页插件

    Maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>p ...

  2. spring boot和mybatis集成分页插件

    MyBatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到SqlSessionFactory中. 首先要说的是,Spring在依赖注入bean的时候,会把所有实现MyBa ...

  3. SpringBoot整合MyBatis的分页插件PageHelper

    1.导入依赖(maven) <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...

  4. Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程

    Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...

  5. spring boot 整合pagehelper分页插件

    Spring Boot 整合pagehelper分页插件 测试环境: spring boot  版本 2.0.0.M7 mybatis starter 版本  1.3.1 jdk 1.8 ------ ...

  6. Spring Boot系列教程八: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...

  7. spring boot 整合mybatis 的xml版本【包括逆向工程以及分页插件】

    逆向工程很方便,可以直接根据数据库和配置文件生成pojo,mapper接口和相应的映射文件. xml版本和全注解版本其实差不多,大部分情况下,都会保留xml文件方便其他人去扩展新的dml方法. 文章旨 ...

  8. Spring Boot系列教程十一: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...

  9. spring boot(二)整合mybatis plus+ 分页插件 + 代码生成

    先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...

随机推荐

  1. Kafka详解与总结(六)

    索引 稀疏存储,每隔一定字节的数据建立一条索引(这样的目的是为了减少索引文件的大小). 下图为一个partition的索引示意图: 注: 现在对6.和8建立了索引,如果要查找7,则会先查找到8然后,再 ...

  2. 推荐一波 瀑布流的RecylceView

    推荐博客:http://www.bubuko.com/infodetail-999014.html

  3. 使用Oracle SQL Developer迁移MySQL至Oracle数据库

    Oracle SQL Developer是Oracle官方出品的数据库管理工具.本文使用Oracle SQL Developer执行从MySQL迁移至Oracle数据库的操作. 2017年3月6日 操 ...

  4. 使用Oracle的DBMS_SQL包执行动态SQL语句

    引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...

  5. jQuery学习笔记(3)-操作jQuery包装集的函数

    一.前言 在使用jQuery选择器获取到jQuery包装集后,我们就要对这些包装集进行各种操作 二.创建新的元素 1.使用HTMLDOM创建元素 (1)什么是DOM 当网页被加载时,浏览器会创建页面的 ...

  6. CSS布局整理

    目录 常用居中方法 水平居中 垂直居中 单列布局 二列&三列布局 float+margin position+margin 圣杯布局(float+负margin) 双飞翼布局(float+负m ...

  7. IPython、Notebook、qtconsole使用教程

    IPython.Notebook.qtconsole使用教程 上一篇为Python,IPython,qtconsole,Notebook,Jupyter快速安装教程 1. 使用IPython 自动补全 ...

  8. 本地编译全志R系列的步骤(Ubuntu16.04.4版本)

    本地编译全志R系列的步骤(Ubuntu16.04.4版本) 2018/6/14 9:32 版本:V1.0 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的And ...

  9. git 删除分支如何恢复

    强制删除了一个分支而后又想重新使用这个分支,该怎么找回该分支上的代码呢? 一:问题描述: 今天师父说上线几个功能,让我把开发的分支推送到远程.当打开git就傻眼了,之前开发好的分支被我删除了,就连推送 ...

  10. js技巧(三)

    1.检测浏览器,search的用法 if(window.navigator.userAgent.search(/firefox/i)!=-1){ alert('ff'); } else if(wind ...