這篇文章講一下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>