在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>