Mybatis查询条件包含List的情况说明

目录
  • 查询条件包含List的情况
    • 在mybatis中查询的语句
  • 查询条件带List和其他类型字段
    • 需求

查询条件包含List的情况

在mybatis中进行搜索时,有时候参数中包含了List,比如传入参数:

public class FileRequest{
    //文件类型
    private Integer fileType;
    //状态
    private List<Status> statusList;
}
public class Status{
    //注册状态
    private Integer registerStatus;
    //会议状态
    private Integer meetingStatus
}

在mybatis中查询的语句

<select id="findList" parameterType="FileRequest" resultMap="...">
    select * from tableName where
    1=1
    <if test="fileType != null ">
        and file_type = #{fileType}
    </if>
    <if test="statusList != null ">
        and
        <foreach collection="statusList" index="index" item="item" open"(" separator="or" close=")">
            <if test="item.registerStatus != null ">
                and register_status= #{item.registerStatus}
            </if>
            <if test="item.meetingStatus != null ">
                and meeting_status= #{item.meetingStatus }
            </if>
        </foreach>
    </if>
</select>

查询条件带List和其他类型字段

需求

Mybatis查询条件带List和其他类型字段(Integer,String,...).

select * from table where type=?
and code in (?,?,?,?)

Mapper.java文件

List<BaseDictionary> selectByTypeAndCodes(
 @Param("codes") List<Integer> codes,
@Param("type") Integer type);
 Mapper.xml.

注意其中<foreach collection="codes"中的collection的值要和你定义的List别名@Param(“codes”)一致,

而不是只有一个list参数时的<foreach collection="list"

<select id="selectByTypeAndCodes"  resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from base_dictionary
    where type = #{type}
    AND code in
    <foreach collection="codes" index="index" item="item" open="(" separator="," close=")">
     #{item}
    </foreach>
    AND show_enable=1
    AND obj_status=1
    ORDER BY sort
  </select>

执行结果:

BaseJdbcLogger.debug(BaseJdbcLogger.java:145)==> Preparing: select id, type, name, code, sort, show_enable, obj_remark, obj_status, obj_createdate, obj_createuser, obj_modifydate, obj_modifyuser from base_dictionary where type = ? AND code in ( ? , ? , ? ) AND show_enable=1 AND obj_status=1 ORDER BY sort

BaseJdbcLogger.debug(BaseJdbcLogger.java:145)==> Parameters: 34(Integer), 1(Integer), 2(Integer), 3(Integer)

BaseJdbcLogger.debug(BaseJdbcLogger.java:145)<== Total: 2

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

(0)

