Mybatis-trim標(biāo)簽

今天遇到一個場景需要寫一個這樣的查詢語句:
用戶對象userInfo包含下面幾個字段:
userName phone email qqId weiboId wxId

歡迎訪問本人博客:http://wangnan.tech

現(xiàn)在新注冊用戶,傳過來一個注冊userInfo對象敞曹,現(xiàn)在要到數(shù)據(jù)庫中驗證狀態(tài)status=1 (表示激活的用戶)的用戶中瞎疼,是否存在一個用戶块蚌,只要它這些字段中至少有一個與新注冊的對象對應(yīng)的字段內(nèi)容相同显拳,那就說明重復(fù)注冊碉咆。

翻譯成sql語句表示一下的意思大概就是:
select * from tablename where
(
userName=”xxx”
or phone =”xxx”
or …
)
and status=1

一開始我是這樣寫的扮叨,在mybatis中的代碼就是這樣:

<select id="selectBySelective" resultType="xxx.UserInfo">
   select 
    <include refid="Base_Column_List" />
    from uc_user 
    <where>
    (<if test="userName != null" >
        user_name = #{userName}
      </if>
      <if test="email != null" >
        or email = #{email}
      </if>
      <if test="phone != null" >
        or phone = #{phone}
      </if>
      <if test="weiboId != null" >
        or weibo_id = #{weiboId}
      </if>
      <if test="wxId != null" >
        or wx_id = #{wxId}
      </if>
      <if test="qqId != null" >
        or qq_id = #{qqId}
      </if>)
     </where>
     and status = 1
</select>

這樣代碼看似沒有什么問題但是其實是有問題的沉桌。為什么呢藤树?
如果userName 為空浴滴,后面某字段不為空,最后的sql語言會成為這樣:

select * from uc_user where(or email = "xxx") and status = 1

使用mybatis < where > 標(biāo)簽就是為了防止這種情況岁钓,mybatis會在第一個
userName 為空的情況下升略,幫我們?nèi)サ艉竺娴恼Z句的第一個”or”

但是我加了where標(biāo)簽中加入()后微王,語句會報錯。因為自動去掉”or”會失效品嚣。

查看了mybatis官方文檔發(fā)現(xiàn)了另一個標(biāo)簽 < trim >可以通過自定義 trim 元素來定制我們想要的功能

trim標(biāo)簽包圍的內(nèi)容可以設(shè)置幾個屬性:
prefix :內(nèi)容之前加的前綴
suffix :內(nèi)容之后加的后綴
prefixOverrides: 屬性會忽略通過管道分隔的文本序列(注意此例中的空格也是必要的炕倘,多個忽略序列用“|”隔開)。它帶來的結(jié)果就是所有在 prefixOverrides 屬性中指定的內(nèi)容將被移除翰撑。

所以我修改后的代碼是:

<select id="selectBySelective" resultType="xxx.UserInfo">
   select 
    <include refid="Base_Column_List" />
    from uc_user 
    <trim prefix="WHERE ("  suffix=")" prefixOverrides="AND |OR "> 
    <if test="userName != null" >
        user_name = #{userName}
      </if>
      <if test="email != null" >
        or email = #{email}
      </if>
      <if test="phone != null" >
        or phone = #{phone}
      </if>
      <if test="weiboId != null" >
        or weibo_id = #{weiboId}
      </if>
      <if test="wxId != null" >
        or wx_id = #{wxId}
      </if>
      <if test="qqId != null" >
        or qq_id = #{qqId}
      </if>  
     </trim>
     and status = 1
</select>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罩旋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眶诈,更是在濱河造成了極大的恐慌涨醋,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逝撬,死亡現(xiàn)場離奇詭異浴骂,居然都是意外死亡,警方通過查閱死者的電腦和手機球拦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門靠闭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坎炼,你說我怎么就攤上這事愧膀。” “怎么了谣光?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵檩淋,是天一觀的道長。 經(jīng)常有香客問我萄金,道長蟀悦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任氧敢,我火速辦了婚禮日戈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孙乖。我一直安慰自己浙炼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布唯袄。 她就那樣靜靜地躺著弯屈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恋拷。 梳的紋絲不亂的頭發(fā)上资厉,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音蔬顾,去河邊找鬼宴偿。 笑死湘捎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酪我。 我是一名探鬼主播消痛,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼都哭!你這毒婦竟也來了秩伞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤欺矫,失蹤者是張志新(化名)和其女友劉穎纱新,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穆趴,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡脸爱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了未妹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片簿废。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖络它,靈堂內(nèi)的尸體忽然破棺而出族檬,到底是詐尸還是另有隱情,我是刑警寧澤化戳,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布单料,位于F島的核電站,受9級特大地震影響点楼,放射性物質(zhì)發(fā)生泄漏扫尖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一掠廓、第九天 我趴在偏房一處隱蔽的房頂上張望换怖。 院中可真熱鬧,春花似錦蟀瞧、人聲如沸沉颂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屈溉,卻和暖如春塞关,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背子巾。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工帆赢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留小压,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓椰于,卻偏偏與公主長得像怠益,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瘾婿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis 蜻牢? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,535評論 0 4
  • 官方文檔 簡介 入門 XML配置 XML映射文件 動態(tài)SQL Java API SQL語句構(gòu)建器 日志 一偏陪、 JD...
    拾壹北閱讀 3,549評論 0 52
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理抢呆,服務(wù)發(fā)現(xiàn),斷路器笛谦,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法抱虐,類相關(guān)的語法,內(nèi)部類的語法饥脑,繼承相關(guān)的語法恳邀,異常的語法,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • 明天是520灶轰,剛好最近一直看到這個關(guān)于戀愛的東西谣沸,今天來說說好了。 后知后覺的迷上看《歡樂頌》的我框往,最近在看《歡樂...
    夢夕夢閱讀 602評論 4 5