1. 程式人生 > >mapper.xml中動態sql

mapper.xml中動態sql

-m 開始 集合屬性 參數 ack pub odin ids lose

mabatis重點是通過標簽對sql靈活的組織,通過配置的方式完成輸入 輸出映射.

1.對mapper.xml中重復的sql抽取統一維護,以及foreach使用

UserMapperCustom.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.itcast.mybatis.mapper.UserMapperCustom"> <!-- 定義一個sql片段,將重復的sql語句抽取出來 建議:定義查詢條件以單表為單位去定義,sql片段可重用性才高 建議不要包括where 建議以單個為單位去定義查詢條件,一般要將查詢條件寫全
--> <sql id="query_user_where"> <!-- 如果有條件值再拼接 --> <if test="user!=null"> <if test="user.username!=null and user.username!=‘‘"> <!-- 用戶輸入條件值再拼接 --> and username like ‘%${user.username}%‘ </if
> <if test="user.sex!=null and user.sex!=‘‘"> and sex = #{user.sex} </if> <!-- 下邊要拼接: AND id IN (1,10,16) --> <!-- 遍歷id列表 collection:接收輸入參數中的集合屬性 item:每次循環定義一個對象名 open:開始循環時拼接的sql close:結束循環時拼接的sql separator:每兩次循環中間拼接的sql
--> <foreach collection="ids" item="id" open=" AND id IN ( " close=" ) " separator=","> #{id} </foreach> <!-- 思考:如何拼接 AND (id=1 OR id=10 OR id=16) 實現 SELECT * FROM USER WHERE sex = ‘1‘ AND id IN (1,10,16)
-->
            </if>
    </sql>

    <!-- 綜合條件查詢用戶 -->
    <select id="findUserList" parameterType="queryUserVo"
        resultType="user">
        select id,username,birthday,sex,address from user
    
       <!-- where標簽 相關於where關鍵字,可以將條件中的第一個and去掉 -->
        <where>
        <!-- 引用sql片段
        如果跨mapper引用需要前邊加namespace
         -->
        <include refid="query_user_where"></include>
       </where>
    </select>
    
    <!-- 綜合條件查詢用戶記錄匯總 -->
    <select id="findUserCount" parameterType="queryUserVo" resultType="int">
        select count(*) from user
         <!-- where標簽 相關於where關鍵字,可以將條件中的第一個and去掉 -->
        <where>
        <!-- 引用sql片段
        如果跨mapper引用需要前邊加namespace
         -->    
        <include refid="query_user_where"></include>
       </where>
    </select>

</mapper>


UserMapperCustom.java
public interface UserMapperCustom {
    
    //綜合條件查詢用戶信息
    public List<User> findUserList(QueryUserVo queryUserVo) throws Exception;
    
    //綜合條件查詢用戶記錄總數
    public int findUserCount(QueryUserVo queryUserVo) throws Exception;

}

mapper.xml中動態sql