相关推荐

  • 详解Mybatis 传递参数类型为List的取值问题

    问题描述: 参数传递为List时: 当传递一个 List 实例或者数组作为参数对象传给 Mybatis.此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键.List 实例将会以"list" 作为键,而数组实例将会以"array"作为键.所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map. DAO 层: List<User> selectUserByIDs( List ID

  • Mybatis查询多条记录并返回List集合的方法

    实体对象如下: /** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public class Vendor { private String vend_id; private String vend_name; private String vend_address; private String vend_city; private String vend_state; privat

  • mybatis 如何判断list集合是否包含指定数据

    需求 1.在mybatis脚本中想要判断list中是否含有某个字符串. 2.动态使用list中的属性,添加到数据库crud字段. 网上也没搜到类似的案例,配置choose功能,可以方便做写动态sql拼装,所以记录下. 准备 之前脚本中用的最多的list函数就是size和遍历了.那么mybatis脚本中是不是又包含函数了.首先我们要清楚list的类型.写个简单的测试用例. <select id="test" parameterType="java.util.Map&quo

  • mybatis配置对象包含对象以及List的方式

    mybatis配置对象包含对象及List 这里隐藏get set方法 public class BatchManagerViewVo implements Serializable{ /** * @Description: serialVersionUID : TODO */ private static final long serialVersionUID = 1L; private List<ResourcesItemDto> resourceItem; private List<

  • Mybatis查询条件包含List的情况说明

    目录 查询条件包含List的情况 在mybatis中查询的语句 查询条件带List和其他类型字段 需求 查询条件包含List的情况 在mybatis中进行搜索时,有时候参数中包含了List,比如传入参数: public class FileRequest{ //文件类型 private Integer fileType; //状态 private List<Status> statusList; } public class Status{ //注册状态 private Integer reg

  • 利用MyBatis实现条件查询的方法汇总

    SQL映射文件 Mybatis真正强大的是在于它的SQL映射语句,也是它的流弊之处. 它的功能强大,SQL映射文件的配置却比较简单. 使用SQL映射文件可以减少50%以上的代码量. Mybatis专注于SQL,对于开发人员来说可极大限度地进行SQL调优,以保证性能,下面是SQL映射文件的几个顶级元素配置 1.mapper 它是映射文件的根节点,只有一个属性就是 namespace(命名空间)它的作用是区分不同的mapper,里面的参数是全局唯一的,绑定DAO层接口,即面向接口编程 namespa

  • Mybatis 实现动态组装查询条件,仿SQL模式

    目的: 以前比较习惯使用Hibernate,后来觉得mybatis不能按我想要的自动组装为SQL查询条件,所以提供该工具类: 效果图: 如图所示,根据条件自动组装查询条件,下面来说一下实现方法: 1. ServiceImpl书写注意项 Page<SysLogin> resultPage = null; try { PageHelper.startPage(pager.getCurrentPage(), pager.getPageSize()); // 判断是否有分页 if (ObjectHel

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

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

  • 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查询、新增、更新与删除操作指南

    调试之控制台打印SQL Mybatis的使用流程 先来回顾一下mybatis的使用流程 创建mybatis-config.xml 全局的配置⽂件 创建XXXMapper.xml配置⽂件 创建SqlSessionFactory ⽤SqlSessionFactory创建SqlSession对象 ⽤SqlSession执⾏增删改查CRUD 打印sql的配置 内置的⽇志⼯⼚提供⽇志功能, 使⽤log4j配置打印sql,添加依赖 <dependency> <groupId>org.slf4j

  • mybatis-plus QueryWrapper自定义查询条件的实现

    mybatis-plus框架功能很强大,把很多功能都集成了,比如自动生成代码结构,mybatis crud封装,分页,动态数据源等等,附上官网链接https://mp.baomidou.com/,github上有代码例子,国内小伙伴推荐码云https://gitee.com/baomidou/mybatis-plus.  但是,其中还是有些小坑,文档也没有涉及的很全面,碰到问题,百度或者发issue,能力强的还是直接看源码好,一切答案都在源码中. 版本推荐用3.1.0,3.1.1及以上版本有bu

  • 关于MyBatis plus条件构造器的逐条详解

    目录 条件构造器 说明 警告 说明 allEq 个别参数说明 eq 实例 ne gt ge lt le between notBetween like notLike likeLeft likeRight isNull isNotNull in 例 例 notIn inSql notInSql groupBy orderByAsc 实例 orderByDesc orderBy having func or and nested apply-拼接SQL 实例 last exists notExis

  • Mybatis查询延迟加载详解及实例

    Mybatis查询延迟加载详解及实例 1.1     启用延迟加载 Mybatis的延迟加载是针对嵌套查询而言的,是指在进行查询的时候先只查询最外层的SQL,对于内层SQL将在需要使用的时候才查询出来.Mybatis的延迟加载默认是关闭的,即默认是一次就将所有的嵌套SQL一并查了将对象所有的信息都查询出来.开启延迟加载有两种方式. 第一种是在对应的<collection>或<association>标签上指定fetchType属性值为"lazy".如下示例中我们

  • MyBatis查询缓存实例详解

    查询缓存的使用,主要是为了提高查询访问速度.将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度. MyBatis的查询缓存机制,根据缓存区的作用域(生命周期)可划分为两种:一级缓存与二级缓存 一.一级查询缓存 MyBatis一级缓存是基于org.apache.ibatis.cache.impl.PerpetualCache类的HashMap本地缓存,其作用域是Sqlsession.在同一个Sqlsession中两次执行相同的sql语句,第一次执行完毕后,会将

随机推荐