Mybatis
resultMap的使用
單表查詢
<resultMap type="orders" id="order_list_result_map"> <!-- id主鍵的映射, property時候pojo中主鍵的屬性,column:返回結果中主鍵的列--> <id property="id" column="id"/> <!-- 普通列使用result映射 --> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="createtime"/> <result property="note" column="note"/> </resultMap> <select id="getOrderListResultMap" resultMap="order_list_result_map"> select id,user_id,number,createtime,note from orders </select> <select id="getOrderUserList" resultType="orderuser"> SELECT o.id, o.user_id userId, o.number, o.createtime, o.note, u.username, u.address FROM orders o LEFT JOIN `user` u ON o.user_id = u.id </select>
一對一關聯映射
<resultMap type="orders" id="order_user_resultmap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="createtime"/> <result property="note" column="note"/> <!-- 配置一對一關聯映射 --> <!-- property:對於orders中user的屬性.javaType:代表user屬性的數據類型--> <association property="user" javaType="com.mydeertrip.mybatis.po.User"> <id property="id" column="user_id"/> <result property="username" column="username"/> <result property="address" column="address"/> </association> </resultMap> <select id="getOrderUserResultMap" resultMap="order_user_resultmap"> SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM orders o LEFT JOIN `user` u ON o.user_id = u.id </select>
一對多關聯映射
<!-- 一對多關聯映射 --> <resultMap type="user" id="user_order_resultmap"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="birthday" column="birthday"/> <result property="sex" column="sex"/> <result property="address" column="address"/> <!-- 配置一對多關聯映射 --> <!-- property:對於user對象中的集合屬性 --> <!-- ofType:集合中每個元素的數據類型 --> <collection property="orders" ofType="orders"> <!-- id對於order的主鍵屬性 --> <id property="id" column="oid"/> <result property="number" column="number"/> <result property="createtime" column="createtime"/> <result property="note" column="note"/> </collection> </resultMap> <select id="getUserWithOrders" resultMap="user_order_resultmap"> SELECT u.id, u.username, u.birthday, u.sex, u.address, o.id oid, o.number, o.createtime, o.note FROM `user` u LEFT JOIN orders o ON u.id = o.user_id </select>
動態sql
if標籤
<if test="id!=null">
and id=#{id}
</if>
<if test="username != null and username != ''">
and username like '%${username}%'
</if>
if標籤在mapper.xml映射文件中有判斷作用,常用於判斷屬性是否爲空
where標籤
<where>
<if test="id!=null">
and id=#{id}
</if>
<if test="username != null and username != ''">
and username like '%${username}%'
</if>
</where>
where標籤可以將sql語句中多餘的and去掉,避免出現語法錯誤
foreach
<select id="findUserByIds" parameterType="queryvo" resultType="user">
SELECT
<include refid="user_field_list"/>
FROM `user`
<where>
<!-- and id in(1,10,20,21,31) -->
<foreach collection="ids" item="id" open="and id in(" close=")" separator=",">
#{id}
</foreach>
</where>
</select>
foreach標籤可以遍歷輸入參數中的集合屬性
sql片段
<sql id="user_field_list">
id,username,birthday,sex,address
</sql>
<select id="findUserList" parameterType="user" resultType="user">
select <include refid="user_field_list"/> from user
<include refid="find_user_list_where"/>
</select>
用於提取重複的sql語句,必須有id,通過sql標籤定義;引用sql片段時,通過include標籤中的refid屬性引用sql片段,refid的值即爲sql片段的id值