mybatis--一對多

在orders.java類中添加List orderDetails屬性。
最終會將訂單信息映射到orders中,訂單所對應的訂單明細映射到orders中的orderDetails屬性中。

Orders.java

public class Orders {
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;

    private User user;

    private List<Orderdetail> orderdetails;

OrdersMapperCustom.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命名空間,作用就是對sql進行分類化管理,理解sql隔離 注意:使用mapper代理方法開發,
    namespace有特殊重要的作用,namespace等於mapper接口地址 -->
<mapper namespace="cn.itcast.mybatis.mapper.OrdersMapperCustom">

    <!-- 訂單查詢關聯用戶的resultMap
    將整個查詢的結果映射到cn.itcast.mybatis.po.Orders中
     -->
    <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
        <!-- 配置映射的訂單信息 -->
        <!-- id:指定查詢列中的唯 一標識,訂單信息的中的唯 一標識,如果有多個列組成唯一標識,配置多個id
            column:訂單信息的唯 一標識 列
            property:訂單信息的唯 一標識 列所映射到Orders中哪個屬性
          -->
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>

        <!-- 配置映射的關聯的用戶信息 -->
        <!-- association:用於映射關聯查詢單個對象的信息
        property:要將關聯查詢的用戶信息映射到Orders中哪個屬性
         -->
        <association property="user"  javaType="cn.itcast.mybatis.po.User">
            <!-- id:關聯查詢用戶的唯 一標識
            column:指定唯 一標識用戶信息的列
            javaType:映射到user的哪個屬性
             -->
            <id column="user_id" property="id"/>
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
            <result column="address" property="address"/>

        </association>
    </resultMap>

    <!-- 訂單及訂單明細的resultMap
    使用extends繼承,不用在中配置訂單信息和用戶信息的映射
     -->
    <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
        <!-- 訂單信息 -->
        <!-- 用戶信息 -->
        <!-- 使用extends繼承,不用在中配置訂單信息和用戶信息的映射 -->


        <!-- 訂單明細信息
        一個訂單關聯查詢出了多條明細,要使用collection進行映射
        collection:對關聯查詢到多條記錄映射到集合對象中
        property:將關聯查詢到多條記錄映射到cn.itcast.mybatis.po.Orders哪個屬性
        ofType:指定映射到list集合屬性中pojo的類型
         -->
         <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
            <!-- id:訂單明細唯 一標識
            property:要將訂單明細的唯 一標識 映射到cn.itcast.mybatis.po.Orderdetail的哪個屬性
              -->
            <id column="orderdetail_id" property="id"/>
            <result column="items_id" property="itemsId"/>
            <result column="items_num" property="itemsNum"/>
            <result column="orders_id" property="ordersId"/>
         </collection>


    </resultMap>


<!-- 查詢訂單關聯查詢用戶及訂單明細,使用resultmap -->
    <select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
        SELECT 
          orders.*,
          USER.username,
          USER.sex,
          USER.address,
          orderdetail.id orderdetail_id,
          orderdetail.items_id,
          orderdetail.items_num,
          orderdetail.orders_id
        FROM
          orders,
          USER,
          orderdetail
        WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
    </select>

</mapper>

OrdersMapperCustom.java

public interface OrdersMapperCustom {
    public List<Orders>  findOrdersAndOrderDetailResultMap()throws Exception;

}

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=mysql

log4j.properties

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 加載屬性文件 -->
    <properties resource="db.properties">
        <!--properties中還可以配置一些屬性名和屬性值  -->
        <!-- <property name="jdbc.driver" value=""/> -->
    </properties>
    <!-- 全局配置參數,需要時再設置 -->
    <settings>
        <!-- 打開延遲加載 的開關 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 將積極加載改爲消極加載即按需要加載 -->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!-- 開啓二級緩存 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!-- 別名定義 -->
    <typeAliases>

        <!-- 針對單個別名定義
        type:類型的路徑
        alias:別名
         -->
        <!-- <typeAlias type="cn.sjtu.mybatis.po.User" alias="user"/> -->
        <!-- 批量別名定義 
        指定包名,mybatis自動掃描包中的po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)
        -->
        <package name="cn.sjtu.mybatis.po"/>

    </typeAliases>

    <!-- 和spring整合後 environments配置將廢除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事務管理,事務控制由mybatis-->
            <transactionManager type="JDBC" />
        <!-- 數據庫連接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加載 映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>

        <!--通過resource方法一次加載一個映射文件 -->
        <!-- <mapper resource="mapper/UserMapper.xml"/> -->

        <!-- 通過mapper接口加載單個 映射文件
        遵循一些規範:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄 中
        上邊規範的前提是:使用的是mapper代理方法
         -->
        <!-- <mapper class="cn.sjtu.mybatis.mapper.UserMapper"/> -->

        <!-- 批量加載mapper
        指定mapper接口的包名,mybatis自動掃描包下邊所有mapper接口進行加載
        遵循一些規範:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄 中
        上邊規範的前提是:使用的是mapper代理方法
         -->
        <package name="cn.sjtu.mybatis.mapper"/>

    </mappers>

</configuration>
發佈了227 篇原創文章 · 獲贊 24 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章