Mybatis中使用in()查询的方式详解

目录
  • 1 使用数组方式
  • 2 使用List集合的方式
  • 3 第三种我们使用Mybatis-plus框架的条件构造器来进行查询
  • 附:Mybatis-plus的条件构造器详细使用教程
  • 总结

这篇文章我会演示几种mybatis中使用in查询的方式。

1 数组、字符串

2 集合

3 使用Myabtis-plus框架的条件构造器来实现

我们在mysql中使用in查询的方式是这样的

那在mybatis中我们使用<foreach>标签来实现包含查询

1 使用数组方式

Mapper:

Mapper.xml:

<select id="studentList" resultType="com.ywt.springboot.model.Student">
        select *
        from student
        where id in
        <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

:foreach中的 collection标签中为array,item是遍历ids中的每个元素,默认为item可以自定义。

测试类:

我们可以使用字符串来接收参数,使用逗号分隔每个参数,然后把分隔后的参数放到集合中。

2 使用List集合的方式

Mapper:

Mapper.xml

<select id="studentList" resultType="com.ywt.springboot.model.Student">
        select *
        from student
        where id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

使用list方式collection的value必须为list

测试:

3 第三种我们使用Mybatis-plus框架的条件构造器来进行查询

@Test
    void Test(){
        QueryWrapper<Student> qw = new QueryWrapper<>();
        qw.in("id",7,9);
        List<Student> students = studentMapper.selectList(qw);
        System.out.println(students.toString());
    }

测试结果:

[Student(id=7, name=蔡徐坤, age=18), Student(id=9, name=金科徐, age=18)]

附:Mybatis-plus的条件构造器详细使用教程

常用函数:

函数 说明
例子(以下为where后的条件,select * from user where ?)

eq 等于= eq("name","张三") --> name = '张三'
ne 不等于 != ne("name","李四") --> name != '李四'
gt 大于 > gt(age,18) --> age > 18 //年龄大于18岁
ge 大于等于 >= ge(age,18) --> age >=18
lt 小于 < lt(age,20) --> age < 20 //年龄小于20岁
le 小于等于 <= le(age,20) ---> age <= 20
between between 值1 and 值2 between(age,15,25) ---> 匹配15岁到25岁之间(包含15和25)
nobetween not between 值1 and 值2 notBetween(age,35,45)-->匹配不包含35-45之间的(包含35和45)
like like '%值%'
like("name","张") --> like '%张%'

