久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Mybatis

140次閱讀
沒有評論

共計 6396 個字符,預計需要花費 16 分鐘才能閱讀完成。

本篇文章給大家分享的是有關 Mybatis_day05 中怎么實現(xiàn)關聯(lián)查詢,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

  關聯(lián)查詢

一對一查詢

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

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

方法一:

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

Sql 語句:

SELECT orders.*, user.username, userss.address FROM orders, user WHERE orders.user_id = user.id

定義 po 類

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

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

Mapper.xml

!--  查詢所有訂單信息  --   select id= findOrdersList  resultType= com.pp.mybatis.po.OrdersCustom  SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id = user.id  /select

Mapper 接口:

public List OrdersCustom  findOrdersList() throws Exception;  測試: Public void testfindOrdersList()throws Exception{ // 獲取 session SqlSession session = sqlSessionFactory.openSession(); // 獲限 mapper 接口實例  UserMapper userMapper = session.getMapper(UserMapper.class); // 查詢訂單信息  List OrdersCustom  list = userMapper.findOrdersList(); System.out.println(list); // 關閉 session session.close(); }

小結:

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

方法二:

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

Sql 語句:

SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id = user.id

定義 po 類

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

public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; private User user; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return  Orders{  +  id=  + id +  , userId=  + userId +  , number=  + number +  \  +  , createtime=  + createtime +  , note=  + note +  \  +  , user=  + user + }  } }

Mapper.xml

!--  查詢訂單關聯(lián)用戶信息使用 resultmap --   resultMap type= com.pp.po.Orders  id= orderUserResultMap   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 /   !--  一對一關聯(lián)映射  --   !-- property:Orders 對象的 user 屬性  javaType:user 屬性對應   的類型  --   association property= user  javaType= com.pp.po.User   !-- column:user 表的主鍵對應的列  property:user 對象中 id 屬性 --   id column= user_id  property= id /   result column= username  property= username /   result column= address  property= address /   /association   /resultMap   select id= findOrdersWithUserResultMap  resultMap= orderUserResultMap  SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM orders o JOIN `user` u ON u.id = o.user_id  /select   這里 resultMap 指定 orderUserResultMap。 association:表示進行關聯(lián)查詢單條記錄  property:表示關聯(lián)查詢的結果存儲在 com.pp.mybatis.po.Orders 的 user 屬性中  javaType:表示關聯(lián)查詢的結果類型   id property= id  column= user_id /:查詢結果的 user_id 列對應關聯(lián)對象的 id 屬性,這里是 id / 表示 user_id 是關聯(lián)查詢對象的唯一標識。  result property= username  column= username /:查詢結果的 username 列對應關聯(lián)對象的 username 屬性。

Mapper 接口:

public List Orders  findOrdersListResultMap() throws Exception;  測試: Public void testfindOrdersListResultMap()throws Exception{ // 獲取 session SqlSession session = sqlSessionFactory.openSession(); // 獲限 mapper 接口實例  UserMapper userMapper = session.getMapper(UserMapper.class); // 查詢訂單信息  List Orders  list = userMapper.findOrdersList2(); System.out.println(list); // 關閉 session session.close(); }

小結:

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

一對多查詢

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

用戶信息和訂單信息為一對多關系。

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

Sql 語句:

SELECT u.*, o.id oid, o.number, o.createtime, o.note FROM `user` u LEFT JOIN orders o ON u.id = o.user_id

定義 po 類

在 User 類中加入 Listorders 屬性

public class User { private int id; private String username; private String sex; private Date birthday; private String address; private List Orders  ordersList; @Override public String toString() { return  User{  +  id=  + id +  , username=  + username +  \  +  , sex=  + sex +  \  +  , birthday=  + birthday +  , address=  + address +  \  +  , ordersList=  + ordersList + }  } public List Orders  getOrdersList() { return ordersList; } public void setOrdersList(List Orders  ordersList) { this.ordersList = ordersList; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }

Mapper.xml

 resultMap type= com.pp.po.user  id= userOrderResultMap   !--  用戶信息映射  --   id property= id  column= id /   result property= username  column= username /   result property= birthday  column= birthday /   result property= sex  column= sex /   result property= address  column= address /   !--  一對多關聯(lián)映射  --   collection property= orders  ofType= com.pp.po.Orders   id property= id  column= oid /   !-- 用戶 id 已經在 user 對象中存在,此處可以不設置 --   !--  result property= userId  column= id /  --   result property= number  column= number /   result property= createtime  column= createtime /   result property= note  column= note /   /collection   /resultMap   select id= getUserOrderList  resultMap= userOrderResultMap  SELECT u.*, o.id oid, o.number, o.createtime, o.note FROM `user` u LEFT JOIN orders o ON u.id = o.user_id  /select 

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

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

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

及的意義同一對一查詢。

Mapper 接口:

List User  getUserOrderList();

測試

@Test public void getUserOrderList() { SqlSession session = sqlSessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); List User  result = userMapper.getUserOrderList(); for (User user : result) { System.out.println(user); } session.close(); }

以上就是 Mybatis_day05 中怎么實現(xiàn)關聯(lián)查詢,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-01發(fā)表,共計6396字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 诸暨市| 旅游| 仁化县| 屯留县| 汽车| 周口市| 临漳县| 漳浦县| 托里县| 肃南| 丹阳市| 长治县| 林周县| 宜君县| 罗平县| 唐河县| 上饶市| 家居| 凤山县| 建德市| 兴海县| 莒南县| 肇州县| 纳雍县| 来凤县| 泽普县| 建阳市| 渝北区| 凉山| 东山县| 永安市| 泗水县| 寻乌县| 莒南县| 宁化县| 文水县| 长治市| 武威市| 黔西县| 海口市| 扎赉特旗|