mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

一、My Batis trim标签有点类似于replace效果。

trim 属性,

prefix:前缀覆盖并增加其内容

suffix:后缀覆盖并增加其内容

prefixOverrides:前缀判断的条件

suffixOverrides:后缀判断的条件

比如:Java SQL语句如下,

select b.* from sys_menu b where 1 = 1  

<trim suffix="WHERE" suffixOverrides="AND | OR">
    <if test="id != null and id !=‘‘ ">
        AND b.id =#{id}
    </if>
    <if test="name != null">
        AND b.menu_name like #{name}
    </if>
</trim> 

最终sql打印为:

select b.* from sys_menu b where 1 = 1 AND b.menu_name like ‘‘ WHERE

从结果可以发现:

Java代码 :

<trim suffix="WHERE" suffixOverrides="AND | OR">  

suffix是针对符合suffixOverrides的SQL语句追加后缀suffix值。

 二、判等于时候的经验【转】

在用MyBatis操作数据库的时候相信很多人都用到,当在判断null, 大于,大于等于,小于,小于等于,不等于时估计很多都用到,比较容易实现了,这里就省略了,但唯独判断条件为等于时估计蛮多人遇到坑了, 俺在这个问题上坑了差不多一天,于是把这个实验总结并简要记录一下;

当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如:

<!-- 正确的,稳定,推荐使用;CDATA 标签用于防止“<”和“>”符号被解析出错-->

2 <if test="newsImage != null and newsImage == ‘1‘.toString()">
3     <![CDATA[ and len(newsImage) > 0 ]]>
4 </if>  

其中判断 newsImage == ‘1‘ 时,人为认为成功,但实际上是不成功的,需要改为  newsImage == ‘1‘.toString()方可成功,原因具体没有细入研究,根据实际使用推测应该是 “等于” 在java中是个比较复杂问题,涉及的“等于”有可能是变量地址相等,或者是变量值内容相等,在XML文件中简单的 == 在经过MyBatis处理后无法判断是哪种类型的“相等”,所以加.toString()做强制转换操作,MyBatis就知道是值内容的比较,当然就成功了; 注意这个常量不限于数字,对于字母,如 ‘y‘ 同样需要加上 .toString()方可成功,如下:

<!-- 正确的,稳定,推荐使用 -->
<if test="newsImage != null and newsImage == ‘y‘.toString()">
    <![CDATA[ and len(newsImage) > 0 ]]>
</if>  

三、模糊查询与字符拼接

<select id="getData" parameterType="map" resultType="map">
select  from swweb.FK
<where>
<if test="startTime!=null and startTime!=‘‘">
  <![CDATA[and ZBTIME>=to_date(#{startTime},‘YYYY-MM-DD‘)]]>
</if>

<if test="finishTime!=null and finishTime!=‘‘">
  <![CDATA[and ZBTIME<=to_date(#{finishTime},‘YYYY-MM-DD‘)]]>
</if><!-- 字符拼接 模糊查询-->
<if test="keyWords!=null and keyWords!=‘‘">
  <![CDATA[and ( CONTENT LIKE CONCAT(CONCAT(‘%‘,#{keyWords}),‘%‘))]]>
</if>
<if test="zbd_name!=null and zbd_name!=‘‘">
  <![CDATA[and (ZBD LIKE CONCAT(CONCAT(‘%‘,#{zbd_name}),‘%‘))]]>
</if>
</where>
order by ZBTIME desc
</select>
时间: 2024-12-21 15:34:04

mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE的相关文章

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> <!--第一种--> <!--<typeAlias type="cn.dawn.demo01.entity.Book" alias="book"></typeAlias>--> <!--第二种--> <

Oracle模糊查询CONCAT参数个数无效

在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 <if test="empId!=null and empId!=''"> and e.empId like CONCAT('%',#{empId},'%') </if> 异常信息: 经过查阅数个资料后得知Oracle的CONCAT函数不像MySql那样支持三个参数的拼接,需要把SQL语句修正为: and e.empId like

Node.js和mybatis分别实现mysql中like变量模糊查询

<!-- mybatis --> <where> <if test="varName != '' and varName != null" > var_name like '%${varName}%' </if> </where> //node 变量 if (data.varName && data.varName != '') { sql += " where var_name like '%&qu

ASP.NET操作ORACLE数据库之模糊查询

ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 1 //连接Oracle数据库的连接字符串 2 string connectionString = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) 3 (HOST=localhost) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TestDB)))

mybatis &lt;where&gt;、&lt;set&gt;、&lt;trim&gt;、&lt;sql&gt;、&lt;foreach&gt;标签的使用

mybatis where标签的使用 where后面跟查询条件 简化sql语句中判断条件的书写 例: <select id="user" parameterType="user" resultType="User"> select * from user <where> <if test="id!=null and id!=''"> id=#{id} </if> <if t

mybatis 的 &lt;![CDATA[ ]]&gt; 标签作用

有个细节一直没有注意到,今天mark一下: mybatis进行时间比较的时候我们会这么写,一直都是在复制粘贴所以没有注意,一个标签<![CDATA[ ]]> 今天在做另外一个有时间比较sql的时候,xml一直报如下错: The content of elements must consist of well-formed character data or markup 检查没有xml标签问题,后来才注意到原来是没加<![CDATA[ ]]>标签导致: 因为这个是xml格式的,所以

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于#{}和${}就是jdbc中的预编译和非预编译 1.表达式: name like"%"#{name}"%" 打印的日志 ==>  Preparing: select * from user WHERE name like"%"?"%" ==>Parameters: 傻(String), 1(Integer) 能够查询出来,没有问题,这是使用了占位符来占位,写成SQL就是: name like "%&q

MyBatis的Mapper文件的foreach标签详解

MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis Mapper文件的foreach标签时我们先看看DTD是如何定义的?DTD代码如下: 1 2 3 4 5 6 7 8 9 10 <!-- 定义foreach元素 --> <!ELEMENT foreach (#PCDATA | include | trim | where | set | fo

mybatis 中 sql 映射文件 select 标签以及 入 resultMap 标签的应用

1.自定义某个 javabean 的封装规则: 注:可以看到,select 标签中引用了 定义好的 resultMap 的值.resultMap 标签中的 type 为javabean 类型,id 为唯一标识.id 子标签定义主键(这样定义底层会有优化.)column 属性为字段名,property 属性为字段值. 注:可以看到测试结果没有出现问题,说明代码没有错误. 2.自定义某个 javabean 的级联属性封装: a.准备工作:mysql 数据库中,在之前 tbl_employees 表的