mybatis动态sql的书写

来源:互联网 发布:linux修改用户组 编辑:程序博客网 时间:2024/05/21 16:54
【免费公开课】Gulp前端自动化教程   走进VR开发世界——我们离开发一款VR大作还有多远?   CSDN发福利啦!C币、京东卡、现金任你选   
<iframe width="300" height="250" align="center,center" id="cpro_u2392861_iframe" src="//pos.baidu.com/fcim?sz=300x250&amp;rdid=2392861&amp;dc=2&amp;di=u2392861&amp;dri=0&amp;dis=0&amp;dai=1&amp;ps=650x1340&amp;coa=at%3D3%26rsi0%3D300%26rsi1%3D250%26pat%3D17%26tn%3DbaiduCustNativeAD_xuanfu%26rss1%3D%2523FFFFFF%26conBW%3D1%26adp%3D1%26ptt%3D0%26titFF%3D%2525E5%2525BE%2525AE%2525E8%2525BD%2525AF%2525E9%25259B%252585%2525E9%2525BB%252591%26titFS%3D14%26rss2%3D%2523000000%26titSU%3D0&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1464181549248&amp;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&amp;ari=1&amp;dbv=2&amp;drs=3&amp;pcs=1351x661&amp;pss=1351x4065&amp;cfv=11&amp;cpl=17&amp;chi=2&amp;cce=true&amp;cec=UTF-8&amp;tlm=1464152749&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fa600423444%2Farticle%2Fdetails%2F6658411&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=23&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1464181549&amp;qn=f64a6847bdc36540&amp;tt=1464181549230.22.137.147" 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>
关闭

MyBatis动态SQL

标签: blogemailsqlnull优化
18211人阅读 评论(2) 收藏 举报
.embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px #ededed; } .embody_b{ margin:0 ; padding:10px 0; } .embody .embody_t,.embody .embody_c{ display: inline-block; margin-right:10px; } .embody_t{ font-size: 12px; color:#999; } .embody_c{ font-size: 12px; } .embody_c img,.embody_c em{ display: inline-block; vertical-align: middle; } .embody_c img{ width:30px; height:30px; } .embody_c em{ margin: 0 20px 0 10px; color:#333; font-style: normal; }
分类:
作者同类文章X
动态SQL
MyBatis的动态SQL,解决了SQL字符串拼接的痛苦。

1.if
[html] view plain copy
print?
  1. <select id="findActiveBlogWithTitleLike"  
  2.     parameterType="Blog" resultType="Blog">  
  3.     SELECT * FROM BLOG  
  4.     WHERE state = 'ACTIVE'  
  5.     <if test="title != null">  
  6.         AND title like #{title}  
  7.     </if>  
  8. </select>  


这条一句会提供一个可选的文本查找功能。如果没有传递title,那么所有激活的博客都会被返回。
如果传递了title,那么就会查找相近的title。


2.choose,when,otherwise
[html] view plain copy
print?
  1. <select id="findActiveBlogLike"  
  2.     parameterType="BLOG" resultType="BLOG">  
  3.     SELECT * FROM BLOG  
  4.     WHERE  
  5.     <choose>  
  6.         <when test="title != null">  
  7.             AND title like #{title}  
  8.         </when>  
  9.         <when test="author != null and author.name != null">  
  10.             AND title like #{author.name}  
  11.         </when>  
  12.         <otherwise>  
  13.             AND featured = 1  
  14.         </otherwise>  
  15.     </choose>  
  16. </select>  


注:如果上述条件都没有匹配,则会变成SELECT * FROM BLOG WHERE
如果仅有第二个匹配,则会变成SELECT * FROM BLOG WHERE AND title LIKE somelike
显然这样会查询失败。要解决这个问题,mybatis提供了解决方法。
[html] view plain copy
print?
  1. <select id="findActiveBlogLike"  
  2.     parameterType="BLOG" resultType="BLOG">  
  3.     SELECT * FROM BLOG  
  4.     WHERE  
  5.     <trim prefix="WHERE" prefixOverrides="AND |OR ">  
  6.         <choose>  
  7.             <when test="title != null">  
  8.                 AND title like #{title}  
  9.             </when>  
  10.             <when test="author != null and author.name != null">  
  11.                 AND title like #{author.name}  
  12.             </when>  
  13.             <otherwise>  
  14.                 AND featured = 1  
  15.             </otherwise>  
  16.         </choose>  
  17.     </trim>  
  18. </select>  


overrides属性采用管道文本分隔符来覆盖,这里的空白是重要的。它的结果就是移除在InnerText中overrides中指定的内容。


