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. 前端面试题HTML

    浏览器页面有哪三层构成,分别是什么,作用是什么?

  2. Android RecyclerView 滑动时图片加载的优化

    RecyclerView 滑动时的优化处理 在滑动时停止加载图片,在滑动停止时开始加载图片,这里用了Glide.pause 和Glide.resume.这里为了避免重复设置增加开销,设置了一个标志变量 ...

  3. 关于FLASK WEB开发8d 数据库迁移的问题

    首先, 第一步,要删除data-dev.sqlite这个数据库 第二步,进行下面的重建 暂时的解决办法是: python manage.py shell In [2]: from app import ...

  4. MySQL 帮助类 MySQLHelper

    /// <summary> /// MySqlHelper操作类 /// </summary> public sealed partial class MySQLHelper ...

  5. (转)Hibernate框架基础——多对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...

  6. (转)Hibernate框架基础——映射普通属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52739871 持久化对象与OID 对持久化对象的要求 提供一个无参的构造器.使Hibernat ...

  7. MFC_2.2 编辑框和文本控件

    编辑框和文本控件 1.拖控件 2.绑定变量.用户名密码编辑框控件类型.取名字.用户协议用值类型,默认CString. 设置属性.用户类型.选择mustiline TRUE. AOTO HScroll ...

  8. 梦想CAD控件 2019.01.20更新

    下载地址:http://www.mxdraw.com/ndetail_10120.html1. 修改CAD不等比例块保存问题2. 修改CAD捕捉时,Z值对捕捉不准的影响3. 修改图片对象选择后,自动跑 ...

  9. 运行容器出现docker: Error response from daemon: driver failed programming external connectivity on endpoint elegant_ptolemy (7fe85ca6bd744449ff82b81c1577d73b6821c4e51780c8238fad6aa0cb940522): (iptables fai

    运行容器时出现以下报错: docker: Error response from daemon: driver failed programming external connectivity on ...

  10. Linux常用命令——关机与重启命令

    1.shutdown命令 shutdown [选项] 时间 --使用shutdown进行关机或重启会正确保存正在使用的服务,其他命令有一定的危险性,建议最好使用shutdown命令进行关机重启 选项: ...