mybatis动态sql的书写
来源:互联网 发布:linux修改用户组 编辑:程序博客网 时间:2024/05/21 16:54
<iframe id="BAIDU_DUP_fp_iframe" src="//pos.baidu.com/wh/o.htm?ltr=" style="width: 0px; height: 0px; display: none; visibility: hidden;"></iframe>
God's blog
梦只在昨天,今天仍需努力
【免费公开课】Gulp前端自动化教程 走进VR开发世界——我们离开发一款VR大作还有多远? CSDN发福利啦!C币、京东卡、现金任你选
关闭
MyBatis动态SQL
标签: blogemailsqlnull优化
2011-08-03 23:32 18211人阅读 评论(2) 收藏 举报
分类:
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
动态SQL
MyBatis的动态SQL,解决了SQL字符串拼接的痛苦。
1.if
这条一句会提供一个可选的文本查找功能。如果没有传递title,那么所有激活的博客都会被返回。
如果传递了title,那么就会查找相近的title。
2.choose,when,otherwise
注:如果上述条件都没有匹配,则会变成SELECT * FROM BLOG WHERE
如果仅有第二个匹配,则会变成SELECT * FROM BLOG WHERE AND title LIKE somelike
显然这样会查询失败。要解决这个问题,mybatis提供了解决方法。
overrides属性采用管道文本分隔符来覆盖,这里的空白是重要的。它的结果就是移除在InnerText中overrides中指定的内容。
3.set
同上的问题,优化后:
MyBatis的动态SQL,解决了SQL字符串拼接的痛苦。
1.if
- <select id="findActiveBlogWithTitleLike"
- parameterType="Blog" resultType="Blog">
- SELECT * FROM BLOG
- WHERE state = 'ACTIVE'
- <if test="title != null">
- AND title like #{title}
- </if>
- </select>
这条一句会提供一个可选的文本查找功能。如果没有传递title,那么所有激活的博客都会被返回。
如果传递了title,那么就会查找相近的title。
2.choose,when,otherwise
- <select id="findActiveBlogLike"
- parameterType="BLOG" resultType="BLOG">
- SELECT * FROM BLOG
- WHERE
- <choose>
- <when test="title != null">
- AND title like #{title}
- </when>
- <when test="author != null and author.name != null">
- AND title like #{author.name}
- </when>
- <otherwise>
- AND featured = 1
- </otherwise>
- </choose>
- </select>
注:如果上述条件都没有匹配,则会变成SELECT * FROM BLOG WHERE
如果仅有第二个匹配,则会变成SELECT * FROM BLOG WHERE AND title LIKE somelike
显然这样会查询失败。要解决这个问题,mybatis提供了解决方法。
- <select id="findActiveBlogLike"
- parameterType="BLOG" resultType="BLOG">
- SELECT * FROM BLOG
- WHERE
- <trim prefix="WHERE" prefixOverrides="AND |OR ">
- <choose>
- <when test="title != null">
- AND title like #{title}
- </when>
- <when test="author != null and author.name != null">
- AND title like #{author.name}
- </when>
- <otherwise>
- AND featured = 1
- </otherwise>
- </choose>
- </trim>
- </select>
overrides属性采用管道文本分隔符来覆盖,这里的空白是重要的。它的结果就是移除在InnerText中overrides中指定的内容。
3.set
- <update id="updateAuthorIfNecessary"
- parameterType="Author">
- update Author
- <set>
- <if test="username != null">username=#{username},</if>
- <if test="password != null">password=#{password},</if>
- <if test="email != null">email=#{email}</if>
- </set>
- where id=#{id}
- </update>
同上的问题,优化后:
- <update id="updateAuthorIfNecessary"
- parameterType="Author">
- update Author
- <trim prefix="where" prefixOverrides=",">
- <set>
- <if test="username != null">username=#{username},</if>
- <if test="password != null">password=#{password},</if>
- <if test="email != null">email=#{email}</if>
- </set>
- where id=#{id}
- </trim>
- </update>
- 顶
- 0
- 踩
- 0
- 上一篇freemarker应用
- 下一篇织梦数据库设计规则文档
我的同类文章
http://blog.csdn.net
- •Java自定义注解2012-03-03
- •GridBagLayout参数说明2011-09-19
- •swing 模仿QQ登录界面2011-09-04
- •swing各组件重绘外观2011-08-30
- •MyBatis普通查询与一对一映射查询2011-08-09
- •spring依赖注入(Ioc)控制反转2011-10-14
- •Java2D 图像缓冲与重复绘制2011-09-14
- •swing创建自定义窗体界面2011-08-31
- •Eclipse 常用快捷键2011-08-29
- •Apache Mina自定义编解码案例2011-08-09
- 猜你在找
- 经典JDBC+MyBatis学习视频
- Java之路
- SpringMVC Spring MyBatis整合
- 零基础学Java系列从入门到精通
- 零基础学HTML 5实战开发(第一季)
- 学习流水账MyBatis -- helloworld动态SQL
- MyBatis入门动态SQL
- mybatis动态sql
- MyBatis 动态SQL语句
- MyBatis动态SQL中trim标签的使用参数
<iframe width="728" height="90" align="center,center" id="iframeu1607657_0" src="//pos.baidu.com/fcim?sz=728x90&rdid=1607657&dc=2&di=u1607657&dri=0&dis=0&dai=2&ps=3485x287&coa=at%3D3%26rsi0%3D728%26rsi1%3D90%26pat%3D6%26tn%3DbaiduCustNativeAD%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D%26rss2%3D%2523000000%26titSU%3D0%26ptbg%3D90%26piw%3D0%26pih%3D0%26ptp%3D0&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1464181549248&ti=MyBatis%E5%8A%A8%E6%80%81SQL%20-%20God's%20blog%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET&ari=1&dbv=2&drs=3&pcs=1351x661&pss=1351x4065&cfv=11&cpl=17&chi=2&cce=true&cec=UTF-8&tlm=1464152749&ltu=http%3A%2F%2Fblog.csdn.net%2Fa600423444%2Farticle%2Fdetails%2F6658411&ecd=1&psr=1366x768&par=1366x728&pis=-1x-1&ccd=24&cja=true&cmi=23&col=zh-CN&cdo=-1&tcn=1464181549&qn=5bf5b01977c87ed8&tt=1464181549230.25.178.180" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>
查看评论
- 1楼 Wilson_Peng 2013-08-17 17:35发表 [回复] [引用] [举报]
- 所有的if判断都是判断非空,能否判断是否等于一个特定字符串呢?
您还没有登录,请[登录]或[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云计算iOS6Rackspace Web AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap
- 个人资料
- 访问:685167次
- 积分:9391
- 等级:
- 排名:第1166名
- 原创:242篇
- 转载:11篇
- 译文:0篇
- 评论:160条
上帝禁区
- 文章搜索
- 文章分类
- XML(1)
- Apache(4)
- C/C++(69)
- CodeIgniter(1)
- Hibernate(3)
- JAVA(56)
- javascript(12)
- Jquery(4)
- JSP(6)
- Linux(44)
- MongoDB(0)
- Mysql(9)
- PHP(48)
- Python(0)
- Unix Shell命令(6)
- Yii(3)
- 生活趣事(5)
- Android(6)
- GTK+(0)
- 文章存档
- 2014年04月(1)
- 2013年10月(1)
- 2013年09月(1)
- 2013年05月(2)
- 2013年04月(3)
- 2013年03月(3)
- 2013年02月(1)
- 2012年10月(2)
- 2012年09月(1)
- 2012年07月(3)
- 2012年06月(1)
- 2012年05月(3)
- 2012年04月(4)
- 2012年03月(4)
- 2012年01月(4)
- 2011年12月(4)
- 2011年11月(8)
- 2011年10月(5)
- 2011年09月(10)
- 2011年08月(13)
- 2011年07月(6)
- 2011年06月(24)
- 2011年05月(25)
- 2011年04月(6)
- 2011年03月(2)
- 2011年02月(7)
- 2011年01月(18)
- 2010年12月(37)
- 2010年11月(24)
- 2010年10月(9)
- 2010年09月(21)
- 阅读排行
- 分析Redis架构设计(28111)
- Linux GCC编译使用动态、静态链接库(23196)
- MyBatis动态SQL(18198)
- MyBatis普通查询与一对一映射查询(18027)
- Java将Unix时间戳转换成指定格式日期(16412)
- Mysql创建存储过程及遍历查询结果(15873)
- Redis C客户端API(13226)
- Apache Mina自定义编解码案例(12824)
- Windows中搭建PHP扩展开发环境(12201)
- C实现PHP的mysql数据库连接池(11112)
- 评论排行
- 分析Redis架构设计(17)
- swing 模仿QQ登录界面(15)
- C实现PHP的mysql数据库连接池(9)
- 队列服务开发(9)
- Activty界面切换动画(7)
- Windows中搭建PHP扩展开发环境(7)
- Linux GCC编译使用动态、静态链接库(7)
- 设置权限,让内网访问apache(6)
- Java将Unix时间戳转换成指定格式日期(6)
- PHP内核中的神器之HashTable(5)
- 推荐文章
- *基于AOP的非侵入式监控之——AspectJ实战
- *Android 拍照、选择图片并裁剪
- *spark性能调优:开发调优
- *浅谈android中图片处理之色彩特效处理ColorMatrix(三)
- *neutron-server的启动流程(一)
- *Hadoop中Map端shuffle源码解析
- 最新评论
- Java将Unix时间戳转换成指定格式日期
zhangyd0227:很好用,谢谢
- 队列服务开发
obchi:你好,地址不能访问了,能换个吗?急需你的源码呀,谢谢1873866421@qq.com
- 队列服务开发
obchi:你好,地址不能访问了,能换个吗?急需你的源码呀,谢谢1873866421@qq.com
- Windows中搭建PHP扩展开发环境
qianggetaba:@qq_33604875: http://windows.php.net/downloads/p...
- jquery插件
吴士龙:感谢分享,实战性很强,推荐一下。
- 分析Redis架构设计
辰辰爸的技术博客:学习le!
- 队列服务开发
吴名置禾:求源代码救命!!!!!!!!!邮箱:wulangdejava@163.com。感谢!
- 队列服务开发
qq_31156543:急求求源代码!非常感谢!
- 分析Redis架构设计
gaoxuaiguoyi:为博主的画图软件点赞
- Java将Unix时间戳转换成指定格式日期
SYSGIS:java新手,很有帮助
提问
您的问题将会被发布在“技术问答”频道×该问题已存在,请勿重复提问
插入链接
插入图片
推荐标签:
我要悬赏 币
取消发布可能存在类似的问题: