我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis_day05中怎么实现关联查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis_day05中怎么实现关联查询

本篇文章给大家分享的是有关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中怎么实现关联查询,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis_day05中怎么实现关联查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mybatis Plus关联查询怎么实现

本篇内容介绍了“Mybatis Plus关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mybatis-Plus 简介什么是
2023-06-22

oracle跨库关联查询怎么实现

在Oracle中,可以使用以下几种方法实现跨库关联查询:使用数据库链接(Database Link):首先在目标数据库中创建一个数据库链接,然后使用该链接在当前数据库中执行查询。例如,假设有两个数据库A和B,需要在数据库A中查询数据库B中的
oracle跨库关联查询怎么实现
2024-04-09

Hibernate多表关联查询怎么实现

本篇内容介绍了“Hibernate多表关联查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Hibernate简介Hiberna
2023-06-17

怎么在mybatis中实现多对一关联查询

怎么在mybatis中实现多对一关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一种关联方式1.修改实体类Student,追加关联属性,用于封装关联的数据修改完以后
2023-06-15

如何实现JPQL的关联查询

小编给大家分享一下如何实现JPQL的关联查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一关联到多的查询和从多关联到一的查询来简单说说关联查询。实体Team:
2023-06-17

MySQL中的聚合查询和联合查询怎么实现

这篇文章主要介绍“MySQL中的聚合查询和联合查询怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中的聚合查询和联合查询怎么实现”文章能帮助大家解决问题。一、聚合查询(行与行之间的计
2023-07-05

Mybatis联合查询怎么实现

本篇内容主要讲解“Mybatis联合查询怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis联合查询怎么实现”吧!数据库表结构departmentemployee要求一现在的要求
2023-06-26

sql三表关联查询怎么查

sql 三表关联查询涉及以下步骤:选择表连接类型(inner join、left join、right join、full join)使用 on 关键字指定关联条件(左表字段 = 右表字段)使用以下语法执行查询:select from
sql三表关联查询怎么查
2024-06-04

iterate在关联查询中的实践

在关联查询中,iterate通常不是一个内置的关键字或函数,但你可能是在谈论如何在编程语言或数据库查询中使用迭代来处理关联数据。不同的编程语言和数据库系统可能有不同的方法来实现这一点。在SQL数据库中,关联查询通常是通过JOIN操作来实现
iterate在关联查询中的实践
2024-09-18

MyBatis怎么实现自定义映射关系和关联查询

本篇内容介绍了“MyBatis怎么实现自定义映射关系和关联查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、使用注解实现自定义映射关系当
2023-07-06

Mybatis怎么实现一对一、一对多关联查询

今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati
2023-07-05

mysql dblink跨库关联查询的实现

目录1、解决方案2、操作3、缺点1、解决方案mysql是不支持跨库连接的,如果我们实在要连接的话可以用dblink方式。解释:dblink就是我们在创建表的时候连接到我们的远程库,然后我们本地新建的表数据就是映射远程的表的数据。当我们创
2023-02-27

oracle多表关联查询如何实现

在Oracle数据库中,可以使用SQL语句实现多表关联查询。以下是一个示例:假设有两个表:表A和表B,它们有一个共同的字段ID可以用来关联。SELECT *FROM tableA aJOIN tableB bON a.ID = b
oracle多表关联查询如何实现
2024-04-09

sql三表关联怎么查询

三表关联是一种 sql 查询技术,通过指定连接条件将三个或更多表连接起来获取信息。主要有三种关联类型:内连接,左外连接和右外连接。使用 join 语句进行三表关联,指定连接表之间的列相等作为连接条件。SQL 三表关联查询什么是三表关联?
sql三表关联怎么查询
2024-05-30

编程热搜

目录