1. 程式人生 > >mybatis中的sql

mybatis中的sql

mybatis中有些特殊字元應用在sql中,最常見的莫過於“>” 和 “<”。

“>”在mybatis中是“大於”的意思,等同於符號“>”。

“&lt;”在mybatis中是“小於”的意思,等同於符號“<”。

例如在mybatis中配置這樣的一段sql:

  <select id="findAllByCondition" parameterType="RYXX" resultMap="ryxxResult">
  SELECT u.*,
      CASE
      WHEN u.RYZT = 1 AND MONTHS_BETWEEN(TO_DATE(u.HTJSSJ,'YYYY-MM-DD'),SYSDATE) &gt; 0 AND MONTHS_BETWEEN(TO_DATE(u.HTJSSJ,'YYYY-MM-DD'),SYSDATE) &lt; 1 THEN 1
      WHEN u.RYZT = 1 AND MONTHS_BETWEEN(TO_DATE(u.HTJSSJ,'YYYY-MM-DD'),SYSDATE) &lt; 1 THEN 2
      ELSE 0 END sfdq,
      dw.DWMC FROM B_TZ_RYGL_RYXX u LEFT JOIN B_RS_DW dw ON u.DW = dw.DWBH
  <where>
       1=1
   <if test="xh != null and xh != ''">AND u.XH = #{xh}</if>
   <if test="jyxm != null and jyxm != ''">AND u.JYXM like '%'||#{jyxm}||'%'</if>
   <if test="gh != null and gh != ''">AND u.GH = #{gh}</if>
   <if test="dj != null and dj != ''">AND u.DJ = #{dj}</if>
   <if test="ryzt != null and ryzt != ''">AND u.RYZT = #{ryzt}</if>
   <if test="nl != null and nl != ''">AND (to_char(sysdate, 'yyyy') - substr(u.SFZH, 7, 4)) = #{nl}</if>
   <if test="xl != null and xl != ''">AND u.XL = #{xl}</if>
   <if test="yj != null and yj != ''">AND u.YJ = #{yj}</if>
   <if test="xb != null and xb != ''">AND u.XB = #{xb}</if>
   <if test="htkssj != null and htkssj != ''">AND u.HTKSSJ = #{htkssj}</if>
   <if test="dw != null and dw != ''">AND u.DW IN (SELECT DWBH FROM B_RS_DW d start with d.DWBH=#{dw} connect by d.LSGX=prior d.DWBH)</if>
   <if test="sfdq == 1">AND u.RYZT = 1 AND MONTHS_BETWEEN(TO_DATE(u.HTJSSJ,'YYYY-MM-DD'),SYSDATE) &gt; 0 AND MONTHS_BETWEEN(TO_DATE(u.HTJSSJ,'YYYY-MM-DD'),SYSDATE) &lt; 1</if>
   <!-- 此處增加欄位檢索條件 -->
      </where>
  ORDER BY u.DJSJ DESC
 </select>

經過plsql的自動轉換過後(此處的查詢條件僅u.DW一項):SELECT u.*,
       CASE
         WHEN u.RYZT = 1 AND
              MONTHS_BETWEEN(TO_DATE(u.HTJSSJ, 'YYYY-MM-DD'), SYSDATE) > 0 AND
              MONTHS_BETWEEN(TO_DATE(u.HTJSSJ, 'YYYY-MM-DD'), SYSDATE) < 1 THEN
          1
         WHEN u.RYZT = 1 AND
              MONTHS_BETWEEN(TO_DATE(u.HTJSSJ, 'YYYY-MM-DD'), SYSDATE) < 1 THEN
          2
         ELSE
          0
       END sfdq,
       dw.DWMC
  FROM B_TZ_RYGL_RYXX u
  LEFT JOIN B_RS_DW dw
    ON u.DW = dw.DWBH
 WHERE 1 = 1
   AND u.DW IN (SELECT DWBH
                  FROM B_RS_DW d
                 start with d.DWBH = ?
                connect by d.LSGX = prior d.DWBH)
 ORDER BY u.DJSJ DESC



相關推薦

mybatissql語句查詢操作

java 拼接 tca 指定 lose pan 添加 fill test 動態sql where if where可以自動處理第一個and。   <!-- 根據id查詢用戶信息 --> <!-- public User findUse

mybatissql標籤、where標籤、foreach標籤用法

<sql id="query_user_where"> <!-- 如果 userQueryVo中傳入查詢條件,再進行sql拼接--> <!-- test中userCustom.username表示從userQueryVo讀取屬性值--> &l

常用mybatissql寫法

目錄   1.時間處理 2.in操作包含大於1000 3.oracle批量處理 4.orcle模糊查詢 (左模糊,全模糊) 1.時間處理 <if test="timeLimitStart != null and timeLimitEnd !=

MyBatis sql語句include標籤的使用

   <!-- 1.先定義用於select查詢公用抽取的列 -->     <sql id="columns">         id,name,sex,birth

MybatisSQL效能優化注意事項

Mybatis SQL效能調優 1.  Mapper層引數為Map,由Service層負責過載     Mapper由於機制的問題,不能過載,引數一般設定成Map,但這樣會使引數變得模糊,如果想要使程式碼變得清晰,可以通過service層來實現過載的目的,對外提

mybatissql語句的#和$

一直寫mybatis的sql語句,當時想只要實現它的功能就行了,也沒過多的去理解; 首先我們大家都知道#和$都是用來傳值的,但他們之間是怎麼區分的呢?什麼時候用哪個好呢? 1、#將傳入的資料都當成字串

MyBatis sql標籤和include標籤的使用

<sql> 和 <include> <sql>用來封裝SQL語句, <include>來呼叫 程式碼片段:<sql id="select"&g

mybatissql語句使用大於小於號方法

目的: mapper檔案中如何使用大於小於號 例項:查詢語句 <select id="queryInfo" parameterType="com.Time" resultType

mybatissql傳入引數為集合、陣列時解決方式

平時我們寫sql時只需要傳入一個查詢引數或者幾個不同欄位的引數就足夠了,但是如果傳入的引數是集合、陣列的時候該怎麼辦呢? mybatis中的<foreach>標籤很好的提供了對這類問題的解

MyBatisSQL對映的XML檔案

Mappers 既然MyBatis的行為已經由上篇介紹的MyBatis配置檔案的元素配置完了,我們現在就要定義SQL對映語句了。但是,首先我們需要告訴MyBatis到哪裡去找到這些配置。Java在這方

mybatisSQL塊使用/動態條件查詢

<!-- 欄位 --> <sql id="field"> `id`, `username`, `password` </sql> 使用:<include refid="field"/>

mybatissql標籤的使用

mybatis中sql標籤重要是為了避免在專案開發的過程中重複編寫大量相同的sql語句,例如下面的查詢語句: <select id="selectCountryAndCity" parameterType="map" resultMap="c

mybatissql語句引數新增判斷

在使用mybatis框架,在xml檔案寫sql語句時,我們經常會新增一些引數輸入的判斷條件, 一是為了控制非法引數傳入導致程式報錯,二是可根據不同引數傳入實現sql語句的複用。 簡單總結如下: 查詢語句: 判斷引數不為空 select  * from table1 wher

mybatis sql語句傳遞多個引數

Mapper中的介面: PermissionEntity selectPermission(Integer roleid, Integer menuid); 那麼對應的對映檔案: <select id="selectPermission" resultType="co

Mybatissql語句的in查詢,一定要判斷null的情況

不嚴謹的寫法,可能會報錯:in (),這種情況不符合mysql的語法。    select from loanwhere LOAN_ID in <foreach item="item" index

mybatissql寫法技巧小總結

最近有個兄弟在搞mybatis,問我怎麼寫sql ,說簡單一點mybatis就是寫原生sql,官方都說了 mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類:1. if

Mybatis如何將POJO作為參數傳入sql

tor 後來 encoding public .project bat 接口 odi 插入數據 今天在工作時,需要將獲取的用戶的註冊信息插入數據庫,開始的做法是將所有的model的屬性作為DAO接口的參數,後來想想不對勁,要是有100個屬性,那我這個接口豈不是要有1

Mybatis動態sqltrim標簽的使用

bat fix 打印 第一個 屬性 其中 紅色 span pre trim是一個格式化的標記,可以完成set或者where標記的功能。 trim屬性: prefix:前綴覆蓋並增加其內容 suffix:後綴覆蓋並增加其內容 prefixOverrides:前綴判斷的條件 s

Mybatisupdate一個實體的動態sql

trim myba type 包含 刪掉 logs ear err ref <update id="updateOne" parameterType="com.inspur.search.data.EntityRelation"> UPDATE ENTIT

Mybatis處理sql的大於號小於號

字符替換 mybatis str tab amp 不能 [ ] pos table 因為xml格式中,不能隨便出現"<"、“>”等符號,所以在sql中這一類的符號要進行特殊處理 第一種方法:使用轉義字符替換特殊的符號   例如 SELECT * FROM j