中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis_day05中怎么實現關聯查詢

發布時間:2021-08-13 15:15:20 來源:億速云 閱讀:152 作者:Leah 欄目:數據庫

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

 關聯查詢

一對一查詢

案例:查詢所有訂單信息,關聯查詢下單用戶信息。

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

方法一:

使用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查詢結果集所有的字段。此方法較為簡單,企業中使用普遍。

方法二:

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

Sql語句:

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

定義po類

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

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

<!-- 查詢訂單關聯用戶信息使用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"/> <!-- 一對一關聯映射 --> <!-- 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:表示進行關聯查詢單條記錄  property:表示關聯查詢的結果存儲在com.pp.mybatis.po.Orders的user屬性中  javaType:表示關聯查詢的結果類型  <id property="id"  column="user_id"/>:查詢結果的user_id列對應關聯對象的id屬性,這里是<id  />表示user_id是關聯查詢對象的唯一標識。  <result property="username"  column="username"/>:查詢結果的username列對應關聯對象的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完成關聯查詢,將關聯查詢信息映射到pojo對象中。

一對多查詢

案例:查詢所有用戶信息及用戶關聯的訂單信息。

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

使用resultMap實現如下:

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"/>  <!-- 一對多關聯映射 -->  <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部分定義了用戶關聯的訂單信息。表示關聯查詢結果集

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

ofType="orders":指定關聯查詢的結果集中的對象類型即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中怎么實現關聯查詢,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正镶白旗| 旅游| 墨玉县| 郁南县| 南木林县| 丰原市| 桃园市| 白水县| 焉耆| 扎鲁特旗| 乌拉特中旗| 武义县| 房产| 五河县| 宕昌县| 镇康县| 扎鲁特旗| 河北省| 泸溪县| 长白| 东平县| 望谟县| 化隆| 澄江县| 长治县| 始兴县| 西充县| 马尔康县| 河西区| 水城县| 三门峡市| 浏阳市| 成武县| 佳木斯市| 霍州市| 且末县| 三原县| 宜兴市| 马公市| 弋阳县| 新平|