notlike not like '%值%' notLike("name”,"张") --> not like '%张%'
likeLeft like '%值' likeLeft("name","王") ---> like "%王"
likeRight like '值%' likeRight("name","王") ---> like "王%"
isNull 表字段 is NULL isNull("name") ---> name is null
notNull 表字段 is not NULL isNull("name") ---> name is not null
in 表字段in(v1,v2,v3...) in("num",{1,2,3}) ---> num in (1,2,3)
notIn 表字段 not in(v1.v2,v3) notIn("num",{2,3,4}) ---> num not in (2,3,4)

使用构造器完成一个简单的查询

// SQL语句:select * from user where id = ?
// 使用条件构造器QueryWrapper
    @Test
    void queryWrapper(){
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.eq("id",1);
        List<User> users = userMapper.selectList(qw);
        users.forEach(System.out::print);
    }

那么再来一点更多条件的

// 我们要查询name里姓氏包含 ‘张',并且年龄小于30岁的
// SQL语句:select * from user where name like '张%' and age < 30

// 条件构造器:
    @Test
    void queryWrapper(){
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.likeRight("name","张").lt("age","30");
        List<User> users = userMapper.selectList(qw);
        users.forEach(System.out::println);
    }
// 查询出年龄在15-25之间,并且他的名字不为空
// SQL语句:select * from user where name is not null and age between(15,25)

//条件构造器
    @Test
    void queryWrapper(){
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.isNotNull("name").between("age",18,25);
        List<User> users = userMapper.selectList(qw);
        users.forEach(System.out::println);
    }
// 查询名字中带有王的,并且年龄不小于30,邮箱为空的
// SQL语句:select * from user where name like '%王%' and age >= 30 and email is null

// 条件构造器:
    @Test
    void queryWrapper(){
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.like("name","王").ge("age",30).isNull("email");
        List<User> users = userMapper.selectList(qw);
        users.forEach(System.out::println);
    }

总结

到此这篇关于Mybatis中使用in()查询方式的文章就介绍到这了,更多相关Mybatis使用in()查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 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 plus中使用in查询出错如何解决

    不想看我bb的直接点上面的 ''解决方法'' 我的情况是这样的,在使用mybatis plus提供的QueryWrapper方法里的in查询时,我的参数为类似"1,2,3,4"这样的字符串 //要查的参数 String masterIds = "81554,5654,55948,48945"; QueryWrapper<FpjyPauperInfo> pauperqw = new QueryWrapper<>(); pauperqw.in(&

  • Mybatis使用IN语句查询的实现

    一.简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用: select * from HealthCoupon where useType in ( '4' , '3' ) 但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map<String, Object> selectByUserId(@Param("useType") String useType) <select id="selectByUserId"

  • mybatis如何实现in传入数组查询

    目录 mybatis实现in语句传入数组 1.数据样式 2.实现方法 3.sql语句 mybatis数组传递注意事项 1.直接传递数组 2.将数字放入map中传递 mybatis实现in语句传入数组 方法: 1.数据样式 2.实现方法 3.sql语句 mybatis数组传递注意事项 parameterType为主要注意点之一,foreach循环为注意点之二 例如如下代码: 1.直接传递数组 如果 parameterType使用的是 数组参数 例如上述的Long[], 则foreach循环 col

  • Mybatis用注解写in查询的实现

    Mybatis注解写in查询 @Select("<script>" + "SELECT * FROM table WHERE OrderNo IN " + "<foreach item='item' index='index' collection='list' open='(' separator=',' close=')'>" + "#{item}" + "</foreach>

  • mybatis 查询sql中in条件用法详解(foreach)

    foreach属性主要有item,index,collection,open,separator,close 1.item表示集合中每一个元素进行迭代时的别名, 2.index指定一个名字,用于表示在迭代过程中,每次迭代到的位置, 3.open表示该语句以什么开始, 4.separator表示在每次进行迭代之间以什么符号作为分隔符, 5.close表示以什么结束, 6.collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的, 主要有一下3种情况: a.如果传入的是单

  • Mybatis中使用in()查询的方式详解

    目录 1 使用数组方式 2 使用List集合的方式 3 第三种我们使用Mybatis-plus框架的条件构造器来进行查询 附:Mybatis-plus的条件构造器详细使用教程 总结 这篇文章我会演示几种mybatis中使用in查询的方式. 1 数组.字符串 2 集合 3 使用Myabtis-plus框架的条件构造器来实现 我们在mysql中使用in查询的方式是这样的 那在mybatis中我们使用<foreach>标签来实现包含查询 1 使用数组方式 Mapper: Mapper.xml: &l

  • Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from user where name = "dato"; select * from user where name = #{name}; select * from user where name = '${name}'; 一般情况下,我们都不会注意到这里面有什么不一样的地方.因为这些sql都可以

  • Mybatis中SqlSession接口中selectList方法详解

    目录 1.SqlSession简介 2.selectList方法 3.selectList方法简介 总结 1.SqlSession简介 SqlSession是mybatis持久层框架提供的接口,该接口中包含了大量的CRUD操作方法(既增删改查方法). 2.selectList方法 selectList方法是用于查询的方法,该方法具有多态性,如图所示(打开mybatis的SqlSession接口所得到) 3.selectList方法简介 该方法一共有三种不同的调用方式: List selectLi

  • Mybatis中Collection集合标签的使用详解

    mybatis简单的CURD就不用多说了,网上相关博客文档一大堆.分析一下Mybatis里面的collection聚集查询. 假设一个班级有多名学生为例,通过班级号查询出该班级的信息,和班级里面的所有学生的信息,一般的做法就是通过班级号把班级的信息查询出来,再通过班级ID号把该班级里面的所有学生查询出来,我们不用这种通用的方法 1.班级实体类可以定义为这样: import java.util.List; public class ClazzEntity { private int clazzID

  • Vue-CLI项目中路由传参的方式详解

    一.标签传参方式:<router-link></router-link> 第一种 router.js { path: '/course/detail/:pk', name: 'course-detail', component: CourseDetail } 传递层 <!-- card的内容 { id: 1, bgColor: 'red', title: 'Python基础' } --> <router-link :to="`/course/detail

  • Spring之@Aspect中通知的5种方式详解

    目录 @Before:前置通知 案例 对应的通知类 通知中获取被调方法信息 JoinPoint:连接点信息 ProceedingJoinPoint:环绕通知连接点信息 Signature:连接点签名信息 @Around:环绕通知 介绍 特点 案例 对应的通知类 @After:后置通知 介绍 特点 对应的通知类 @AfterReturning:返回通知 用法 特点 案例 对应的通知类 @AfterThrowing:异常通知 用法 特点 案例 对应的通知类 几种通知对比 @Aspect中有5种通知

  • C语言中进程间通讯的方式详解

    目录 一.无名管道 1.1无名管道的原理 1.2功能 1.3无名管道通信特点 1.4无名管道的实例 二.有名管道 2.1有名管道的原理 2.2有名管道的特点 2.3有名管道实例 三.信号 3.1信号的概念 3.2发送信号的函数 3.3常用的信号 3.4实例 四.IPC进程间通信 4.1IPC进程间通信的种类 4.2查看IPC进程间通信的命令 4.3消息队列 4.4共享内存 4.5信号灯集合 一.无名管道 1.1无名管道的原理 无名管道只能用于亲缘间进程的通信,无名管道的大小是64K.无名管道是内

  • TypeScript中extends的正确打开方式详解

    目录 前言 extends第一式:继承 类继承类 接口继承接口 接口继承类 extends第二式:三元表达式条件判断 普通的三元表达式条件判断 情况一:Type1和Type2为同一种类型. 情况二:Type1是Type2的子类型. 情况三: Type2类型兼容类型Type1. 带有泛型的三元表达式条件判断 extends第三式:泛型约束 前言 最近完整地看了一遍TypeScript的官方文档,发现文档中有一些知识点没有专门讲解到,或者是讲解了但却十分难以理解,因此就有了这一系列的文章,我将对没有

  • Node.js中参数传递的两种方式详解

    目录 参数传递方式 GET方式 POST方式 动态网页 参数传递方式 在Node.js中,参数传递常见的共两种方式: GET方式:通过地址栏键=值的方式进行传递. POST方式:通过表单的方式传递请求数据. GET方式 GET方式通常是在请求地址中以[?参数1=值1&参数2=值2]的格式进行传递,在Node.js中可以通过获取url然后进行获取参数,如下所示: //1.引入http模块 var http = require('http'); //2.创建服务 var server = http.

  • MyBatis中resultMap和resultType的区别详解

    总结 基本映射 :(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功.(数据库,实体,查询字段,这些全部都得一一对应)高级映射 :(resultMap) 如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系.(高级映射,字段名称可以不一致,通过映射来实现 resultType和resultMap功能类似 ,都是返回对象信息 ,但是resultMap要更强大一些

随机推荐