Mybatis Plus 是Mybatis的增强插件,对数据库操作Mybatis Plus提供了抽象层次比Mybatis更高的操作方法。

Wrapper是Mybatis Plus里拼接sql的包装类。具体的各种查询功能可以查看Mybatis Plus 条件构造器官方文档

一、自定义查询字段

EntityWrapper 的setSqlSelect可以定义需要查询的库表字段。但是很多时候我们查询的数据可能来自不同的表,我们这时候可能需要用到子查询,那么这时候该怎么使用EntityWrapper 呢?

答案是直接写在setSqlSelect里面。例

  1. Wrapper<Res> ew = new EntityWrapper<>();
  2. ew.eq("deleted", 0);
  3. ew.setSqlSelect("*", "(select name from res_type where id=res_type_id) as res_type_name",
  4. "(select name from probe where id=probe_id) as probe_name");

二、条件查询

一个很常见的场景是查询某字段的时候如果值不为空则查询,否则不查询。Mybatis Plus的拼接sql方法有一个条件拼接。

ew.eq(boolean condition,String column,Object params)

  1. public List<Person> findPersonList(String age,String gender){
  2. Wrapper<Res> ew = new EntityWrapper<>();
  3. ew.eq(!"".equals(gender),"gender", 0);
  4. ew.eq(!"".equals(age),"age",age);
  5. }

条件拼接sql的源码如下:

  1. public Wrapper<T> and(boolean condition, String sqlAnd, Object... params) {
  2. if (condition) {
  3. ((SqlPlus)this.sql.AND()).WHERE(this.formatSql(sqlAnd, params));
  4. }
  5. return this;
  6. }

我们可以看到是只有条件为true的情况下才拼接sql,否则是不会拼接的。绝大部分Mybatis Plus的操作都支持条件的查询。这样可以节省大量的代码。

三、分页查询

Mybatis Plus分页查询的重点在于Page这个包装类。

  1. Wrapper查询方式分页

Controller层我们先构建一个Page包装类,这个包装类的类型应该跟你需要分页的数据类型是一致。例如我们希望返回一个List<Map<String,Object>>格式的数据,我们需要构建一个Page<Map<String,Object>>的page类。

  1. /* 设置页大小,当前页,排序字段,排序方式是否是asc */
  2. Page<Map<String, Object>> page = new Page<>(currentPage, pageSize, "update_time" , false);
  3. Map<String, Object> condition = Maps.newHashMap();
  4. condition.put("age", 23);
  5. /* 如果有查询参数,我们可以放到condition里面去,然后在Service里面获取条件再进行查询*/
  6. page.setCondition(condition);
  7. /* 把分页查询的数据放入records,Mybatis Plus会自动查询出总数据量*/
  8. page.setRecords(this.dataService.findPageData(page));

先new一个page包装类。如果有查询参数,我们可以放到condition里面去,然后在Service里面获取条件再进行查询。注意,把分页查询的数据放入records,Mybatis Plus会自动查询出总数据量,无需再用sql查询总个数之后setTotal。具体的查询我们可以放在Service里面编写。

  1. public List<Map<String, Object>> findPageData(Page<Map<String, Object>> page) {
  2. Wrapper<Res> ew = new EntityWrapper<>();
  3. ew.ge("age", 23);
  4. ew.eq("gender",1)
  5. return baseMapper.selectMapsPage(page, ew);
  6. }

2.自定义sql方式

如果你的sql语句比较特殊,需要自己写sql的话。你的分页可以写到mapper里,或者mapping.xml里面。

  1. public interface PersonMapper{
  2. @Select("select * from person where gender=${gender} oder by age")
  3. List<Person> selectPersonList(Pagination page, @Param("gender") String gender);
  4. }

Service里面直接调用mapper里的方法,如果条件比较复杂,则使用page中的condition来获取字段。

  1. public Page<Person> getTestData(Page<Person> page,String gender){
  2. return page.setRecords(this.baseMapper.selectPersonList(page,gender));
  3. }

