4.3Java EE——一对多查询

这篇具有很好参考价值的文章主要介绍了4.3Java EE——一对多查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用户与订单关联关系图​​​​​​​

        与一对一的关联关系相比,接触更多的关联关系是一对多(或多对一)。例如一个用户可以有多个订单,多个订单也可以归一个用户所有。用户和订单的关联关系如图。

4.3Java EE——一对多查询,数据库

一、<collection>元素

        在MyBatis中,通过<collection>元素来处理一对多关联关系。<collection>元素的属性大部分与<association>元素相同,但其还包含一个特殊属性一ofType。ofType属性与javaType属性对应,它用于指定实体类对象中集合类属性所包含的元素的类型。

<collection>元素的配置方式

         <collection>元素是<resultMap>元素的子元素,<collection >元素有嵌套查询和嵌套结果两种配置方式。 

a.嵌套查询方式

<collection property="ordersList" 

column="id" 

ofType="com.mac.pojo.Orders"

select=" com.mac.mapper.OrdersMapper.selectOrders"/>

b.嵌套结果方式

<collection property="ordersList"ofType="com.mac.pojo.Orders">

    <id property="id" column="orders_id" />

    <result property="number" column="number" />

</collection>

 二、接下来以用户和订单之间的一对多关联关系为例,详细讲解如何在MyBatis中处理一对多关联关系,具体步骤如下。

1、在名为mybatis的数据库中,创建两个数据表,分别为tb_user(用户数据表)和tb_orders(订单表),同时在表中预先插入几条测试数据。

USE mybatis;

# 创建一个名称为tb_user的表

CREATE TABLE tb_user (

  id int(32) PRIMARY KEY AUTO_INCREMENT,

  username varchar(32),

  address varchar(256) );

# 插入3条数据

INSERT INTO tb_user VALUES ('1', '小明', '北京');

INSERT INTO tb_user VALUES ('2', '李华', '上海');

INSERT INTO tb_user VALUES ('3', '李刚', '上海');
# 创建一个名称为tb_orders的表
CREATE TABLE tb_orders (

  id int(32) PRIMARY KEY AUTO_INCREMENT,

  number varchar(32) NOT NULL,

  user_id int(32) NOT NULL,

  FOREIGN KEY(user_id) references tb_user(id));
#插入3条数据

INSERT INTO tb_orders VALUES ('1', '1000011', '1');

INSERT INTO tb_orders VALUES ('2', '1000012', '1');

INSERT INTO tb_orders VALUES ('3', '1000013', '2');

 4.3Java EE——一对多查询,数据库

4.3Java EE——一对多查询,数据库  

2、创建持久化类Orders,并在类中定义订单id和订单编号等属性。

public class Orders {

    private Integer id;     //订单id

    private String number; //订单编号

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override

    public String toString() {

        return "Orders [id=" + id + ", number=" + number + "]";

    }

}

3、创建持久化类Users,并在类中定义用户编号、用户姓名、 用户地址以及用户关联的订单等属性。

public class Users {

    private Integer id;                         // 用户编号

    private String username;              // 用户姓名

    private String address;                 // 用户地址

    private List<Orders> ordersList;  // 用户关联的订单

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public List<Orders> getOrdersList() {
        return ordersList;
    }

    public void setOrdersList(List<Orders> ordersList) {
        this.ordersList = ordersList;
    }

    @Override

    public String toString() {

        return "User [id=" + id + ", username=" + username

                + ", address="+ address + ", ordersList=" + ordersList + "]"; }

}


4、创建用户实体映射文件UsersMapper.xml,并在文件中编写一对多关联映射查询的配置。 

<mapper namespace="com.mac.mapper.UsersMapper">

      <resultMap type="Users" id="UserWithOrdersResult">

      <!-- 只展示了部分标签内容,一对多关联映射 -->

<collection property="ordersList" ofType="Orders">

<id property="id" column="orders_id"/>

<result property="number" column="number"/>

</collection>

      </resultMap>

</mapper>

5、在核心配置文件mybatis-config.xml中,引入UsersMapper.xml,将UsersMapper.xml映射文件加载到程序中。 

<mapper resource="com/mac/mapper/UsersMapper.xml”/>

6、在测试类MyBatisTest中,编写测试方法findUserTest()。 文章来源地址https://www.toymoban.com/news/detail-545073.html

public void findUserTest() {

    // 1.通过工具类生成SqlSession对象

    SqlSession session = MyBatisUtils.getSession();

    // 2.查询id为1的用户信息

    Users users = session.selectOne("com.mac.mapper."

                            + "UsersMapper.findUserWithOrders", 1);

    // 3.输出查询结果信息

    System.out.println(users);

    // 4.关闭SqlSession

    session.close();

}

到了这里,关于4.3Java EE——一对多查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【java爬虫】将优惠券数据存入数据库排序查询

    本文是在之前两篇文章的基础上进行写作的 (1条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 (1条消息) 【java爬虫】使用selenium获取某宝联盟淘口令_haohulala的博客-CSDN博客  前两篇文章介绍了如何获取优惠券的基础信息,本文将获取到的基本信息存到数据库中

    2024年02月16日
    浏览(52)
  • java八股文面试[数据库]——慢查询优化

    分析慢查询日志 直接分析慢查询日志, mysql使用 explain + sql语句进行模拟优化器来执行分析。 oracle使用explain plan for + sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释: table 显示这一行的数据是关于哪张表的 type 这是重要的

    2024年02月10日
    浏览(38)
  • Java提升数据库大数据查询速度的几种方式

    本文章以MySQL数据库为用例说明,列举出几个常用的提升查询速度的方式。 分页查询,在网络浏览中,经常会看到分页的使用,像百度搜索分页、文档资料分页等,这些都是一种常见的提升数据查询速度和用户体验的一种方式,数据库有limit,开发人员可使用此

    2024年02月12日
    浏览(60)
  • java serverlets使用数据源连接oracle数据库,并执行查询操作代码

    package chap03; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.sql.Statement; import java.util.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Namin

    2024年02月08日
    浏览(55)
  • 【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性

    今天遇到了一个bug,大概就是数据库(Mysql)中有一个 type 类型字段,数据类型为json,大概是这样的:[“苹果”,“香蕉”,“葡萄”]的数据格式,这个bug的问题所在呢就是查询后这个json格式的数据无法映射到我们实体类的属性上,解决方案如下: 实体类的配置: @TableField

    2024年02月15日
    浏览(48)
  • 通过一个实际例子说明Django中的数据库操作方法OneToOneField()的用法【数据表“一对一”关系】

    当我们在Django中定义一个模型时,可以使用 OneToOneField 来建立一个一对一的关系。这种关系表示两个模型之间的一种特殊关联,其中一个模型的实例只能与另一个模型的实例关联。 让我们以一个简单的示例来说明 OneToOneField 的用法。假设我们正在构建一个简单的博客应用,其

    2024年02月13日
    浏览(57)
  • 通过一个实际例子说明Django中的数据库操作方法法ForeignKey()的用法【数据表“一对多”关系】

    当使用Django进行数据库操作时,ForeignKey(外键)是一种非常有用的字段类型。它允许在数据库表之间创建关联关系,类似于其他数据库系统中的外键概念。通过ForeignKey字段,我们可以建立一个模型与另一个模型的一对多关系。 以下是一个实际例子,使用ForeignKey字段在Djang

    2024年02月12日
    浏览(55)
  • Mybaits:数据库查询类型不匹配,java.sql.SQLDataException: Cannot determine value type from string

    目录 一.问题描述 二.源码分析 三.总结 事情的起因是用MybaitsPlus查询数据库过程中,查询结果与要封装的实体类字段类型对应不上,类似这样: 数据库查询结果: java实体类: 字段名字和实体类的名字类型都能对应上,但最后的查询结果却会报错java.sql.SQLDataException: Cannot d

    2024年02月03日
    浏览(67)
  • 数据库中的字段名与实体类中的属性名不能一一对应时的三种处理方式

    当查询结果的列名和java对象的属性名对应不上时需要采用下列方式进行处理:         第一种方式:在查询语句中使用\\\"as\\\" 给列起别名         第二种方式:使用resultMap结果映射         第三种方式:开启驼峰命名自动映射(配置settings) 实体类Car: packa

    2024年02月09日
    浏览(41)
  • JSP 学生成绩查询管理系统eclipse开发sql数据库serlvet框架bs模式java编程MVC结构

    一、源码特点   JSP 学生成绩查询管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,比较流行的servlet框架系统具有完整的源代码和数据库,eclipse开发系统主要采用B/S模式 开发。 java 学生成绩查询管理系统 代码下载链接 https://download.csdn.net/download/qq_412

    2024年02月05日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包