5.2Java EE——基于注解的关联查询

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

一、一对一查询

        接下来,以4.2节中使用的tb_idcard和tb_person数据表为例,详细讲解基于注解@One实现

tb_idcard和tb_person数据表之间的一对一关联查询,具体步骤如下。

1、创建持久化类:本案例使用4.2节中的IdCard类和Person类作为持久类。

2、编写接口方法:

        (1)创建IdCardMapper接口,在该接口中编写selectIdCardById()方法,通过id查询人员对应的身份证信息。

package com.mac.dao;

import com.mac.pojo.IdCard;

import org.apache.ibatis.annotations.Select;

public interface IdCardMapper {

    @Select("select * from tb_idcard where id=#{id}")

    IdCard selectIdCardById(int id);

}

3、编写接口方法:

        (2)在项目的com.mac.dao包下创建PersonMapper接口,在该接口中编写selectPersonById(),通过id查询人员信息。

package com.mac.dao;

public interface PersonMapper {

    @Select("select * from tb_person where id=#{id}")

    @Results({@Result(column = "card_id",property = "card",

            one = @One(select =   "com.mac.dao.IdCardMapper.selectIdCardById"))})

    Person selectPersonById(int id);

}

@Result注解的三个属性及含义

        (1)property属性用来指定关联属性,这里为card。

        (2)column属性用来指定关联的数据库表中的字段,这里为card_id。

        (3)one属性用来指定数据表之间属于哪种关联关系,通过@One注解表明数据表tb_idcard和tb_person之间是一对一关联关系。

4、引入接口:

        在核心配置文件mybatis-config.xml中的<mappers>元素下引入IdCardMapper和PersonMapper接口。

<mapper class="com.mac.dao.IdCardMapper"/>

<mapper class="com.mac.dao.PersonMapper"/>

<mappers>元素引入XML文件顺序

        由于mybatis-config.xml文件中的扫描方式是从上往下扫描,所以<mappers>元素下引入IdCardMapper和PersonMapper接口的位置,必须在引入IdCardMapper.xml和PersonMapper.xml文件位置前面,否则程序将会首先读取到引入的IdCardMapper.xml和PersonMapper.xml文件,程序将会报错。 

        编写测试类:在测试类MyBatisTest中,编写测试方法selectPersonByIdTest()。

public void selectPersonByIdTest() {

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

    SqlSession session = MyBatisUtils.getSession();

    PersonMapper mapper = session.getMapper(PersonMapper.class);

    // 2.查询id为1的人员的信息

    Person person = mapper.selectPersonById(2);

    System.out.println(person.toString());

    session.close(); // 3.关闭SqlSession 

}

二、 一对多查询

        接下来,以4.3节中的tb_user和tb_orders数据表为例,详细讲解基于@Many注解配置实现

tb_user和tb_orders数据表之间的一对多关联查询,具体步骤如下。

1、创建持久化类:本案例使用4.3节中的Users类和Orders类作为持久类。

2、编写接口方法:

        (1)创建OrdersMapper接口,在该接口中编写selectOrdersByUserId()方法,通过user_id查询用户对应的订单信息。

public interface OrdersMapper {

    @Select("select * from tb_orders where user_id=#{id} ")

    @Results({@Result(id = true,column = "id",property = "id"),

            @Result(column = "number",property = "number") })

    List<Orders> selectOrdersByUserId(int user_id);

}

3、编写接口方法:

        (2)创建UsersMapper接口,在该接口中编写selectUserById()方法,通过id查询用户信息。

public interface UsersMapper {

    @Select("select * from tb_user where id=#{id} ")

    @Results({@Result(id = true,column = "id",property = "id"),

            @Result(column = "username",property = "username"),

            @Result(column = "address",property = "address"),

            @Result(column = "id",property = "ordersList",

                     many = @Many(select =   "com.mac.dao.OrdersMapper.selectOrdersByUserId"))})

    Users selectUserById(int id);

}

4、引入接口:

        在核心配置文件mybatis-config.xml中的<mappers>元素下引入UsersMapper和OrdersMapper接口。 

