国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

瑞安做網(wǎng)站建設(shè)湖南網(wǎng)站建設(shè)seo

瑞安做網(wǎng)站建設(shè),湖南網(wǎng)站建設(shè)seo,深圳帶停機(jī)坪的別墅,企業(yè)網(wǎng)站模板源碼起名動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一。如果你使用過 JDBC 或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接 SQL 語句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL,可以徹底…

動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一。如果你使用過 JDBC 或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接 SQL 語句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL,可以徹底擺脫這種痛苦。

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

1 if

使用動(dòng)態(tài) SQL 最常見情景是根據(jù)條件包含 where 子句的一部分。比如:

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

這條語句提供了可選的查找文本功能。如果不傳入 “title”,那么所有處于 “ACTIVE” 狀態(tài)的 BLOG 都會(huì)返回;如果傳入了 “title” 參數(shù),那么就會(huì)對(duì) “title” 一列進(jìn)行模糊查找并返回對(duì)應(yīng)的 BLOG 結(jié)果(細(xì)心的讀者可能會(huì)發(fā)現(xiàn),“title” 的參數(shù)值需要包含查找掩碼或通配符字符)。

如果希望通過 “title” 和 “author” 兩個(gè)參數(shù)進(jìn)行可選搜索該怎么辦呢?首先,我想先將語句名稱修改成更名副其實(shí)的名稱;接下來,只需要加入另一個(gè)條件即可。

<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

有時(shí)候,我們不想使用所有的條件,而只是想從多個(gè)條件中選擇一個(gè)使用。針對(duì)這種情況,MyBatis 提供了 choose 元素,它有點(diǎn)像 Java 中的 switch 語句。

還是上面的例子,但是策略變?yōu)?#xff1a;傳入了 “title” 就按 “title” 查找,傳入了 “author” 就按 “author” 查找的情形。若兩者都沒有傳入,就返回標(biāo)記為 featured 的 BLOG(這可能是管理員認(rèn)為,與其返回大量的無意義隨機(jī) 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

前面幾個(gè)例子已經(jīng)方便地解決了一個(gè)臭名昭著的動(dòng)態(tài) SQL 問題。現(xiàn)在回到之前的 “if” 示例,這次我們將 “state = ‘ACTIVE’” 設(shè)置成動(dòng)態(tài)條件,看看會(huì)發(fā)生什么。

<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>

如果沒有匹配的條件會(huì)怎么樣?最終這條 SQL 會(huì)變成這樣:

SELECT * FROM BLOG
WHERE

這會(huì)導(dǎo)致查詢失敗。如果匹配的只是第二個(gè)條件又會(huì)怎樣?這條 SQL 會(huì)是這樣:

SELECT * FROM BLOG
WHERE
AND title like ‘someTitle’

這個(gè)查詢也會(huì)失敗。這個(gè)問題不能簡(jiǎn)單地用條件元素來解決。這個(gè)問題是如此的難以解決,以至于解決過的人不會(huì)再想碰到這種問題。

MyBatis 有一個(gè)簡(jiǎn)單且適合大多數(shù)場(chǎng)景的解決辦法。而在其他場(chǎng)景中,可以對(duì)其進(jìn)行自定義以符合需求。而這,只需要一處簡(jiǎn)單的改動(dòng):

<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 元素只會(huì)在子元素返回任何內(nèi)容的情況下才插入 “WHERE” 子句。而且,若子句的開頭為 “AND” 或 “OR”,where 元素也會(huì)將它們?nèi)コ?/p>

如果 where 元素與你期望的不太一樣,你也可以通過自定義 trim 元素來定制 where 元素的功能。比如,和 where 元素等價(jià)的自定義 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://m.aloenet.com.cn/news/28786.html

相關(guān)文章:

  • 桐鄉(xiāng)做網(wǎng)站正規(guī)seo大概多少錢
  • 網(wǎng)站不兼容怎么辦鄭州seo博客
  • 網(wǎng)站內(nèi)容全屏截屏怎么做網(wǎng)站做seo教程
  • 自己站網(wǎng)站如何進(jìn)行搜索引擎優(yōu)化
  • 查法人信息的網(wǎng)站培訓(xùn)計(jì)劃和培訓(xùn)內(nèi)容
  • 建網(wǎng)站要花錢嗎seo如何建立優(yōu)化網(wǎng)站
  • 上海網(wǎng)站建設(shè)定制公司谷歌推廣代理公司
  • 用wordpress怎么做網(wǎng)站免費(fèi)s站推廣網(wǎng)站
  • 濰坊網(wǎng)站建設(shè)客服代寫文章質(zhì)量高的平臺(tái)
  • 電子商務(wù)網(wǎng)站開發(fā)是什么官方正版清理優(yōu)化工具
  • cnzz網(wǎng)站建設(shè)廣州seo好找工作嗎
  • 廣州家居網(wǎng)站設(shè)計(jì)nba最新交易匯總
  • 大學(xué)生想做網(wǎng)站西安seo優(yōu)化推廣
  • 青島網(wǎng)站建設(shè)小公司seo綜合查詢工具
  • 網(wǎng)站是否必須做可信網(wǎng)站認(rèn)證seo自動(dòng)優(yōu)化軟件下載
  • 訂房網(wǎng)站開發(fā)長(zhǎng)春網(wǎng)站建設(shè)推廣
  • 網(wǎng)站開發(fā)驗(yàn)收單8大營(yíng)銷工具指的是哪些
  • 怎么做提卡密網(wǎng)站域名解析網(wǎng)站
  • 專注做一家男人最愛的網(wǎng)站廣州seo運(yùn)營(yíng)
  • 全網(wǎng)搜索石家莊seo全網(wǎng)營(yíng)銷
  • 東莞網(wǎng)絡(luò)展示平臺(tái)東莞seo外包
  • 網(wǎng)站建設(shè)與維護(hù)是做什么seo公司上海牛巨微
  • wordpress的app怎么用而的跟地seo排名點(diǎn)擊軟件
  • 設(shè)計(jì)高端網(wǎng)站怎么宣傳自己的產(chǎn)品
  • 成都網(wǎng)站排名優(yōu)化今日新聞?lì)^條新聞今天
  • 常寧網(wǎng)頁(yè)設(shè)計(jì)西安百度關(guān)鍵詞優(yōu)化排名
  • 濟(jì)南市做網(wǎng)站大連網(wǎng)站開發(fā)公司
  • php 網(wǎng)站 下載百度網(wǎng)址大全網(wǎng)站大全
  • sqlite做網(wǎng)站下載優(yōu)化大師安裝桌面
  • 網(wǎng)站空間購(gòu)買800seo運(yùn)營(yíng)工作內(nèi)容