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

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

一、自定义查询字段

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

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

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

二、条件查询

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

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

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

条件拼接sql的源码如下:

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

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

三、分页查询

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

  1. Wrapper查询方式分页

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

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

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

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

2.自定义sql方式

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

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

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

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

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

/* 设置页大小,当前页,排序字段,排序方式是否是asc */
Page<Person> page = new Page<>(currentPage, pageSize);
page.setCondition(condition);
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. Permission权限大全

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...

  2. python写入csv方法总结

    最常用的一种方法,利用pandas包 import pandas as pd #任意的多组列表 a = [1,2,3] b = [4,5,6] #字典中的key值即为csv中列名 dataframe ...

  3. NET全控件

    NBSI WebSite Injection ReportSite Address: www.xmht.comInject URL: http://www.xmht.com/news.aspx?sty ...

  4. kafka入门学习---1 启动kakfa

    1.查看kafka生产者产生的数据 kafka-console-consumer.sh --zookeeper hadoop-:,hadoop-:,hadoop-: -topic kafkademo ...

  5. mongodb操作二

    { "_id" : ObjectId("5d4d74e1685764420c4f9337"), "createTime" : ISODate ...

  6. redis运维手册

    版本采用:redis-3.2.11.tar.gz 官网下载地址:https://redis.io/download 1.redis服务器资源 redis服务器基础配置CPU2核.内存按需分配,系统磁盘 ...

  7. centos7安装kvm及kvm管理

    一.安装kvm 查看CPU是否支持虚拟化  grep -E 'svm|vmx' /proc/cpuinfo - vmx is for Intel processors - svm is for AMD ...

  8. 拷贝docker镜像到其他机器部署

    有拷贝docker images到其他主机的情况,当然是通过pull的方式来转移到其他宿主机. 1 sudo docker save -o golang:alpine3.7  ./my-golang- ...

  9. 转:OPC协议解析-OPC UA OPC统一架构

    1    什么是OPC UA 为了应对标准化和跨平台的趋势,为了更好的推广OPC,OPC基金会近些年在之前OPC成功应用的基础上推出了一个新的OPC标准-OPC UA.OPC UA接口协议包含了之前的 ...

  10. 【AMAD】django-allauth

    简介 个人评分 简介 django-allauth1集成的Oauth API包括: Amazon (OAuth2) AngelList (OAuth2) Bitly (OAuth2) Dropbox ...