<mapper class="com.mac.dao.UsersMapper"/>

<mapper class="com.mac.dao.OrdersMapper"/>

<mappers>元素引入XML文件顺序

        由于mybatis-config.xml文件中的扫描方式是从上往下扫描,所以<mappers>元素下引入UsersMapper和OrdersMapper接口的位置,必须在引入UsersMapper.xml和OrdersMapper.xml文件位置前面,否则程序将会首先读取到引入的UsersMapper.xml和OrdersMapper.xml文件,程序将会报错。 

        编写测试类:在测试类MyBatisTest中,编写测试方法selectUserByIdTest()。

public void selectUserByIdTest() {

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

    SqlSession session = MyBatisUtils.getSession();

    UsersMapper mapper = session.getMapper(UsersMapper.class);

    // 2.查询id为1的人的信息

    Users users = mapper.selectUserById(1);

    System.out.println(users.toString());

   session.close();

}

三、多对多查询

多对多关联使用中间表

        在数据库中,表与表之间的多对多关联关系通常使用一个中间表来维护,以4.4节中使用的订单表tb_orders和商品表tb_product为例,这两个表之间的关联关系使用了一个中间表tb_ordersitem来维护,订单表tb_orders和商品表tb_product,都与中间表tb_ordersitem形成了一对多关联关系,即中间表tb_ordersitem将订单表tb_orders和商品表tb_product拆分成了两个一对多的关联关系。

接下来,以4.4节中使用的订单表tb_orders、商品表tb_product和中间表tb_ordersitem为例,详细讲解多对多关联查询,具体步骤如下。

1、在订单持久化类(Orders.java)中增加商品集合的属性及其对应的getter/setter方法,并修改Orders类和Product类中的toString()方法。

@Override

