Mybatis學習筆記(七)--關聯查詢,一對一,一對多
阿新 • • 發佈:2019-01-08
關聯查詢
改造User實體類
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address;
//一對多
private List<Orders> ordersList;
。。。省略了get/set
}
改造Orders實體類
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
//一對一
private User user;
...省略了get/set
}
一對一
編寫Mapper.xml
<!-- 一對一對映 這裡的一對一要使用的不是基本型別,這裡需要手動對映型別,這裡使用的是resultMaps type 是要對映的型別 也就是這裡的orders這個類 id 就是select中的resultMap的對應的值 --> <resultMap type="Orders" id="order"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <!-- 一對一的使用標籤 property是orders中的User宣告的那個名字 private User user; javaType是user對應的java型別 --> <association property="user" javaType="User"> <!-- id:宣告主鍵,表示user_id是關聯查詢物件的唯一標識 --> <id column="user_id" property="id"/> <result column="username" property="username"/> </association> </resultMap> <select id="getOrdersList" resultMap="order"> select o.id,o.user_id,o.number,o.createtime,o.note,u.username from orders o left join user u on o.user_id = u.id; </select>
編寫mapper介面
測試程式碼
//一對一
@Test
public void testGetOrdersList() throws Exception {
String res = "SqlMapConfig.xml";
InputStream inputSteam = Resources.getResourceAsStream(res);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam);
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
List<Orders> ordersList = mapper.getOrdersList();
for (Orders orders : ordersList) {
System.out.println(orders);
System.out.println(orders.getUser());
}
}
測試結果
一對多
編寫mapper介面
編寫mapper.xml
<!--
一對多的對映
-->
<resultMap type="User" id="user">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
<!--
一對多對映
property 這裡是User類中的List的宣告 ofType這裡是List中的泛型類
-->
<collection property="ordersList" ofType="orders">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="user_id" property="userId"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
</collection>
</resultMap>
<select id="getUserList" resultMap="user">
select
o.id,o.user_id,o.number,o.createtime,o.note,
u.username,u.birthday,u.sex,u.address
from user u left join orders o on o.user_id = u.id;
</select>
測試方法
//一對多
@Test
public void testGetUserList() throws Exception {
String res = "SqlMapConfig.xml";
InputStream inputSteam = Resources.getResourceAsStream(res);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputSteam);
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
if(user.getOrdersList().size()>0) {
for (Orders o : user.getOrdersList()) {
System.out.println(o);
}
}
}
}
測試結果