1. 程式人生 > >SSM框架-MyBatis進階篇(二)

SSM框架-MyBatis進階篇(二)

一、表關係:一對一查詢

建立實體類

訂單實體:order.java

public class Order {
    private Integer id;//訂單主鍵ID
    private String name;//訂單名字
    private Integer userid;//使用者ID
}

使用者實體:User.java

public class User {

    private Integer id;//使用者主鍵ID
    private String name;//使用者名稱字

    private List<Order> orders;//訂單明細
}

建立OrderMapper.java,UserMapper.java

public interface OrderMapper {

    List<Order> findOrdersByUserId(@Param("uid")Integer id);

}
public interface UserMapper {

    User findById(@Param("uid")Integer id);

    List<User> allUser();
}

建立OrderMapper.xml,UserMapper.xml和上面對應的介面名稱一致,以便通過mapper介面載入配置檔案
OrderMapper.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">
<!--namespace:一般寫對應的介面路徑-->
<mapper namespace="com.lanou.ord.mapper.OrderMapper">
    <select id="findOrdersByUserId" resultType
="Order">
SELECT * FROM ord WHERE userid=#{uid} </select> </mapper>

二、 resultMap對映思路:

使用resultMap將查詢結果中的訂單資訊對映到Orders物件中,在orders類中新增User屬性,將關聯查詢出來的使用者資訊對映到orders物件中的user屬性中(上面orders實體類中已經新增order訂單明細).

1、UserMapper.xml

先定義resultMap

<?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">
<!--namespace:一般寫對應的介面路徑-->
<mapper namespace="com.lanou.ord.mapper.UserMapper">
<!--定義查詢訂單關聯使用者的resultMap,將整個的查詢結果對映到namespace-->
    <resultMap id="UserMap" type="User">
    <!--id:查詢列中的唯一標識,訂單資訊中的唯一標識,如果多列組成唯一標識(如:一般資料庫設計中的字典表,使
    用聯合主鍵),就需要配置多個id;
        column:訂單資訊的唯一標識,列;
        property:訂單資訊的唯一標識所對映到orders中的那個屬性(如:資料庫中orders表中的主鍵為
        orders_id,而實體屬性名稱為ordersId),則這個這個配置應為<id column="orders_id"   
        property="ordersId"/>,類似hibernate實體對映檔案配置.-->
        <id column="id" property="id"/>
        <result column="name" property="name"/>

     <!--property:對映到user的那個屬性;
         column:指定唯一標識使用者資訊的列;-->
        <collection property="orders"
                    column="id"
                    select="com.lanou.ord.mapper.OrderMapper.findOrdersByUserId"/>
    </resultMap>

    <select id="findById" resultMap="UserMap">
        SELECT * FROM user WHERE id = #{uid};
    </select>

    <select id="allUser" resultMap="UserMap">
        SELECT * FROM user;
    </select>

</mapper>

未完待續…