- 浏览: 514585 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:http://limingnihao.iteye.com/blog/782190
评:
3.5 if + trim代替where/set标签
trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。
3.5.1trim代替where
Xml代码 收藏代码
<!-- 5.1 if/trim代替where(判断参数) - 将实体类不为空的属性作为where条件 -->
<select id="getStudentList_if_trim" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS_ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
<trim prefix="WHERE" prefixOverrides="AND|OR suffixOverrides="AND|OR"">
<if test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')
</if>
<if test="studentSex != null and studentSex != '' ">
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</if>
<if test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</if>
<if test="classId != null and classId!= '' ">
AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}
</if>
<if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">
AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}
</if>
<if test="placeId != null and placeId != '' ">
AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}
</if>
<if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">
AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}
</if>
<if test="studentId != null and studentId != '' ">
AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}
</if>
</trim>
</select>
3.5.2 trim代替set
Xml代码 收藏代码
<!-- 5.2 if/trim代替set(判断参数) - 将实体类不为空的属性更新 -->
<update id="updateStudent_if_trim" parameterType="liming.student.manager.data.model.StudentEntity">
UPDATE STUDENT_TBL
<trim prefix="SET" suffixOverrides=",">
<if test="studentName != null and studentName != '' ">
STUDENT_TBL.STUDENT_NAME = #{studentName},
</if>
<if test="studentSex != null and studentSex != '' ">
STUDENT_TBL.STUDENT_SEX = #{studentSex},
</if>
<if test="studentBirthday != null ">
STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},
</if>
<if test="studentPhoto != null ">
STUDENT_TBL.STUDENT_PHOTO = #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler},
</if>
<if test="classId != '' ">
STUDENT_TBL.CLASS_ID = #{classId},
</if>
<if test="placeId != '' ">
STUDENT_TBL.PLACE_ID = #{placeId}
</if>
</trim>
WHERE STUDENT_TBL.STUDENT_ID = #{studentId}
</update>
评:
3.5 if + trim代替where/set标签
trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。
3.5.1trim代替where
Xml代码 收藏代码
<!-- 5.1 if/trim代替where(判断参数) - 将实体类不为空的属性作为where条件 -->
<select id="getStudentList_if_trim" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS_ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
<trim prefix="WHERE" prefixOverrides="AND|OR suffixOverrides="AND|OR"">
<if test="studentName !=null ">
ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName, jdbcType=VARCHAR}),'%')
</if>
<if test="studentSex != null and studentSex != '' ">
AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}
</if>
<if test="studentBirthday != null ">
AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}
</if>
<if test="classId != null and classId!= '' ">
AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR}
</if>
<if test="classEntity != null and classEntity.classId !=null and classEntity.classId !=' ' ">
AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR}
</if>
<if test="placeId != null and placeId != '' ">
AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR}
</if>
<if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != '' ">
AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}
</if>
<if test="studentId != null and studentId != '' ">
AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR}
</if>
</trim>
</select>
3.5.2 trim代替set
Xml代码 收藏代码
<!-- 5.2 if/trim代替set(判断参数) - 将实体类不为空的属性更新 -->
<update id="updateStudent_if_trim" parameterType="liming.student.manager.data.model.StudentEntity">
UPDATE STUDENT_TBL
<trim prefix="SET" suffixOverrides=",">
<if test="studentName != null and studentName != '' ">
STUDENT_TBL.STUDENT_NAME = #{studentName},
</if>
<if test="studentSex != null and studentSex != '' ">
STUDENT_TBL.STUDENT_SEX = #{studentSex},
</if>
<if test="studentBirthday != null ">
STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},
</if>
<if test="studentPhoto != null ">
STUDENT_TBL.STUDENT_PHOTO = #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler},
</if>
<if test="classId != '' ">
STUDENT_TBL.CLASS_ID = #{classId},
</if>
<if test="placeId != '' ">
STUDENT_TBL.PLACE_ID = #{placeId}
</if>
</trim>
WHERE STUDENT_TBL.STUDENT_ID = #{studentId}
</update>
发表评论
-
MyBatis排序时施用orderby动态参数时需要注意,用$而不是#
2016-08-10 18:24 938源:http://www.makaidong.com/%E6% ... -
Mybatis中的like查询
2016-01-06 15:30 627源:http://blog.csdn.net/zhang987 ... -
Spring+Mybatis整合事务不起作用之解决方案汇总
2014-12-29 21:36 1353源:http://blog.csdn.net/walkerjo ... -
从IBatis2.X 移植到IBatis3.0 sqlMapConfig and sqlMap XML 配置文件升级说明
2014-11-06 17:20 858源:https://code.google.com/p/myb ... -
Mybatis多参数查询映射
2014-04-30 14:22 769源:http://fengfan876.iteye.com/b ... -
MyBatis insert 返回主键的方法
2014-04-28 10:08 672源:http://www.chendw.cn/original ... -
spring与mybatis三种整合方法
2014-04-27 20:25 604源: 评: 本文主要介绍Spring与Mybatis三种常用整 ... -
mybatis显示sql语句 log4j.properties配置文件
2014-03-20 17:09 1532源:http://my.oschina.net/abian/b ... -
基于MyBatis3.0.6的基本操作介绍
2014-03-06 09:01 908源:http://haohaoxuexi.iteye.com/ ...
相关推荐
MyBatis是一款强大的Java持久层框架,它允许开发者将SQL语句直接写在XML映射文件或注解中,提供了灵活的数据库交互方式。在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是...
2. **去除AND/ OR:** 如果子句以AND或OR开头,`<where>`元素会自动去除这些关键字。 3. **动态性:** 如果`state`, `title`, 或`author.name`为null,则对应的条件不会被包含在最终的SQL语句中。 #### 四、`trim`...
此外,MyBatis还支持动态SQL,通过`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等标签,可以根据条件动态生成SQL语句。 在IDE(如IntelliJ IDEA或Eclipse)中,XML提示文件能...
在Mybatis中,我们经常需要处理复杂的SQL查询,其中涉及到多条件筛选,这些条件可能是可选的,并且可能需要在`AND`与`OR`之间灵活切换。标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,...
2. **`<where>`** - 自动处理WHERE关键字及开头的AND或OR。 3. **`<set>`** - 用于UPDATE语句,自动处理SET关键字及其后的逗号。 4. **`<trim>`** - 可以用来去除前缀或后缀的文本,如移除多余的逗号等。 5. **`...
`<where>`标签用于构建SQL的WHERE子句,并自动添加前导的AND或OR。这样可以避免在多个条件拼接时产生不必要的AND或OR,提高SQL的可读性: ```xml SELECT * FROM user <where> != null">name = #{name}</if> ...
每个标签内部可能还有`parameterType`, `resultType`, `parameterMap`, `resultMap`等属性,以及`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等动态标签。 在IDE中,如IntelliJ ...
### 什么是MyBatis动态SQL MyBatis作为一种流行的Java持久层框架,为开发者提供了将数据库操作与Java对象之间的映射进行简化的便捷方法。它不仅支持传统的SQL查询方式,还引入了动态SQL这一概念,这使得MyBatis在...
首先,我们了解MyBatis动态SQL的基础——`<if>`、`<choose>`(`<when>`、`<otherwise>`)、`<where>`、`<set>`、`<foreach>`等标签。这些标签在XML映射文件中用于构建动态的SQL片段。 1. `<if>`标签:这个标签用于...
"Mybatis实现动态代理,动态SQL" Mybatis框架可以通过配置的形式为DAO接口生成动态代理实现类,从而简化程序开发,提高开发效率。在实现动态代理时,需要满足以下条件:接口全命名必须和SQL映射文件中的namespace...
4. `<trim>`:用于修剪字符串,常用于去除首尾的空格或者SQL的开头的`WHERE`或`AND`。 5. `<foreach>`:遍历集合,常用于IN语句、JOIN等场景。 6. `<set>`:用于构建`SET`子句,处理更新语句中的多个设置项。 三、...
4. **Trim、Set、Having 语句**: `<trim>` 用于去除前导或尾随的特定字符,常用于动态 SQL 的拼接。`<set>` 用于更新语句中的 SET 部分,`<having>` 用于 GROUP BY 后的条件筛选。 5. **ForEach 语句**: 这个标签...
在MyBatis中,动态SQL主要通过`<if>`、`<choose>`(相当于`switch`)、`<when>`、`<otherwise>`、`<where>`、`<set>`、`<foreach>`等标签来实现。例如,我们可以使用`<if>`标签来判断某个条件是否满足,然后决定是否...
动态 SQL 在 MyBatis 中主要通过 `<if>`、`<choose>`、`<when>`、`<otherwise>`、`<where>`、`<set>`、`<foreach>` 等标签实现。这些标签允许我们在 XML 映射文件中构建灵活的 SQL 语句,根据传入参数的不同,生成...
首先,动态SQL主要通过`<if>`、`<choose>`(相当于Java中的switch语句)、`<when>`、`<otherwise>`、`<where>`、`<set>`、`<foreach>`等标签实现。这些标签允许我们在SQL语句中插入条件或循环,使得同一个映射文件...
在MyBatis的映射文件中,我们可以通过`<if>`、`<choose>`(相当于Java的switch)、`<when>`、`<otherwise>`、`<where>`、`<set>`、`<foreach>`等标签来实现动态SQL。首先,我们需要在Mapper XML文件的根元素上启用`...
- **`<where>`**:用于自动处理WHERE关键字,以及在没有条件时去除多余的AND或OR。 - **`<set>`**:用于更新操作时动态添加SET子句。 - **`<foreach>`**:常用于处理集合类型的参数,如IN查询等。 - **`<choose>`、`...
- `<where>`元素则自动处理WHERE子句前的AND/OR关键字,使其更加美观和正确。 - 示例: ```xml UPDATE user <set> != null"> username = #{username}, </if> != null"> password = #{password} </if> ...
MyBatis提供了多种动态SQL标签,如`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`、`<where>`、`<set>`和`<foreach>`等,这些标签可以用来构建灵活多变的SQL语句。 #### 三、`<where>`标签详解 `<where>`...
除了`<if>`,MyBatis还提供了其他动态SQL元素,如`<choose>`, `<when>`, `<otherwise>`, `<trim>`, `<where>`, `<set>`等,它们可以组合使用,构建出更加复杂的逻辑。这些元素共同构成了MyBatis动态SQL的强大功能,...