`
帅气的小码农
  • 浏览: 7122 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mybatis中SQL一些常用例子

 
阅读更多

 

   模糊查询(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循环的例子

http://www.cnblogs.com/yg_zhang/p/4314602.html 写道

 

<select id="getByMap" resultMap="BpmDefUser">

<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 &gt;= #{startDate,jdbcType=TIMESTAMP} </if>

    <if test="endDate != null"> AND flt_date &lt;= #{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>

 

 

分享到:
评论

相关推荐

    什么是mybatis动态sql以及学习mybatis动态sql的意义

    `if`标签是MyBatis中最常用的动态SQL元素之一,它可以根据传入的参数值决定是否加入某个条件。通常情况下,`if`标签会与`where`标签配合使用,以便于处理WHERE子句的逻辑判断。 示例: ```xml SELECT * FROM user...

    Mybatis中SQL语句的编写.pdf

    `&lt;select&gt;` 标签是MyBatis中最常用的标签之一,用于定义SQL查询语句。它具有一系列重要的属性,用于控制SQL执行的行为: - **id**:在命名空间中的唯一标识符,用于引用该SQL语句。 - **parameterType**:指定传递...

    MyBatis动态SQL详解.pdf

    在MyBatis中,动态SQL是通过一系列的XML标签来实现的,这些标签包括`if`、`choose`(`when`、`otherwise`)、`trim`(`where`、`set`)、`foreach`等。通过这些标签,我们可以轻松地根据条件生成SQL语句。 ##### ...

    mybatis动态sql.doc

    MyBatis提供了多种用于构建动态SQL的标签,下面将详细介绍其中几种常用的标签及其用法。 ##### 3.1 `&lt;if&gt;` 标签 `&lt;if&gt;` 标签是最常用的动态SQL标签之一,它可以用来判断某个条件是否成立,并根据判断结果决定是否...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    MyBatis提供了丰富的标签用于构建动态SQL,以下是一些常用的标签及其用法: 1. ****:用于根据条件判断是否添加某个SQL片段。 - 示例: ```xml != null"&gt; AND name = #{name} ``` - 在这个例子中,只有当`...

    MyBatis动态SQL是一项强大的特性,它允许我们在编写SQL语句时根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的

    `&lt;if&gt;` 标签是最常用的动态SQL标签之一,它用于判断某个条件是否满足,并根据结果决定是否添加特定的SQL片段到最终的SQL语句中。例如: ```xml SELECT * FROM users WHERE 1=1 != null"&gt; AND name = #{name} ...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    MyBatis动态SQL.docx

    MyBatis动态SQL是数据库操作中的一个重要特性,它允许我们根据特定条件动态地构建SQL查询语句,从而提高代码的可读性和维护性。这里主要介绍两种常用的动态SQL标签:`&lt;if&gt;`和`&lt;where&gt;`。 首先,我们来看`&lt;if&gt;`标签...

    MyBatis常用项目范例

    在这些范例中,你会接触到MyBatis的XML配置文件,它定义了SQL语句、参数映射和结果映射。同时,还会使用到MyBatis的SqlSession接口,它是执行SQL的主要入口点,提供了打开、提交和关闭事务,以及执行SQL方法等功能。...

    MyBatis配置以及执行小例子

    【标题】"MyBatis配置以及执行小例子"主要涵盖了MyBatis框架的基本配置和一个简单的执行示例,这是Java开发中常用的持久层框架。MyBatis允许开发者将SQL语句与Java代码相结合,提供了更灵活的数据访问方式,减少了...

    springboot,mybatis,mybatis-generator,例子

    【标题】"springboot,mybatis,mybatis-generator,例子" 涉及到的核心技术是Spring Boot、MyBatis以及MyBatis Generator。这三者都是Java开发中常用的重要框架,它们各自承担着不同的职责,共同构建了一个高效、便捷...

    mybatis动态sqlmybatis动态sqlmybatis动态sql

    - **功能简介**:`if`标签是动态SQL中最基本且最常用的标签之一。它允许我们在拼接SQL语句时,根据条件判断是否加入特定的部分。这对于构建基于某些条件的查询非常有用。 - **语法结构**:`&lt;if test="expression"&gt;...

    SpringBoot Mybatis 入门 小例子

    【SpringBoot Mybatis 入门小例子】 SpringBoot与Mybatis的结合是现代Java开发中的常见选择,它们为快速构建微服务提供了强大的支持。SpringBoot简化了Spring的应用配置,而Mybatis则是一个轻量级的持久层框架,...

Global site tag (gtag.js) - Google Analytics