mybatis QueryWrapper的条件构造之apply、last、select解析

目录
  • QueryWrapper条件构造之apply、last、select
    • mysql上的limit使用
    • 如果是sqlserver
  • 条件构造器QueryWrapper实例
    • 案例一
    • 案例二
    • 案例三
    • 案例四

QueryWrapper条件构造之apply、last、select

场景: 查询数据库限制条数时

mysql上的limit使用

QueryWrapper needSyn = new QueryWrapper();
needSyn.ge("ModifyDate",lmtSynRec.getLatestDate());
needSyn.last("limit 200");
List<CusCarInfo> needData = cusCarInfoMapper.selectList(needSyn);

如果是oracle则可以用apply

needSyn.apply("rownum < {0}" , 200);

如果是sqlserver

建议自己写sql查询语句

<select id="getSynList" resultType="com.xmeport.project.model.entity.CusCarInfo">
    select top ${top}  *  from CUS_CAR_INFO t where t.ModifyDate > cast(#{latestDate} as datetime) orderBy 
 t.ModifyDate asc
</select>
List<CusCarInfo> getSynList(int top, Date latestDate);

或者使用QueryWrapper的select

QueryWrapper<CusCarInfo> wrapper  = new QueryWrapper();
wrapper.select("top 200 *");
return this.list(wrapper);

以上就是根据最新时间查询top条数据

传入的字段是时间类型,就用#{} 占位符接收。如果是具体的一个数字或字符可以用 ${ }来接收。

条件构造器QueryWrapper实例

我们再搞几个实例来深入理解下条件构造器QueryWrapper的用法:

案例一

查询姓李的,并且出生日期范围是1993-02-09到1994-04-09的员工

sql实现:

SELECT * FROM t_employee WHERE DATE_FORMAT(birthday,'%Y-%m-%d')>='1993-02-09' AND DATE_FORMAT(birthday,'%Y-%m-%d')<='1994-04-09' AND NAME LIKE '李%'

mp实现:

/**
 * 查询姓李的,并且出生日期范围是1993-02-09到1994-04-09的员工
 * sql:SELECT * FROM t_employee WHERE DATE_FORMAT(birthday,'%Y-%m-%d')>='1993-02-09' AND DATE_FORMAT(birthday,'%Y-%m-%d')<='1994-04-09' AND NAME LIKE '李%'
 */
@Test
public void selectByQueryWrapper3(){
  QueryWrapper<Employee> queryWrapper=new QueryWrapper();
  // QueryWrapper<Employee> queryWrapper2=Wrappers.<Employee>query();
  queryWrapper.apply("DATE_FORMAT(birthday,'%Y-%m-%d')>={0} and DATE_FORMAT(birthday,'%Y-%m-%d')<={1}","1993-02-09","1994-04-09").likeRight("name","李");
  List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
  System.out.println(employeeList);
}

案例二

查询姓李的或者邮箱不为空并且是女性的员工

sql实现:

SELECT * FROM t_employee WHERE NAME LIKE '李%' OR (email IS NOT NULL AND gender ='女')

mp实现:

/**
 * 查询姓李的或者邮箱不为空并且是女性的员工
 * sql:SELECT * FROM t_employee WHERE NAME LIKE '李%' OR (email IS NOT NULL AND gender ='女')
 */
@Test
public void selectByQueryWrapper4(){
  QueryWrapper<Employee> queryWrapper=new QueryWrapper();
  // QueryWrapper<Employee> queryWrapper2=Wrappers.<Employee>query();
  queryWrapper.likeRight("name","李").or(wq->wq.isNotNull("email").eq("gender","女"));
  List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
  System.out.println(employeeList);
}

案例三

查询姓李的并且邮箱不为空或者是女性的员工

sql实现:

SELECT * FROM t_employee WHERE NAME LIKE '李%' AND (email IS NOT NULL OR gender ='女')

mp实现:

/**
 * 查询姓李的并且邮箱不为空或者是女性的员工
 * sql:SELECT * FROM t_employee WHERE NAME LIKE '李%' AND (email IS NOT NULL OR gender ='女')
 */
@Test
public void selectByQueryWrapper5(){
  QueryWrapper<Employee> queryWrapper=new QueryWrapper();
  // QueryWrapper<Employee> queryWrapper2=Wrappers.<Employee>query();
  queryWrapper.likeRight("name","李").and(wq->wq.isNotNull("email").or().eq("gender","女"));
  List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
  System.out.println(employeeList);
}

案例四

查询属于编号1,2,3部门的并且薪水小于等于3500的员工 根据年龄从大到小排序显示

sql实现:

SELECT * FROM t_employee WHERE salary<=3500 AND departmentId IN (1,2,3) ORDER BY birthday ASC

mp实现:

/**
 * 查询属于编号1,2,3部门的并且薪水小于等于3500的员工 根据年龄从大到小排序显示
 * sql:SELECT * FROM t_employee WHERE salary<=3500 AND departmentId IN (1,2,3) ORDER BY birthday ASC
 */
@Test
public void selectByQueryWrapper6(){
  QueryWrapper<Employee> queryWrapper=new QueryWrapper();
  // QueryWrapper<Employee> queryWrapper2=Wrappers.<Employee>query();
  queryWrapper.likeRight("name","李").and(wq->wq.isNotNull("email").or().eq("gender","女"));
  List<Employee> employeeList = employeeMapper.selectList(queryWrapper);
  System.out.println(employeeList);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用详解

    目录 QueryWrapper LambdaQueryWrapper 链式查询 假如我们有一张banner_item表,现需要通过banner_id查出所有数据(查询List) @Data public class BannerItem {     private Long id;     private String name;     private String img;     private String keyword;     private Integer type;     p

  • 如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    目录 1.问题 2.优化方案 1.问题 在MyBatisPlus中经常会用到如下所示的代码来构造查询条件: QueryWrapper<User> queryWrapper = new QueryWrapper<>(); if (userQuery.getId() != null) {     queryWrapper.eq("id", userQuery.getId()); } if (userQuery.getName() != null) {     que

  • 基于mybatis-plus QueryWrapper 排序的坑

    目录 QueryWrapper排序的坑 条件构造器QueryWrapper 案例一 案例二 案例三 案例四 QueryWrapper排序的坑 大致可以总结成上面的两句话. 条件构造器QueryWrapper 我们再搞几个实例来深入理解下条件构造器QueryWrapper的用法: 案例一 查询姓李的,并且出生日期范围是1993-02-09到1994-04-09的员工 sql实现: SELECT * FROM t_employee WHERE DATE_FORMAT(birthday,'%Y-%m-

  • MybatisPlus自带的queryWrapper实现时间倒序方式

    目录 MybatisPlus自带queryWrapper时间倒序 使用queryWrapper解决字符串中含数字的排序问题 造成的原因 解决办法 MybatisPlus自带queryWrapper时间倒序 queryWrapper.select().orderByDesc("create_time"); 使用queryWrapper解决字符串中含数字的排序问题 今天遇到了Oracle数据库字符串(含数字)排序问题,这里记录的是如何用MyBatis-Plus的queryWrapper条件

  • Mybatis Plus 中的LambdaQueryWrapper示例详解

    目录 前言 QueryWrapper LambdaQueryWrapper 总结 前言 之前写过 Mybatis Plus 的基本配置和使用. Mybatis-Plus 看这一篇就够了 当初在进行查询时,虽然没有写硬SQL进行查询数据库操作,但是也不是太友好! QueryWrapper 为什么说不够友好,客官大姥爷们先看一个例子,假设数据库中,存在一个user表,表结构呢相对简单,如下所示: CREATE TABLE user1 ( id BIGINT(20) NOT NULL COMMENT

  • mybatis QueryWrapper的条件构造之apply、last、select解析

    目录 QueryWrapper条件构造之apply.last.select mysql上的limit使用 如果是sqlserver 条件构造器QueryWrapper实例 案例一 案例二 案例三 案例四 QueryWrapper条件构造之apply.last.select 场景: 查询数据库限制条数时 mysql上的limit使用 QueryWrapper needSyn = new QueryWrapper(); needSyn.ge("ModifyDate",lmtSynRec.g

  • MyBatis-Plus条件构造器之condition参数的使用

    首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema

  • mybatis plus实现条件查询

    目录 一.wapper介绍 二.常用的条件方法 1. gt 表示 > 2. le 表示 <= 3. lt 表示 < 4. isNull 表示 查询值为null 5. isNotNull 表示 查询值为不为null 6. eq 表示 = 7. ne 表示 != 8. between 表示 在范围之间,包含边界值 9. notBetween 表示 在范围之外,不含边界值 10. notBetween 表示 在范围之外,不含边界值 11. allEq 多条件查询 12. .链式编程,多条件查询

  • mybatis collection 多条件查询的实现方法

    mybatis collection 多条件查询的实现方法 前言: 业务需要通过mybatis 查询返回嵌套集合,嫌多次查询太麻烦,用自带的高级查询解决问题,下边是代码,已测试通过. 说下自己的理解,就是一个主查询结果集里面嵌套了子查询的结果集,可以是多个子查询,每个子查询的条件从主查询结果集中获取,返回值各自定义.collection 标签的property是主查询里面集合的名字,如果有多个就再写个collection,column是子查询参数,单参数直接写主查询结合返回结果,例如直接写上us

  • 解决myBatis中删除条件的拼接问题

    今天刚刚学习了mybatis,做了简单的对数据库的增删改查.在进行删除操作时,单条删除时很简单,但是批量删除的时候拼接删除条件却有些麻烦,现记录一下做法. Sql语句中,当删除条件并不唯一的时候,我们有两种删除的sql语句,一种使用or拼接where中的条件,例如delete from 表名where 条件1 or 条件2,另一种是使用in 例如delete from 表名where 元素in( ) 利用第一种删除语句在mybatis中的mapping.xml中进行拼接: 利用第二种删除语句在m

  • mybatis in查询条件过长的解决方案

    目录 mybatis in查询条件过长的解决 方法1:分次查询,将参数且分割成多个短的查询后合并 方法2:xml文件中编写sql mybatis大于1000的in查询的解决 论证如下 解决办法 mybatis in查询条件过长的解决 方法1:分次查询,将参数且分割成多个短的查询后合并 代码: int splitNum =(int) Math.ceil( (float) ids.length/999); //切片数量 List<String> itemIdList = new ArrayList

  • Mybatis 查询语句条件为枚举类型时报错的解决

    目录 Mybatis查询语句条件为枚举类型报错 通常这个错误是 Mybatis处理枚举类型 1.枚举 2.包含枚举的实体类 3.书写枚举处理器 4.配置枚举处理器 5.dao层 6.mapper文件 7.测试 Mybatis查询语句条件为枚举类型报错 通常我们对于数据库中一些枚举字段使用tinyInt类型,而java对象对应的字段很多时候会为了方便定义成short或者int.但这样显然不美观方便,让后面维护的人抠破脑袋找你的常量定义在哪儿,要是没有注释简直让人崩溃.时间久后,没有人知道这里面的值

  • MyBatis中多条件查询商品的三种方法及区别

    目录 一.Sql语句设置多个参数有几种方式 二.代码附上 一.Sql语句设置多个参数有几种方式 1.散装参数:需要使用@Param标记Sql语句中占位符处的名称例如 #{name} 2.实体类封装参数 只需要保证Sql中的参数名和实体类属性名对应上,即可设置成功BrandMapper.xml中的SQL语句不用动,把TestBrandMapper中的代码修改即可 3.Map集合 只需要保证Sql中的参数名和Map集合的键的名称对应上,即可设置成功.BrandMapper.xml中Sql语句不用改

  • JavaScript函数Call、Apply原理实例解析

    这篇文章主要介绍了JavaScript函数Call.Apply原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.方法重用 使用 call() 方法,您可以编写能够在不同对象上使用的方法. 1.函数是对象方法 在 JavaScript 中,函数是对象的方法. 如果一个函数不是 JavaScript 对象的方法,那么它就是全局对象的函数(参见前一章). 下面的例子创建了带有三个属性的对象(firstName.lastName.full

随机推荐