Controller里调用Service,相比于上一种方法这个方法简化了Controller层的部分代码。

  1. /* 设置页大小,当前页,排序字段,排序方式是否是asc */
  2. Page<Person> page = new Page<>(currentPage, pageSize);
  3. page.setCondition(condition);
  4. return this.dataService.getTestData(page,"1");

Mybatis Plus 使用详解的更多相关文章

  1. mybatis代码生成器配置文件详解

    mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...

  2. 深入浅出mybatis之启动详解

    深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启 ...

  3. MyBatis核心配置文件详解

    ------------------------siwuxie095                                     MyBatis 核心配置文件详解         1.核心 ...

  4. 《深入理解mybatis原理2》 Mybatis初始化机制详解

    <深入理解mybatis原理> Mybatis初始化机制详解 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程 ...

  5. Mybatis案例超详解(上)

    Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...

  6. MyBatis Mapper XML 详解

    MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...

  7. Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节

    简介 这是 Mybatis 系列博客的第四篇,我本来打算详细讲解 mybatis 的配置.映射器.动态 sql 等,但Mybatis官方中文文档对这部分内容的介绍已经足够详细了,有需要的可以直接参考. ...

  8. mybatis 学习笔记 -详解mybatis 及实例demo

    快速入门1 要点: 首先明白mybatis 是什么 这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. 首先, ...

  9. mybatis核心文件详解

    MyBatis配置文件详解 configuration  这是配置文件的根元素标签,所有的其他元素都要在这个标签下使用. environments   用于管理所有环境,并可以指定默认使用哪个环境,通 ...

  10. MyBatis 全局配置文件详解(七)

    MyBatis 配置文件作用 MyBatis配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息.它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信息和设置功能.其 ...

随机推荐

  1. hutool-all 包把实体Bean转化成字符串,以及把字符串转化成Bean对象

    GxyJobEntity gxyJobEntity1 = new GxyJobEntity(); gxyJobEntity1.setUserId("user001"); gxyJo ...

  2. Java日志体系(八)最佳实践

    java常用日志框架关系 Log4j 2与Log4j 1发生了很大的变化,Log4j 2不兼容Log4j 1. Logback必须配合Slf4j使用.由于Logback和Slf4j是同一个作者,其兼容 ...

  3. 基于scrapy框架的爬虫

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. scrapy 框架 高性能的网络请求 高性能的数据解析 高性能的 ...

  4. mysql 批量kill locked 进程

    mysql -s -e "show processlist;" | grep 'Sending data' | awk '{print "kill "$1&qu ...

  5. 【JVM学习笔记】动态代理

    基于JDK的动态代理例子如下 接口 Subject public interface Subject { public abstract void request(); } 实现类RealSubjec ...

  6. 前端学习(一) body标签(上)

    body标签中相关标签 主要内容: 字体标签:  h1~h6.<font>.<u>.<b>.<strong><em>.<sup> ...

  7. 在VM虚拟机Windows Server r2上部署安装Microsoft Dynamics CRM 2016 步骤详解(一)

    应公司需求,最近在学微软的Dynamics CRM.在搭建环境的过程中也遇到了一些雷坑,在这里分享一下安装部署过程当中所遇到的一些问题, 安装Microsoft Dynamics CRM 2016的几 ...

  8. Python3 Selenium自动化web测试 ==> 第五节 WebDriver高级应用 -- 使用JavaScript操作页面元素

    学习目的: 中级水平技术提升 在WebDriver脚本代码中执行JS代码,可以解决某些 .click()方法无法生效等问题 正式步骤: Python3代码如下 # -*- coding:utf-8 - ...

  9. 【JAVA系列】使用JavaScript实现网站访问次数统计代码

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]使用JavaScript实现网站 ...

  10. JQ scrollTop 无效的场景

    先要设置DOM为显示,然后在设置scrollTop,先后顺序不能调换.