自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Mybatis_day05:關(guān)聯(lián)查詢

運維 數(shù)據(jù)庫運維
本篇給大家介紹Mybatis_day05:關(guān)聯(lián)查詢。

 關(guān)聯(lián)查詢

一對一查詢

案例:查詢所有訂單信息,關(guān)聯(lián)查詢下單用戶信息。

注意:因為一個訂單信息只會是一個人下的訂單,所以從查詢訂單信息出發(fā)關(guān)聯(lián)查詢用戶信息為一對一查詢。如果從用戶信息出發(fā)查詢用戶下的訂單信息則為一對多查詢,因為一個用戶可以下多個訂單。

方法一:

使用resultType,定義訂單信息po類,此po類中包括了訂單信息和用戶信息:

Sql語句:

  1. SELECT 
  2.  
  3. orders.*, 
  4.  
  5. user.username, 
  6.  
  7. userss.address 
  8.  
  9. FROM 
  10.  
  11. orders, 
  12.  
  13. user 
  14.  
  15. WHERE orders.user_id = user.id 

定義po類

 

Po類中應(yīng)該包括上邊sql查詢出來的所有字段,如下:

  1. public class OrdersCustom extends Orders { 
  2.  
  3. private String username;// 用戶名稱 
  4.  
  5. private String address;// 用戶地址 
  6.  
  7. get/set。。。。 
  8.  
  9. OrdersCustom類繼承Orders類后OrdersCustom類包括了Orders類的所有字段,只需要定義用戶的信息字段即可。 

Mapper.xml

  1. <!-- 查詢所有訂單信息 --> 
  2.  
  3. <select id="findOrdersList" resultType="com.pp.mybatis.po.OrdersCustom"
  4.  
  5. SELECT 
  6.  
  7. orders.*, 
  8.  
  9. user.username, 
  10.  
  11. user.address 
  12.  
  13. FROM 
  14.  
  15. orders, user 
  16.  
  17. WHERE orders.user_id = user.id 
  18.  
  19. </select

Mapper接口:

  1. public List<OrdersCustom> findOrdersList() throws Exception; 
  2.  
  3. 測試: 
  4.  
  5. Public void testfindOrdersList()throws Exception{ 
  6.  
  7. //獲取session 
  8.  
  9. SqlSession session = sqlSessionFactory.openSession(); 
  10.  
  11. //獲限mapper接口實例 
  12.  
  13. UserMapper userMapper = session.getMapper(UserMapper.class); 
  14.  
  15. //查詢訂單信息 
  16.  
  17. List<OrdersCustom> list = userMapper.findOrdersList(); 
  18.  
  19. System.out.println(list); 
  20.  
  21. //關(guān)閉session 
  22.  
  23. session.close(); 
  24.  

小結(jié):

定義專門的po類作為輸出類型,其中定義了sql查詢結(jié)果集所有的字段。此方法較為簡單,企業(yè)中使用普遍。

方法二:

使用resultMap,定義專門的resultMap用于映射一對一查詢結(jié)果。

 

Sql語句:

  1. SELECT 
  2.  
  3. orders.*, 
  4.  
  5. user.username, 
  6.  
  7. user.address 
  8.  
  9. FROM 
  10.  
  11. orders, 
  12.  
  13. user 
  14.  
  15. WHERE orders.user_id = user.id 

定義po類

 

在Orders類中加入User屬性,user屬性中用于存儲關(guān)聯(lián)查詢的用戶信息,因為訂單關(guān)聯(lián)查詢用戶是一對一關(guān)系,所以這里使用單個User對象存儲關(guān)聯(lián)查詢的用戶信息。

  1. public class Orders { 
  2.  
  3. private Integer id; 
  4.  
  5. private Integer userId; 
  6.  
  7. private String number; 
  8.  
  9. private Date createtime; 
  10.  
  11. private String note; 
  12.  
  13. private User user
  14.  
  15. public Integer getId() { 
  16.  
  17. return id; 
  18.  
  19.  
  20. public void setId(Integer id) { 
  21.  
  22. this.id = id; 
  23.  
  24.  
  25. public Integer getUserId() { 
  26.  
  27. return userId; 
  28.  
  29.  
  30. public void setUserId(Integer userId) { 
  31.  
  32. this.userId = userId; 
  33.  
  34.  
  35. public String getNumber() { 
  36.  
  37. return number; 
  38.  
  39.  
  40. public void setNumber(String number) { 
  41.  
  42. this.number = number; 
  43.  
  44.  
  45. public Date getCreatetime() { 
  46.  
  47. return createtime; 
  48.  
  49.  
  50. public void setCreatetime(Date createtime) { 
  51.  
  52. this.createtime = createtime; 
  53.  
  54.  
  55. public String getNote() { 
  56.  
  57. return note; 
  58.  
  59.  
  60. public void setNote(String note) { 
  61.  
  62. this.note = note; 
  63.  
  64.  
  65. public User getUser() { 
  66.  
  67. return user
  68.  
  69.  
  70. public void setUser(User user) { 
  71.  
  72. this.user = user
  73.  
  74.  
  75. @Override 
  76.  
  77. public String toString() { 
  78.  
  79. return "Orders{" + 
  80.  
  81. "id=" + id + 
  82.  
  83. ", userId=" + userId + 
  84.  
  85. ", number='" + number + '\'' + 
  86.  
  87. ", createtime=" + createtime + 
  88.  
  89. ", note='" + note + '\'' + 
  90.  
  91. ", user=" + user + 
  92.  
  93. '}'
  94.  
  95.  

Mapper.xml

  1. <!-- 查詢訂單關(guān)聯(lián)用戶信息使用resultmap --> 
  2.  
  3. <resultMap type="com.pp.po.Orders" id="orderUserResultMap"
  4.  
  5. <id column="id" property="id"/> 
  6.  
  7. <result column="user_id" property="userId"/> 
  8.  
  9. <result column="number" property="number"/> 
  10.  
  11. <result column="createtime" property="createtime"/> 
  12.  
  13. <result column="note" property="note"/> 
  14. <!-- 一對一關(guān)聯(lián)映射 --> 
  15. <!-- 
  16. property:Orders對象的user屬性 
  17.  
  18. javaType:user屬性對應(yīng) 的類型 
  19.  
  20. --> 
  21.  
  22. <association property="user" javaType="com.pp.po.User"
  23.  
  24. <!-- column:user表的主鍵對應(yīng)的列 property:user對象中id屬性--> 
  25.  
  26. <id column="user_id" property="id"/> 
  27.  
  28. <result column="username" property="username"/> 
  29.  
  30. <result column="address" property="address"/> 
  31.  
  32. </association> 
  33.  
  34. </resultMap> 
  35.  
  36. <select id="findOrdersWithUserResultMap" resultMap="orderUserResultMap"
  37.  
  38. SELECT 
  39.  
  40. o.id, 
  41.  
  42. o.user_id, 
  43.  
  44. o.number, 
  45.  
  46. o.createtime, 
  47.  
  48. o.note, 
  49.  
  50. u.username, 
  51.  
  52. u.address 
  53.  
  54. FROM 
  55.  
  56. orders o 
  57.  
  58. JOIN `user` u ON u.id = o.user_id 
  59.  
  60. </select
  61.  
  62. 這里resultMap指定orderUserResultMap。 
  63.  
  64. association:表示進行關(guān)聯(lián)查詢單條記錄 
  65.  
  66. property:表示關(guān)聯(lián)查詢的結(jié)果存儲在com.pp.mybatis.po.Orders的user屬性中 
  67.  
  68. javaType:表示關(guān)聯(lián)查詢的結(jié)果類型 
  69.  
  70. <id property="id" 
  71.  
  72. column="user_id"/>:查詢結(jié)果的user_id列對應(yīng)關(guān)聯(lián)對象的id屬性,這里是<id 
  73.  
  74. />表示user_id是關(guān)聯(lián)查詢對象的唯一標(biāo)識。 
  75.  
  76. <result property="username" 
  77.  
  78. column="username"/>:查詢結(jié)果的username列對應(yīng)關(guān)聯(lián)對象的username屬性。 

Mapper接口:

  1. public List<Orders> findOrdersListResultMap() throws Exception; 
  2.  
  3. 測試: 
  4.  
  5. Public void testfindOrdersListResultMap()throws Exception{ 
  6.  
  7. //獲取session 
  8.  
  9. SqlSession session = sqlSessionFactory.openSession(); 
  10.  
  11. //獲限mapper接口實例 
  12.  
  13. UserMapper userMapper = session.getMapper(UserMapper.class); 
  14.  
  15. //查詢訂單信息 
  16.  
  17. List<Orders> list = userMapper.findOrdersList2(); 
  18.  
  19. System.out.println(list); 
  20.  
  21. //關(guān)閉session 
  22.  
  23. session.close(); 
  24.  

小結(jié):

使用association完成關(guān)聯(lián)查詢,將關(guān)聯(lián)查詢信息映射到pojo對象中。

一對多查詢

案例:查詢所有用戶信息及用戶關(guān)聯(lián)的訂單信息。

用戶信息和訂單信息為一對多關(guān)系。

使用resultMap實現(xiàn)如下:

 

Sql語句:

  1. SELECT 
  2.  
  3. u.*, o.id oid, 
  4.  
  5. o.number, 
  6.  
  7. o.createtime, 
  8.  
  9. o.note 
  10.  
  11. FROM 
  12.  
  13. `user` u 
  14.  
  15. LEFT JOIN orders o ON u.id = o.user_id 

定義po類

 

在User類中加入List orders屬性

  1. public class User { 
  2.  
  3. private int id; 
  4.  
  5. private String username; 
  6.  
  7. private String sex; 
  8.  
  9. private Date birthday; 
  10.  
  11. private String address; 
  12.  
  13. private List<Orders> ordersList; 
  14.  
  15. @Override 
  16. public String toString() { 
  17. return "User{" + 
  18. "id=" + id + 
  19. ", username='" + username + '\'' + 
  20. ", sex='" + sex + '\'' + 
  21. ", birthday=" + birthday + 
  22.  
  23. ", address='" + address + '\'' + 
  24.  
  25. ", ordersList=" + ordersList + 
  26.  
  27. '}'
  28.  
  29.  
  30. public List<Orders> getOrdersList() { 
  31.  
  32. return ordersList; 
  33.  
  34.  
  35. public void setOrdersList(List<Orders> ordersList) { 
  36.  
  37. this.ordersList = ordersList; 
  38.  
  39.  
  40. public int getId() { 
  41.  
  42. return id; 
  43.  
  44.  
  45. public void setId(int id) { 
  46.  
  47. this.id = id; 
  48.  
  49.  
  50. public String getUsername() { 
  51.  
  52. return username; 
  53.  
  54.  
  55. public void setUsername(String username) { 
  56.  
  57. this.username = username; 
  58.  
  59.  
  60. public String getSex() { 
  61.  
  62. return sex; 
  63.  
  64.  
  65. public void setSex(String sex) { 
  66.  
  67. this.sex = sex; 
  68.  
  69.  
  70. public Date getBirthday() { 
  71.  
  72. return birthday; 
  73.  
  74.  
  75. public void setBirthday(Date birthday) { 
  76.  
  77. this.birthday = birthday; 
  78.  
  79.  
  80. public String getAddress() { 
  81.  
  82. return address; 
  83.  
  84.  
  85. public void setAddress(String address) { 
  86.  
  87. this.address = address; 
  88.  
  89.  

Mapper.xml

  1. <resultMap type="com.pp.po.user" id="userOrderResultMap"
  2.  
  3. <!-- 用戶信息映射 --> 
  4.  
  5. <id property="id" column="id"/> 
  6.  
  7. <result property="username" column="username"/> 
  8.  
  9. <result property="birthday" column="birthday"/> 
  10.  
  11. <result property="sex" column="sex"/> 
  12.  
  13. <result property="address" column="address"/> 
  14.  
  15. <!-- 一對多關(guān)聯(lián)映射 --> 
  16.  
  17. <collection property="orders" ofType="com.pp.po.Orders"
  18.  
  19. <id property="id" column="oid"/> 
  20.  
  21. <!--用戶id已經(jīng)在user對象中存在,此處可以不設(shè)置--> 
  22.  
  23. <!-- <result property="userId" column="id"/> --> 
  24.  
  25. <result property="number" column="number"/> 
  26.  
  27. <result property="createtime" column="createtime"/> 
  28.  
  29. <result property="note" column="note"/> 
  30.  
  31. </collection> 
  32.  
  33. </resultMap> 
  34.  
  35. <select id="getUserOrderList" resultMap="userOrderResultMap"
  36.  
  37. SELECT 
  38.  
  39. u.*, o.id oid, 
  40.  
  41. o.number, 
  42.  
  43. o.createtime, 
  44.  
  45. o.note 
  46.  
  47. FROM 
  48.  
  49. `user` u 
  50.  
  51. LEFT JOIN orders o ON u.id = o.user_id 
  52.  
  53. </select

collection部分定義了用戶關(guān)聯(lián)的訂單信息。表示關(guān)聯(lián)查詢結(jié)果集

property="orders":關(guān)聯(lián)查詢的結(jié)果集存儲在User對象的上哪個屬性。

ofType="orders":指定關(guān)聯(lián)查詢的結(jié)果集中的對象類型即List中的對象類型。此處可以使用別名,也可以使用全限定名。

的意義同一對一查詢。

 

Mapper接口:

  1. List<User> getUserOrderList(); 

測試

  1. @Test 
  2.  
  3. public void getUserOrderList() { 
  4.  
  5. SqlSession session = sqlSessionFactory.openSession(); 
  6.  
  7. UserMapper userMapper = session.getMapper(UserMapper.class); 
  8.  
  9. List<User> result = userMapper.getUserOrderList(); 
  10.  
  11. for (User user : result) { 
  12.  
  13. System.out.println(user); 
  14.  
  15.  
  16. session.close(); 
  17.  

 

責(zé)任編輯:姜華 來源: 鍵盤蜂
相關(guān)推薦

2017-07-25 15:35:07

MysqlMysql優(yōu)化LIMIT分頁

2009-09-25 10:22:35

Hibernate多表

2012-06-05 02:20:24

JPAJava查詢語言

2010-06-03 09:24:46

Oracle

2021-10-12 05:00:27

PandasSQL查詢

2021-09-02 18:36:35

SQLWhereOn

2020-11-09 10:16:41

Mybatis

2015-03-18 13:18:45

MySQLSQL優(yōu)化

2022-05-11 09:34:15

云原生集群數(shù)倉

2009-09-23 09:16:25

Hibernate復(fù)合

2022-07-05 10:50:31

數(shù)據(jù)庫查詢實戰(zhàn)

2020-11-04 08:28:11

Mybatis

2023-02-24 08:19:59

MySQL索引失效

2011-07-20 10:01:22

SQL Server數(shù)關(guān)聯(lián)表

2021-04-23 09:09:19

GraphQLREST查詢

2009-11-24 19:40:07

PHP關(guān)聯(lián)數(shù)組查詢結(jié)果

2021-05-11 11:05:43

SAL子查詢

2023-04-12 08:14:10

mysql關(guān)聯(lián)字段索引

2022-11-11 07:48:56

ORM鏈?zhǔn)?/a>輪播圖

2021-11-08 15:59:01

MyBatis關(guān)聯(lián)開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號