SSM框架-MyBatis進階篇(二)
阿新 • • 發佈:2019-02-01
一、表關係:一對一查詢
建立實體類
訂單實體: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>
未完待續…