模糊查询(CONCAT只能连接两个字符串,||可以连接多个字符串)
- SELECT * FROM table_name WHERE column LIKE CONCAT('%',#{params},'%')
- SELECT * FROM table_name WHERE UPPER column LIKE '%' || #{params} || '%'
foreach循环
(Coll为入参map的key,对应的value是个集合,item处为别名,#{valueitem}为别名的值)
- <foreach collection="Coll" item="valueitem"
- open="(" separator="," close=")">#{valueitem} </foreach>
下面引入简化的例子之一:
<select id="getReportStats" parameterType="java.util.Map" resultMap="VoResultMap"> SELECT code,name FROM table_name <where> <if test="codeLists!=null and codeLists.size>0"> AND code IN <foreach collection="codeLists" item="codevalue" open="(" separator="," close=")">#{codevalue} </foreach> </if> <if test="nameLists!=null and nameLists.size>0 ">
<foreach collection="nameLists" item="name" open="(" separator="," close=")">#{name} </foreach> </if> </where> </select>
以上是我在项目中传入了两个list的迭代,需要注意下它的判断条件写法,
以及判断关键字不能大写(踩过的坑,不要问为什么),
同时引入一篇关于map嵌套foreach循环的例子
<foreach collection="relationMap" index="key" item="ent" separator="union">
SELECT *
FROM BPM_DEF_USER
where RIGHT_TYPE=#{key}
and OWNER_ID in
<foreach collection="ent" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</foreach>
</select>
index 作为map 的key。item为map的值,这里使用了嵌套循环,嵌套循环使用ent。
时间日期的范围性查找
第一种方法:
使用转义字符
<if test="startDate != null"> AND flt_date >= #{startDate,jdbcType=TIMESTAMP} </if>
<if test="endDate != null"> AND flt_date <= #{endDate,jdbcType=TIMESTAMP} </if>
第二种方法:
因为这个是xml格式的,所以不允许出现类似“>”这样的字符,
但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析
<if test="startDate!=null"> AND pih.oper_time<![CDATA[>=]]>#{startDate,jdbcType=TIMESTAMP} </if>
<if test="endDate!=null"> AND pih.oper_time<![CDATA[<=]]>#{endDate,jdbcType=TIMESTAMP} </if>
MyBatis中关于resultType和resultMap的区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是 直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前 定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。
<where>条件中不必加1=1作为拼接条件,否则影响查询的效率
选择型sql
<choose> <when test="carrierStatus=='STASUS_ENTER'"> AND tt.audit_status='STASUS_ENTER' //注意此处的赋值 <if test="timeStart!=null"> AND cc.enter_time<![CDATA[>=]]>#{timeStart,jdbcType=TIMESTAMP} </if> <if test="timeEnd!=null"> AND cc.enter_time<![CDATA[<=]]>#{timeEnd,jdbcType=TIMESTAMP} </if> </when> <when test="carrierStatus=='STASUS_UNLOADING'"> AND tt.audit_status='STASUS_UNLOADING' <if test="timeStart!=null"> AND cc.unloading_time<![CDATA[>=]]>#{timeStart,jdbcType=TIMESTAMP} </if> <if test="timeEnd!=null"> AND cc.unloading_time<![CDATA[<=]]>#{timeEnd,jdbcType=TIMESTAMP} </if> </when> <when test="carrierStatus=='STASUS_EXIT'">//双等号比较 AND tt.audit_status='STASUS_EXIT' <if test="timeStart!=null"> AND cc.exit_time<![CDATA[>=]]>#{timeStart,jdbcType=TIMESTAMP} </if> <if test="timeEnd!=null"> AND cc.exit_time<![CDATA[<=]]>#{timeEnd,jdbcType=TIMESTAMP} </if> </when> <when test="carrierStatus==null or carrierStatus==''">//双等号比较 <if test="timeStart!=null"> AND cc.enter_time<![CDATA[>=]]>#{timeStart,jdbcType=TIMESTAMP} </if> <if test="timeEnd!=null"> AND cc.enter_time<![CDATA[<=]]>#{timeEnd,jdbcType=TIMESTAMP} </if> </when> </choose>
相关推荐
`if`标签是MyBatis中最常用的动态SQL元素之一,它可以根据传入的参数值决定是否加入某个条件。通常情况下,`if`标签会与`where`标签配合使用,以便于处理WHERE子句的逻辑判断。 示例: ```xml SELECT * FROM user...
`<select>` 标签是MyBatis中最常用的标签之一,用于定义SQL查询语句。它具有一系列重要的属性,用于控制SQL执行的行为: - **id**:在命名空间中的唯一标识符,用于引用该SQL语句。 - **parameterType**:指定传递...
在MyBatis中,动态SQL是通过一系列的XML标签来实现的,这些标签包括`if`、`choose`(`when`、`otherwise`)、`trim`(`where`、`set`)、`foreach`等。通过这些标签,我们可以轻松地根据条件生成SQL语句。 ##### ...
MyBatis提供了多种用于构建动态SQL的标签,下面将详细介绍其中几种常用的标签及其用法。 ##### 3.1 `<if>` 标签 `<if>` 标签是最常用的动态SQL标签之一,它可以用来判断某个条件是否成立,并根据判断结果决定是否...
MyBatis提供了丰富的标签用于构建动态SQL,以下是一些常用的标签及其用法: 1. ****:用于根据条件判断是否添加某个SQL片段。 - 示例: ```xml != null"> AND name = #{name} ``` - 在这个例子中,只有当`...
`<if>` 标签是最常用的动态SQL标签之一,它用于判断某个条件是否满足,并根据结果决定是否添加特定的SQL片段到最终的SQL语句中。例如: ```xml SELECT * FROM users WHERE 1=1 != null"> AND name = #{name} ...
Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...
MyBatis动态SQL是数据库操作中的一个重要特性,它允许我们根据特定条件动态地构建SQL查询语句,从而提高代码的可读性和维护性。这里主要介绍两种常用的动态SQL标签:`<if>`和`<where>`。 首先,我们来看`<if>`标签...
在这些范例中,你会接触到MyBatis的XML配置文件,它定义了SQL语句、参数映射和结果映射。同时,还会使用到MyBatis的SqlSession接口,它是执行SQL的主要入口点,提供了打开、提交和关闭事务,以及执行SQL方法等功能。...
【标题】"MyBatis配置以及执行小例子"主要涵盖了MyBatis框架的基本配置和一个简单的执行示例,这是Java开发中常用的持久层框架。MyBatis允许开发者将SQL语句与Java代码相结合,提供了更灵活的数据访问方式,减少了...
【标题】"springboot,mybatis,mybatis-generator,例子" 涉及到的核心技术是Spring Boot、MyBatis以及MyBatis Generator。这三者都是Java开发中常用的重要框架,它们各自承担着不同的职责,共同构建了一个高效、便捷...
- **功能简介**:`if`标签是动态SQL中最基本且最常用的标签之一。它允许我们在拼接SQL语句时,根据条件判断是否加入特定的部分。这对于构建基于某些条件的查询非常有用。 - **语法结构**:`<if test="expression">...
【SpringBoot Mybatis 入门小例子】 SpringBoot与Mybatis的结合是现代Java开发中的常见选择,它们为快速构建微服务提供了强大的支持。SpringBoot简化了Spring的应用配置,而Mybatis则是一个轻量级的持久层框架,...