3.set
[html] view plain copy
print?
  1. <update id="updateAuthorIfNecessary"  
  2.     parameterType="Author">  
  3.     update Author  
  4.     <set>  
  5.         <if test="username != null">username=#{username},</if>  
  6.         <if test="password != null">password=#{password},</if>  
  7.         <if test="email != null">email=#{email}</if>  
  8.     </set>  
  9.     where id=#{id}  
  10. </update>  


同上的问题,优化后:
[html] view plain copy
print?
  1. <update id="updateAuthorIfNecessary"  
  2.     parameterType="Author">  
  3.     update Author  
  4.     <trim prefix="where" prefixOverrides=",">   
  5.     <set>  
  6.         <if test="username != null">username=#{username},</if>  
  7.         <if test="password != null">password=#{password},</if>  
  8.         <if test="email != null">email=#{email}</if>  
  9.     </set>  
  10.     where id=#{id}  
  11.     </trim>  
  12. </update>  


0
0
 
 

我的同类文章

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
更多文章
.blog-ass-articl dd {color: #369;width: 99%; /*修改行*/float: left;overflow: hidden;font: normal normal 12px/23px "SimSun";height: 23px;margin: 0;padding: 0 0 0 10px;margin-right: 30px;background: url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px;}
猜你在找
经典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&amp;rdid=1607657&amp;dc=2&amp;di=u1607657&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=3485x287&amp;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&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1464181549248&amp;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&amp;ari=1&amp;dbv=2&amp;drs=3&amp;pcs=1351x661&amp;pss=1351x4065&amp;cfv=11&amp;cpl=17&amp;chi=2&amp;cce=true&amp;cec=UTF-8&amp;tlm=1464152749&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fa600423444%2Farticle%2Fdetails%2F6658411&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=23&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1464181549&amp;qn=5bf5b01977c87ed8&amp;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网站的观点或立场
快速回复 TOP
.tag_list { background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #D7CBC1; color: #000000; font-size: 12px; line-height: 20px; list-style: none outside none; margin: 10px 2% 0 1%; padding: 1px; } .tag_list h5 { background: none repeat scroll 0 0 #E0DBD3; color: #47381C; font-size: 12px; height: 24px; line-height: 24px; padding: 0 5px; margin: 0; } .tag_list h5 a { color: #47381C; } .classify { margin: 10px 0; padding: 4px 12px 8px; } .classify a { margin-right: 20px; white-space: nowrap; }
核心技术类目
全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云计算iOS6Rackspace Web AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap
#popup_mask { position: absolute; width: 100%; height: 100%; background: #000; z-index: 9999; left: 0px; top: 0px; opacity: 0.3; filter: alpha(opacity=30); display: none; }
    个人资料

    上帝禁区
    • 访问: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新手,很有帮助

提问

您的问题将会被发布在“技术问答”频道×
该问题已存在,请勿重复提问
插入图片
||||||
  
 
 
000:0
推荐标签:
我要悬赏
取消发布
可能存在类似的问题:
我想提一个新问题
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 永安行怎么办月卡 马桶法兰圈漏水怎么办 水泵设计流量不够怎么办 球阀阀芯漏水怎么办 一字柄卡套球阀关不严怎么办 ppr球阀关不严怎么办 冼扫车气动法漏气怎么办 小米净水器堵了怎么办 空调滤网坏了怎么办 空调过滤网坏了怎么办 龙虾池塘水浑浊怎么办? 棉线结上下跑怎么办 国际汇款被审查怎么办 pvdf球阀扭不动怎么办 直通球阀拧不动怎么办 pvc塑料阀门漏水怎么办 水管阀门坏了怎么办 热水阀门变形了怎么办 热水管阀门变形怎么办 倒角剖面大了怎么办 不锈钢水壶不保温怎么办 南理工饭卡怎么办 水箱排水阀漏水怎么办 开餐饮店健康证怎么办 印鉴卡丢了怎么办 小汽车年检过期了怎么办 不解决户口档案怎么办 优亿金融逾期怎么办 工作中遇到安全问题怎么办 爆破对房屋影响怎么办 wifi鉴权失败怎么办 贷款银行卡鉴权怎么办 高层楼房噪音大怎么办 汽车膜有气泡怎么办 楼上油烟往下吹怎么办 壁挂炉烟囱堵了怎么办 建行etc换车了怎么办 物流破损拒收后怎么办 快递把货物损坏怎么办 寄快递东西损坏怎么办 快递寄破损了怎么办