17Mybatis_動態sql-sql片段


這篇文章講一下sql片段。

講一下sql片段的的需求:

將上邊實現的動態sql判斷代碼塊抽取出來,組成一個sql片段。其它的statement中就可以引用sql片段。

方便程序員進行開發。

第一步我們先定義一個sql片段;

第二步:我們再引用這個sql片段。

 

 

這個案例中我們只修改userMapper.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">
<!-- nanmespace:命名空間。 作用就是對sql進行分類話管理,理解Sal分離

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="cn.itcast.mybatis.mapper.userMapper">
   
 <!-- 
 這里的id要和Mapp接口里面的函數名字一模一樣。parameterType表示輸入的類型,
 resultType表示輸出的類型
 
  -->
    <select id="findUserList" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultType="cn.itcast.mybatis.po.UserCustom">
        SELECT id ,username FROM USER WHERE user.sex= #{userCustom.sex} AND user.username=#{userCustom.username} 
    </select>
    
    <!-- 
    定義resultMap
    將SELECT id id_,username username_ FROM USER 和User類中的屬性做一個映射關系
    
    type:resultMap最終映射的java對象類型,可以使用別名
    id:對resultMap的唯一標識。
     -->
    <resultMap type="user" id="userResultMap">
        <!-- 
        id:表示查詢結果集中唯一的標識。
        column:查詢出來的列名
        property:type指定的pojo類型中的屬性名
        最終resultMap對column和property作一個映射關系(對應關系)
        
        
         -->
        <id column="id_" property="id"/>
        <result column="username_" property="username"/>
    </resultMap>
    
    
    <!-- 定義一個sql片段 
    id:sql片段的唯一標識;
    經驗:是基於單表來定義sql片段,這樣的話這個sql片段可重用性才高
    在sql片段中不要包括where
    
    -->
    <sql id="query_user_where">
        <if test="userCustom!=null">
            <if test="userCustom.sex!=null and userCustom.sex!=''">
                and  user.sex= #{userCustom.sex}
            </if>
            <if  test="userCustom.username!=null and userCustom.username!=''" >
                
                and user.username=#{userCustom.username} 
            </if>
            
            
        </if>
       
    </sql>
    
        <select id="findUserByResultMap" parameterType="cn.itcast.mybatis.po.UserQueryVo" resultMap="userResultMap">
        SELECT id id_,username username_ FROM USER 
    <!-- 
    
    where可以自動去掉條件中的第一個and
     -->
    <where>
        <!-- 引用一個sql片段 -->
       <include refid="query_user_where"></include> 
    </where>
    
    </select>
    
   
</mapper>

 


免責聲明!

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



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