mybatis中映射文件include標簽的應用
mybatis映射文件include標簽應用
MyBatis中sql標簽定義SQL片段,include標簽引用,可以復用SQL片段可以使用標簽提取出來,在使用的地方使用標簽引用即可.sql標簽中id屬性對應include標簽中的refid屬性。通過include標簽將sql片段和原sql片段進行拼接成一個完整的sql語句進行執行。
具體用法如下:
1.引用同一個xml中的sql片段
<sql id="sqlid"> res_type_id,res_type </sql> <select id="selectbyId" resultType="com.property.vo.PubResTypeVO"> select <include refid="sqlid"/> from pub_res_type </select>
2.引用公用的sql片段
include標簽中也可以用property標簽,用以指定自定義屬性。在sql標簽中通過${}取出對應的屬性值
<select id="queryPubResType" parameterType="com.property.vo.PubResTypeVO" resultMap="PubResTypeList"> select a.res_type_id, <include refid="com.common.dao.FunctionDao.SF_GET_LNG_RES_TYPE"> <property name="AI_RES_TYPE_ID" value="a.res_type_id"/> <property name="lng" value="#{lngId}"/> <property name="female" value="'女'"/> </include> as res_type from pub_res_type a </select>
3.對於多個xml文件需要同時引用一段相同的
在某個xml 中定義這個 sql 代碼片段,在需要引用的地方使用全稱引用即可,例子如下:
ShareMapper.xml
<mapper namespace="com.company.ShareMapper"> <sql id="someSQL"> id,name </sql> </mapper>
CustomMapper.xml
<mapper namespace="com.company.CustomMapper"> <select id="selectSome" > select <include refid="com.company.ShareMapper.someSQL"/> from t </select> </mapper>
使用resultType進行輸出映射,隻有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。
如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關系。
resultMap
:適合使用返回值是自定義實體類的情況resultType
:適合使用返回值得數據類型是非自定義的,即jdk的提供的類型.
mybatis sql xml include標簽 (代碼去重)
mybatis sql xml 對於重復的代碼片段 可以使用 include 標簽進行優化
例如 以下將查詢條件進行優化:
<sql id="where"><!-- 定義代碼片段--> <where> <if test="CarNo != null and CarNo != ''"> and car_no like concat('%',#{CarNo},'%') </if> <if test="CardNo != null and CardNo != ''"> and card_no = #{CardNo} </if> <if test="serviceType != null and serviceType != ''"> and service_type = #{serviceType} </if> .....省略 </where> </sql> <select id="queryList" resultType="com.framework.entity.WeightEntity"> select * from weight <include refid="where"/> <!-- 引用--> <if test="offset != null and limit != null"> limit #{offset}, #{limit} </if> </select> <select id="queryTotal" resultType="int"> select count(*) from weight <include refid="where" /> <!-- 引用-> </select>
當然 include標簽不僅僅用於where, 隻要重復代碼片段都可使用
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 基於mybatis中<include>標簽的作用說明
- mybatis-puls中的resultMap數據映射
- MyBatis在DAO層定義接口返回類型泛型無效的解決
- mybatis使用resultMap獲取不到值的解決方案
- mybatis映射和實際類型不一致的問題