iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >MyBatis中的collection如何使用
  • 166
分享到

MyBatis中的collection如何使用

2023-07-02 08:07:56 166人浏览 独家记忆
摘要

今天小编给大家分享一下mybatis中的collection如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。colle

今天小编给大家分享一下mybatis中的collection如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

collection主要是应对表关系是一对多的情况

查询的时候,用到联表去查询

接下来的小案例包括:市,学校,医院(随便写的),写一个最简单的demo

主要的功能就是查询出所有的市以及对应的市下面所有的学校和医院

实体类:医院

@Data@AllArgsConstructor@NoArgsConstructorpublic class Hospital {    private int id;                 //医院编号    private int urbanId;            //市的编号    private String hospitalName;    //医院名称    private Long people;            //医院人数}

实体类:学校

@Data@AllArgsConstructor@NoArgsConstructorpublic class School {    private int id;               //学校编号    private int urbanId;          //市的编号    private String schoolName;    //学校名字    private Long people;          //学校人数}

实体类:市

@Data@AllArgsConstructor@NoArgsConstructorpublic class Urban {    private int id;                   //市的编号    private String cityId;            //省的编号(此博文没用到)    private String urbanName;         //城市名字    private List<School> schools;     //对应的所有的学校    private List<Hospital> hospitals; //对应的所有的医院}

第一种方式,采用select

首先我们要在学校和医院接口对应的xml中写出按照市的编号来查询出所有数据的xml

xml:医院

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "Http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yh.mybatis.dao.mapper.HospitalMapper">    <select id="findAllByUId" resultType="com.yh.mybatis.dao.pojo.Hospital">        select * from hospital where urban_id = #{urbanId}    </select><!--实际工作不建议用 *,id就是mapper接口中对应的方法名,resultType就是查询出结果后返回的list的泛型  urban_id = #{urbanId} 按照urban_id去查找--></mapper>

xml:学校

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yh.mybatis.dao.mapper.SchoolMapper">    <select id="urbanSchool" resultType="com.yh.mybatis.dao.pojo.School">        select * from school where urban_id = #{urbanId}    </select></mapper>

接下来就是在市的xml中对学校和医院的xml进行一个调用(用collection中select)

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yh.mybatis.dao.mapper.UrbanMapper">      <resultMap id="findAllUrbanSandH" type="com.yh.mybatis.dao.pojo.Urban">        <collection property="schools" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.School"                    select="com.yh.mybatis.dao.mapper.SchoolMapper.urbanSchool"                    column="{urbanId=id}">        </collection>        <collection property="hospitals" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.Hospital"                    select="com.yh.mybatis.dao.mapper.HospitalMapper.findAllByUId"                    column="{urbanId=id}">        </collection>    </resultMap><!--        resultMap中的 <id><result>都可以不写,直接写List<School>和List<Hospital>                                    type还是sql的返回类型        collection中  property 是Urban中对应的字段                                    javaType 是这个字段的类型                                    ofType 是这个字段的泛型  这一项和上一项其实都可以不写,写上了看着更清晰                                    select 是子表的按照市的编号查询所有数据的方法 这里要写下全路径                                    column 作为select语句的参数传入, 也就是把市的编号id 传给医院和学校xml的urbanId-->        <select id="findAllUrbanSandH" resultMap="findAllUrbanSandH">        select * from urban    </select></mapper>

第二种方式,执行一次sql

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yh.mybatis.dao.mapper.UrbanMapper">        <resultMap id="findAllUrbanSandH2" type="com.yh.mybatis.dao.pojo.Urban">        <id property="id" column="id"/>        <result property="cityId" column="city_id"/>        <result property="urbanName" column="urban_name"/><!--这上面这几个字段就是urban表中,自带的那几个字段-->        <collection property="schools" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.School">            <id property="id" column="sid"/>            <result property="urbanId" column="surban_id"/>            <result property="schoolName" column="school_name"/>            <result property="people" column="speople"/>        </collection><!--这上面就是school表中的字段        javaType是urban类中定义的school的类型  可以不写        ofType就是泛型,这个还是很有必要的,接下来的id result 就是这个类中定义的各种字段,要写全        如果涉及到的任何表中,在数据库中有重复的字段名,那就必须要起别名。(例如各个表中的id)        起别名直接在下面的sql中就可以。-->        <collection property="hospitals" javaType="java.util.List" ofType="com.yh.mybatis.dao.pojo.Hospital">            <id property="id" column="hid"/>            <result property="urbanId" column="hurban_id"/>            <result property="hospitalName" column="hospital_name"/>            <result property="people" column="hpeople"/>        </collection>    </resultMap>        <select id="findAllUrbanSandH2" resultMap="findAllUrbanSandH2">        select  urban.city_id                ,urban.id                ,urban.urban_name                ,school.id sid                ,school.urban_id surban_id                ,school.school_name                ,school.people speople                ,hospital.id hid                ,hospital.urban_id hurban_id                ,hospital.hospital_name                ,hospital.people hpeople        from urban            inner join school on urban.id = school.urban_id            inner join hospital on urban.id = hospital.urban_id    </select></mapper>

接下来就可以写两个接口来测试这两个xml配置是否正确,具体的代码在最上面的码云地址里,大家可以配合swagger进行测试。

比较

方案一:需要执行至少三次sql语句,开启三次事务才能完成本次请求。
方案二:需要执行一次sql语句,开启一次事务就能完成本次请求

方案二比方案一的效率要高,但是在使用的时候,方案一的代码可重用性要高

如果想要追求代码重用性可以选择方案一
如果比较在乎运行的性能可以选择方案二

以上就是“MyBatis中的collection如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: MyBatis中的collection如何使用

本文链接: https://www.lsjlt.com/news/340792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MyBatis中的collection如何使用
    今天小编给大家分享一下MyBatis中的collection如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。colle...
    99+
    2023-07-02
  • Mybatis | Mybatis标签collection一对多的使用
    Mybatis标签collection一对多的使用 一、colleciton 标签二、collection使用方法1. 方法一: 嵌套结果映射2. 方法二: 嵌套select 查询 三、 ...
    99+
    2023-09-05
    mybatis java mysql
  • foreach与collection怎么在mybatis 中使用
    foreach与collection怎么在mybatis 中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。foreach的主要用在构建in条件中,它可以在SQL语句中进...
    99+
    2023-05-31
    mybatis foreach collection
  • Mybatis中association和collection怎么用
    这篇文章将为大家详细讲解有关Mybatis中association和collection怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。association和collection用法1.单个关联查询...
    99+
    2023-06-29
  • mybatis使用collection嵌套查询的实现
    在开发中,可能会遇到一对多的关系,这个时候,一条sql语句就难以胜任这个任务了。只能先执行一条sql,然后根据返回的结果,再做一次sql关联查询,这个时候,使用mybatis的col...
    99+
    2022-11-13
  • mybatis中foreach collection的示例分析
    这篇文章主要介绍mybatis中foreach collection的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了for...
    99+
    2023-05-31
    mybatis foreach collection
  • 关于Mybatis使用collection分页问题
    目录原因方案方案一方案二扩展1.集合的嵌套 Select 查询2.集合的嵌套结果映射参考:项目中mybatis分页的场景是非常高频的,当使用ResultMap并配置coll...
    99+
    2022-11-12
  • MyBatis中的collection两种使用方法及效率比较
    目录第一种方式,采用select第二种方式,执行一次sql比较collection主要是应对表关系是一对多的情况 查询的时候,用到联表去查询 接下来的小案例包括:市,学校,...
    99+
    2022-11-13
  • Java中如何使用Collection类
    Java中如何使用Collection类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Collection接口Collection是最基本的集合接口,一个Collectio...
    99+
    2023-06-17
  • Mybatis使用collection分页问题举例分析
    本篇内容介绍了“Mybatis使用collection分页问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原因引起该问题的原因是当...
    99+
    2023-06-21
  • MyBatis中的ResultMap的association和collection标签详解
    目录一、前言二、ResultMap 的属性列表三、resultMap标签介绍四、id & result标签参数详解五、association标签常用参数详解六、collect...
    99+
    2022-11-13
    MyBatis association和collection标签 MyBatis  ResultMap
  • MyBatis中foreach标签的collection属性的取值方式
    目录foreach标签的collection属性的取值传的是List列表传的是Array数组传的是Mapcollection属性总结MyBatis使用foreach标签报错原因解决方...
    99+
    2022-11-13
  • Python collection的使用
    Python中的基本数据结构有list,dict,tuple,set。Python还有一个功能比较强大的包collections,可以处理并维护一个有序的dict,可以提高程序的运行效率。 1、collections中defau...
    99+
    2023-01-31
    Python collection
  • java collection类如何调用
    在Java中,Collection是一个接口,它定义了一组方法来操作集合对象,如添加、删除、查找等。要使用Collection类,首...
    99+
    2023-10-07
    java
  • java-collection中的null,isEmpty用法
    目录collection中的null,isEmpty用法第一种情况第二种情况第三种情况CollectionUtils.isEmpty和 == null的区别本文所指的 Collect...
    99+
    2022-11-13
  • generator如何在mybatis中使用
    这期内容当中小编将会给大家带来有关 generator如何在mybatis中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。引言:最近的一个项目,由于数据库表巨多,导致需要创建N多个java实体、dao...
    99+
    2023-05-31
    mybatis generator
  • typeAliases如何在Mybatis中使用
    今天就跟大家聊聊有关typeAliases如何在Mybatis中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 typeAliases单个定义<typeAlias...
    99+
    2023-05-31
    mybatis typealiases
  • mybatis中的嵌套查询如何使用
    今天小编给大家分享一下mybatis中的嵌套查询如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。mybatis嵌套查询...
    99+
    2023-07-05
  • resultMap中的collection标签怎么用
    这篇文章主要介绍“resultMap中的collection标签怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“resultMap中的collection标签怎么用”文章能帮助大家解决问题。re...
    99+
    2023-06-29
  • 枚举如何在MyBatis中使用
    这篇文章给大家介绍枚举如何在MyBatis中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:public enum ComputerState { OPEN(10), //开启 CLOSE(11),...
    99+
    2023-05-31
    mybatis 枚举
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作