public String toString() {return "Orders{" +

      "id=" + id + ", number=" + number + ", productList=" + productList + '}’;}

@Override

public String toString() {return "Product{" +

      "id=" + id + ", name=" + name +", price=" + price + '}';

}

2、(1)创建ProductMapper接口,在该接口中编写selectProductByOrdersId()方法,通过user_id查询用户对应的订单信息。

public interface ProductMapper {

    @Select("select * from tb_product where id in

 (select product_id from tb_ordersitem where orders_id = #{id} )")

    List<Product> selectProductByOrdersId(int orders_id);

}

(2)、在OrdersMapper接口中添加selectOrdersById()方法,该方法用于通过id查询订单信息。

@Select("select * from tb_orders where id=#{id} ")

    @Results({@Result(id = true,column = "id",property = "id"),

            @Result(column = "number",property = "number"),

            @Result(column = "id",property = "productList",many = @Many(select = "com.mac.dao.ProductMapper.selectProductByOrdersId"))})

    Orders selectOrdersById(int id);

3、在核心配置文件mybatis-config.xml中的<mappers>元素下引入ProductMapper和OrdersMapper接口,将这两个接口加载到核心配置文件中。

<mapper class="com.mac.dao.ProductMapper"/>   

<mapper class="com.mac.dao.OrdersMapper "/>

<mappers>元素引入XML文件的顺序

        注意:由于mybatis-config.xml文件中的扫描方式是从上往下扫描,所以<mappers>元素下引入ProductMapper和OrdersMapper接口的位置,必须在引入ProductMapper.xml和OrdersMapper.xml文件位置前面,否则程序将会首先读取到引入的ProductMapper.xml和OrdersMapper.xml文件,程序将会报错。

在测试类MyBatisTest中,编写测试方法selectOrdersByIdTest(),查询id为3的订单的信息。文章来源地址https://www.toymoban.com/news/detail-551501.html

public void selectOrdersByIdTest() {

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

    SqlSession session = MyBatisUtils.getSession();

    OrdersMapper mapper = session.getMapper(OrdersMapper.class);

    // 2.查询id为3的订单的信息

    Orders orders = mapper.selectOrdersById(3);

    System.out.println(orders.toString());

    session.close();

}

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

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

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

相关文章

  • Java EE 突击 13 - MyBatis 查询数据库(2)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月11日
    浏览(37)
  • 8.3Java EE——基于XML的AOP实现

    使用AOP代理对象的好处         因为Spring AOP中的代理对象由IoC容器自动生成,所以开发者无须过多关注代理对象生成的过程,只需选择连接点、创建切面、定义切点并在XML文件中添加配置信息即可。 Spring提供了一系列配置Spring AOP的XML元素。 配置Spring AOP的XML元素 元素 描

    2024年02月15日
    浏览(32)
  • 14天学会:基于J2EE的JAVA WEB基础

    手把手教你:基于Django的新闻文本分类可视化系统(文本分类由bert实现) 手把手教你:基于python的文本分类(sklearn-决策树和随机森林实现) 手把手教你:岩石样本智能识别系统 本文通过一个14天的学习文档教会大家学会 基于J2EE的JAVA WEB基础 本次上传的资源比较大,因此分

    2024年02月15日
    浏览(31)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发

    ​ 昨天我们深入学习了 MyBatis多表之间的关联映射,了解掌握了一对一关联映射,一对多关联映射,嵌套查询方式以及嵌套结果方式,掌握了缓存机制的一级缓存,二级缓存等概念,也使用了代码进行复现理解 。但是都是基于XML配置文件的方式来实现的,现在我们要学习一下

    2024年02月11日
    浏览(43)
  • J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨

      简单来说,上面所有的名字指的都是一个东西 Java Platform, Enterprise Edition 上面的几个名词都是下面的内容的简写: J2EE(Java 2 Platform, Enterprise Edition) Java EE (Java Platform, Enterprise Edition) Jakarta EE(Jakarta Enterprise Edition) 上面的排序是按照时间演进来进行排序。   1998年12月,SUN公司发

    2023年04月26日
    浏览(31)
  • 【Java EE】文件操作

    目录 1.认识文件 2.树型结构组织和目录 3.文件路径(Path) 4.其他知识 5.Java中操作文件 5.1File概述 5.1.1属性 5.1.2构造方法 5.1.3方法 5.2代码示例 1.认识文件 我们先来认识狭义的文件(file)。针对1硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存一个整

    2024年04月22日
    浏览(41)
  • JAVA EE 第一周

    计算机Z20-第1周作业        总分:100分              1 . 单选题 简单 6分 下列选项中,哪些属于网站建设常用技术( )。 A.HTML B.JavaScript C.CSS D.以上都是 2 . 单选题 简单 6分 下列选项中,哪个不是静态网页的文件扩展名( )。 A.xml B.jsp C.htm D.shtml 3 . 单选题 简单 6分

    2024年02月06日
    浏览(31)
  • 【Java EE 初阶】文件操作

    目录 1.什么是文件? 1.在cmd中查看指定目录的树形结构语法 2.文件路径 从当前目录开始找到目标程序(一个点) 返回到上一级目录,再找目标程序(两个点) 2.Java中文件操作 1.File概述 1.属性 2. 构造方法 3.常用方法  代码展示: 4.常用方法2 3. 文件内容的读写---数据流 1.I

    2024年02月06日
    浏览(33)
  • 【Java EE】Spring介绍

    参考资料spring中文文档 Spring是一个JavaEE轻量级的一站式开发框架。 它提供的功能涵盖了JavaEE程序中的表示层,服务层,持久层功能组件。这意味着,单单Spring框架就可以满足整个JavaEE程序的开发。 为了降低Java开发的复杂性,Spring采用了以下4种关键策略: 1、基于POJO的轻量

    2024年02月06日
    浏览(33)
  • 【Java EE】-JavaScript详解

    作者 :学Java的冬瓜 博客主页 :☀冬瓜的主页🌙 专栏 :【JavaEE】 分享 : 且视他人如盏盏鬼火,大胆地去走你的道路。——史铁生《病隙碎笔》 主要内容 :HTML中引入JS的三种方式。JS语法分析,JS是动态弱类型语言,JS中的数组、方法、对象。JSWebAPI学习,选中元素和单击事

    2023年04月25日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包