当前位置: 首页 > news >正文

合肥建设工程市场价格信息百度seo排名优化公司推荐

合肥建设工程市场价格信息,百度seo排名优化公司推荐,wordpress 知更鸟 公告,河南网站建设平台动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底…

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

if
choose (when, otherwise)
trim (where, set)
foreach

1 if

使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。比如:

<select id="findActiveBlogWithTitleLike" resultType="Blog">SELECT * FROM BLOGWHERE state =ACTIVE<if test="title != null">AND title like #{title}</if>
</select>

这条语句提供了可选的查找文本功能。如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 BLOG 都会返回;如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果(细心的读者可能会发现,“title” 的参数值需要包含查找掩码或通配符字符)。

如果希望通过 “title” 和 “author” 两个参数进行可选搜索该怎么办呢?首先,我想先将语句名称修改成更名副其实的名称;接下来,只需要加入另一个条件即可。

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG WHERE state =ACTIVE<if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if>
</select>

2 choose、when、otherwise

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句

还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。若两者都没有传入,就返回标记为 featured 的 BLOG(这可能是管理员认为,与其返回大量的无意义随机 Blog,还不如返回一些由管理员精选的 Blog)。

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG WHERE state =ACTIVE<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose>
</select>

3 trim、where、set

前面几个例子已经方便地解决了一个臭名昭著的动态 SQL 问题。现在回到之前的 “if” 示例,这次我们将 “state = ‘ACTIVE’” 设置成动态条件,看看会发生什么。

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOGWHERE<if test="state != null">state = #{state}</if><if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if>
</select>

如果没有匹配的条件会怎么样?最终这条 SQL 会变成这样:

SELECT * FROM BLOG
WHERE

这会导致查询失败。如果匹配的只是第二个条件又会怎样?这条 SQL 会是这样:

SELECT * FROM BLOG
WHERE
AND title like ‘someTitle’

这个查询也会失败。这个问题不能简单地用条件元素来解决。这个问题是如此的难以解决,以至于解决过的人不会再想碰到这种问题。

MyBatis 有一个简单且适合大多数场景的解决办法。而在其他场景中,可以对其进行自定义以符合需求。而这,只需要一处简单的改动:

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG<where><if test="state != null">state = #{state}</if><if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if></where>
</select>

where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:

  <update id="updateBatch" parameterType="java.util.List"><!--@mbg.generated-->update bs_factory_calendar<trim prefix="set" suffixOverrides=","><trim prefix="SET_TIME = case" suffix="end,"><foreach collection="list" index="index" item="item">when FACTORY_CALENDAR_ID = #{item.factoryCalendarId,jdbcType=VARCHAR} then #{item.setTime,jdbcType=VARCHAR}</foreach></trim><trim prefix="WEEK = case" suffix="end,"><foreach collection="list" index="index" item="item">when FACTORY_CALENDAR_ID = #{item.factoryCalendarId,jdbcType=VARCHAR} then #{item.week,jdbcType=VARCHAR}</foreach></trim></trim>where FACTORY_CALENDAR_ID in<foreach close=")" collection="list" item="item" open="(" separator=", ">#{item.factoryCalendarId,jdbcType=VARCHAR}</foreach></update>
  <insert id="insertOrUpdateSelective" parameterType="com.inspur.spring.pojo.BsFactoryCalendar"><!--@mbg.generated-->insert into bs_factory_calendar<trim prefix="(" suffix=")" suffixOverrides=","><if test="factoryCalendarId != null">FACTORY_CALENDAR_ID,</if><if test="setTime != null">SET_TIME,</if></trim>values<trim prefix="(" suffix=")" suffixOverrides=","><if test="factoryCalendarId != null">#{factoryCalendarId,jdbcType=VARCHAR},</if><if test="setTime != null">#{setTime,jdbcType=VARCHAR},</if></trim>on duplicate key update<trim suffixOverrides=","><if test="factoryCalendarId != null">FACTORY_CALENDAR_ID = #{factoryCalendarId,jdbcType=VARCHAR},</if><if test="setTime != null">SET_TIME = #{setTime,jdbcType=VARCHAR},</if></trim></insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.inspur.spring.pojo.BsFactoryCalendar"><!--@mbg.generated-->update bs_factory_calendar<set><if test="updateTime != null">UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP},</if><if test="comId != null">COM_ID = #{comId,jdbcType=VARCHAR},</if></set>where FACTORY_CALENDAR_ID = #{factoryCalendarId,jdbcType=VARCHAR}</update>

4 foreach

<select id="selectPostIn" resultType="domain.blog.Post">SELECT *FROM POST P<where><foreach item="item" index="index" collection="list"open="ID in (" separator="," close=")" nullable="true">#{item}</foreach></where>
</select>
http://www.hrbkazy.com/news/27973.html

相关文章:

  • 页面设计包括插画吗珠海关键词优化软件
  • 打开网站弹出一张图片 怎么做万词霸屏百度推广seo
  • 网站分站是怎么做的百度推广一般要多少钱
  • 建设银行员工学习网站自动seo系统
  • 新疆自治区建设厅交易中心网站优化公司治理结构
  • 做论文常用网站有哪些淘宝seo排名优化的方法
  • 免费建设淘宝客网站学网络运营在哪里学比较好
  • cms网站搭建想做推广哪个平台好
  • 怎么优化自己的网站郑州竞价托管代运营
  • 做软件的公司网站有哪些宁波seo优化报价多少
  • 在线支付网站制作自己如何做网站
  • 17zwd一起做网站广州宁波微信推广平台哪个好
  • 外贸建站源码手机百度下载免费安装
  • 网站使用网络图片做素材 侵权南昌网优化seo公司
  • 幼儿园做网站的作用韩国今日特大新闻
  • 网站开发 方案 报价单百度实时热点排行榜
  • 学做网站多少钱优化疫情二十条措施
  • 网站系统类型游戏代理推广渠道
  • 郑州微网站制作seo研究中心道一老师
  • 三墩网站建设国内哪个搜索引擎最好用
  • 商城网站的搜索记录代码怎么做seo翻译
  • 做网站陪聊下单网站的网站建设
  • 做ppt音乐模板下载网站网文推广怎么做
  • 施工企业高级工程师土建答辩宁波做seo推广企业
  • 做美食教程的网站有哪些软文平台
  • 佛山网站快速优化排名平台推广策略都有哪些
  • 做微信平台网站需要多少钱外国网站开放的浏览器
  • wordpress批量传图片外链优化
  • 建站空间麒麟seo外推软件
  • 全国企业信息公示系统查询网站优化推广外包