模組一-第5部分-Mybatis複雜對映開發
阿新 • • 發佈:2020-10-18
【1】一對一查詢
一、一對一查詢模型
例:使用者和訂單之間的關係,查詢一個訂單所屬的一個使用者
二、一對一查詢語句
select * from orders o,user u where o.uid=u.id;
三、建立實體類
/*
* Order類
*/
public class Order {
private int id;
private String orderinfo;
// 訂單所屬的使用者
private User user;
}
/* * User類 */ public class User { private int id; private String name; }
四、建立Mapper介面
public interface OrderMapper {
List<Order> findAll();
}
五、配置xml檔案(OrderMapper.xml)
<mapper namespace="com.Zhou.mapper.OrderMapper"> <!--容器封裝對映--> <resultMap id="orderMap" type="com.Zhou.Pojo.Order"> <result column="uid" property="user.id"></result> <result column="name" property="user.name"></result> </resultMap> <!--SQL語句查詢--> <select id="findAll" resultMap="orderMap"> select * from orders o,user u where o.uid=u.id </select> </mapper>
其中還可以配置如下:
<mapper namespace="com.Zhou.mapper.OrderMapper"> <!--容器封裝對映--> <resultMap id="orderMap" type="com.Zhou.Pojo.Order"> <result property="id" column="id"></result> <result property="orderinfo" column="orderinfo"></result> <association property="user" javaType="com.Zhou.Pojo.User"> <result column="uid" property="id"></result> <result column="name" property="name"></result> </association> </resultMap> <!--SQL語句查詢--> <select id="findAll" resultMap="orderMap"> select * from orders o,user u where o.uid=u.id </select> </mapper>
六、測試結果
/**
* 查詢一個訂單對應的一個使用者
*/
@Test
public void findOrders(){
OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
List<Order> all = mapper.findAll();
for (Order order :
all) {
System.out.println(order);
}
}
【2】一對多查詢
一、一對多查詢模型
例:使用者和訂單之間的關係,查詢一個使用者的所有訂單
二、一對多查詢語句
select *,o.id oid from user u left join orders o on u.id=o.uid;
三、修改User實體
/*
* Order類
*/
public class Order {
private int id;
private Date ordertime;
private double total;
//代表當前訂單從屬於哪一個客戶
private User user;
}
/*
* User類
*/
public class User {
private int id;
private String name;
// 當前使用者擁有的所有訂單
private List<Order> orders;
}
四、建立Mapper介面
public interface UserMapper {
List<Order> findAll();
}
五、配置xml檔案(UserMapper.xml)
<mapper namespace="com.Zhou.mapper.UserMapper">
<resultMap id="userMap" type="com.Zhou.Pojo.User">
<result column="id" property="id"></result>
<result column="name" property="name"></result>
<collection property="orders" ofType="com.Zhou.Pojo.Order">
<result column="oid" property="id"></result>
<result column="orderinfo" property="orderInfo"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
select *,o.id oid from user u left join orders o on u.id=o.uid;
</select>
</mapper>
六、測試結果
@Test
public void findAll(){
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all = mapper.findAll();
for (User user :
all) {
System.out.println(user);
}
sqlSession.close();
}
【3】多對多查詢
一、多對多查詢模型
例:使用者和角色的關係,查詢使用者的同時查詢該使用者的所有角色。
二、多對多查詢語句
select u.*,r.*,r.id rid from user u left join user_role ur on u.id=ur.user_id inner join role r on ur.role_id=r.id;
三、建立Role實體、修改User實體
/*
* User類
*/
public class User {
private int id;
private String name;
private List<Order> orders;
private List<Role> roles;
}
/*
* Role類
*/
public class Role {
private int id;
private String roleName;
}
四、新增UserMapper介面方法
public interface UserMapper {
List<User> findAll();
// 新增查詢所有使用者的對應的角色的介面方法
List<User> findAllUserAndRole();
}
五、配置UserMapper.xml檔案
<resultMap id="userRoleMap" type="com.Zhou.Pojo.User">
<result column="id" property="id"></result>
<result column="name" property="name"></result>
<collection property="roles" ofType="com.Zhou.Pojo.Role">
<result column="rid" property="id"></result>
<result column="roleName" property="roleName"></result>
</collection>
</resultMap>
<select id="findAllUserAndRole" resultMap="userRoleMap">
select u.*,r.*,r.id rid
from user u
left join user_role ur on u.id=ur.user_id
inner join role r on ur.role_id=r.id;
</select>
六、測試結果
@Test
public void findAllUserAndRole(){
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> allUserAndRole = mapper.findAllUserAndRole();
for (User user :
allUserAndRole) {
System.out.println(user);
}
sqlSession.close();
}
【4】個人理解
通過xml檔案配置進行對映開發的完整步驟:
- 【MySQL】根據需求建立對應的表;
- 【MySQL】寫好對應的查詢語句,並驗證結果;
- 【IDE】根據表建立(或修改)實體類;
- 【IDE】建立對應的介面方法;
- 【IDE】配置對應的xml檔案;
- 配置對映關係;
- 配置查詢語句。
- 【IDE】建立測試方法,測試結果。