Mybatis詳解2

Mybatis

resultMap的使用

  1. 單表查詢

        <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>
  2. 一對一關聯映射

    <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>
  3. 一對多關聯映射

        <!-- 一對多關聯映射 -->
    <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值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章