mybatis 動態sql表達式相關應用


一、mybatis 表達式簡介

  對於mybatis3 ,提供了一種動態sql的方式。通過動態sql我們可以直接在mybatis 的xm映射文件中直接通過條件判斷的方式進行查詢添加的拼接。mybatis 項目地址為 http://github.com/mybatis/mybatis-3 。mybatis 3 提供如下條件判斷:

  • if
  • choose (when, otherwise)
  • foreach

  if語句如下:

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

  choose語句如下:

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

  foreach語句如下

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>

 二、相關技巧

  對於變量可以使用#{param} 方式進行拼接。mybatis 也支持${param} 的方式。這兩種方式的區別如下:

  #{param}  表示讀取param參數的值,並將該值做字段的的值進行比較;

  ${param} 表示讀取param的值,並將param值當成數據庫表中的某個字段。

  在數據量大的時候,我們會使用維度表。將統計結果定期統計到維度表,展示的時候,直接讀取維度表的數據。

  維度表結構如下:

DROP TABLE IF EXISTS `wd`;
CREATE TABLE `wd` (
  `id` varchar(64) NOT NULL,
  `xl` varchar(2) NOT NULL,
  `xzqh` varchar(2) NOT NULL,
  `nld` varchar(2) NOT NULL,
  `total` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  統計的時候,需要根據xl(學歷),xzqh(行政區划),nld(年齡段)進行分組查詢。sql如下:

select ${param}, sum(total)
from wd
group by ${param}

  parm 傳的值可以是 “xl”、“xzqh”,“nld” 這樣通過一個sql就可完成這個功能。只需要傳遞不同的參數,從而完成對不同字段的分組統計。這中凡是在使用圖表的時候進行分組統計,可以用的到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM