首页 > 其他分享 >resultMap之collection聚集

resultMap之collection聚集

时间:2024-07-12 19:18:38浏览次数:14  
标签:语句 聚集 resultMap 嵌套 role collection SQL id user

 

聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载:

1. select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活但会将执行多次嵌套的SQL语句。
2. resultMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型。

两种加载方式格式如下:

1.集合的嵌套查询(select)

<collection property="Java属性名" ofType="另一Java类名" javaType="ArrayList" column="关联主键ID(用于嵌套查询SQL语句传入参数,多个用逗号分开)" select="另一个select映射SQL的ID"/>

<select parameterType="int" resultType="另一Java类名" id="另一个select映射SQL的ID">

SQL语句

<select>

注意:column属性的值必须与相应的SQL查询语句中的列名相同。MyBatis会将第一条SQL语句查询出来的该列的值用于所嵌套的SQL映射语句的入参。因第一条SQL语句查询出来的每个该列的值都将用于执行另一个SQL语句,所以嵌套的SQL语句将被多次执行。

2.集合的嵌套结果(resultMap)

<collection property="Java属性名" ofType="另一Java类名" javaType="ArrayList" resultMap="另一个resultMap的ID"/>

<resultMap="另一个resultMap的ID" type="另一Java类名">

<id property="id" column="关联主键ID"/>

........

</resultMap>

注意:column属性的值必须与相应的SQL查询语句的列名一样。

集合的嵌套查询(select)示例:
 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
 4   
 5 <mapper namespace="com.myapp.mapper.UserMapper">  
 6   <select id="getUserList" resultMap="userdetailResult">  
 7     select * from t_user where id between 1 and 10  
 8   </select>  
 9   <select id="selectRoles" resultType="com.myapp.domain.Role" parameterType="int">  
10     select * from t_user_role a,t_role b where a.user_id=#{id} and a.role_id=b.id  
11   </select>  
12   <resultMap id="userdetailResult"  type="User">   
13          <id property="id"  column="user_id" />  
14     <result property="name" column="user_name"/>  
15     <result property="createDate" column="create_date"/>  
16     <collection property="roles"  ofType="Role" javaType="ArrayList"  column="id" select="selectRoles"/>  
17   </resultMap>  
18 </mapper>

 

集合的嵌套结果(result)示例:

 
 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
 4   
 5 <mapper namespace="com.myapp.mapper.UserMapper">  
 6   <select id="getUserList" resultMap="userdetailResult">  
 7     SELECT  
 8         u.id as user_id,  
 9         u.name as user_name,  
10         u.create_date,  
11         r.id as role_id,  
12         r.name as role_name  
13     FROM t_user u  
14     LEFT JOIN t_user_role ur ON(u.id=ur.user_id)  
15     LEFT JOIN t_role r ON(r.id=ur.role_id) where u.id=1  
16   </select>  
17   <resultMap id="userdetailResultNew"  type="User">   
18     <id property="id"  column="user_id" />  
19     <result property="name" column="user_name"/>  
20     <result property="createDate" column="create_date"/>  
21     <collection property="roles"  ofType="Role" javaType="ArrayList">   
22         <id property="id"  column="role_id"/>   
23         <result property="name"  column="role_name"/>  
24     </collection>   
25   </resultMap>  
26   <resultMap id="roleResult" type="Role">  
27     <id property="id"  column="role_id"/>   
28     <result property="name"  column="role_name"/>  
29   </resultMap>  
30   <resultMap id="userdetailResult"  type="User">   
31     <id property="id"  column="user_id" />  
32     <result property="name" column="user_name"/>  
33     <result property="createDate" column="create_date"/>  
34     <collection property="roles"  ofType="Role" javaType="ArrayList" resultMap="roleResult"/>   
35   </resultMap>  
36 </mapper>  

 

如果你只是简单的嵌套,可以像id="userdetailResultNew" 那样将要嵌套的结果直接写在collection子元素中去。

标签:语句,聚集,resultMap,嵌套,role,collection,SQL,id,user
From: https://www.cnblogs.com/joe-tang/p/7144956.html

相关文章

  • MyBatis用嵌套ResultMap实现一对多映射
    背景我们知道,MyBatis可以很方便地把SQLselect出来的数据直接映射为对象的属性,把对象取出来。但是,有些对象的属性是集合类型,集合里保存的是数个其他类型的对象。如何用MyBatis把它取出来呢?例子以以下这个应用场景为例:一个教师对应多个课程。数据结构如下:publicclassCour......
  • Mybatis association与collection的区别
    mybatisassociation与collection的区别:一、一对一 association通常用来映射一对一的关系1<resultMaptype="cn.itcast.mybatis.po.Orders"id="OrdersUserResultMap">23<!--配置映射的订单信息-->4<idcolumn="id"prope......
  • 木舟0基础学习Java的第十三天(Collection集合框架)
    Collection(根接口)集合框架数组和集合的区别:数组:既可以存储基本数据类型(值)又可以存储引用数据类型(地址值)    长度:数组的长度是固定的不能自动增长    使用环境:元素个数固定的时候集合:只能存储引用数据类型(对象)也可以存储基本数据类型(存储基本数据类型会自动......
  • 2-Collection
    Collection常用方法Collection接口publicstaticvoidmain(String[]args){/*Collection接口的常用方法:增加:add(Ee)addAll(Collection<?extendsE>c)删除:clear()remove(Objecto)修改:查看:iterator(......
  • Collection接口和常用方法
    Collection接口实现类的特点publicinterfaceCollection<E>extendsIterable<E>collection实现子类可以存放多个子元素,每个元素可以是Object有些Collection的实现类,可以存放时能够重复的元素,有些不行有些Collection的实现类是有序的(List),有些不是(Set)Collection接口没有直接......
  • MyBatis2(MyBatis基础配置 动态代理 映射器 select 元素 insert 元素 update 元素和del
    目录一、MyBatis基础配置1.MyBatis配置文件2.<configuration>元素3.<enviroments>元素4.<properties>元素5.<typeAliases>元素6.<mappers>元素二、动态代理三、映射器1.映射器与接口2. 映射器的引入 3.映射器的组成 四、select元素参数传递多......
  • [Javascript] garbage collection
    Anytimewhenyouhavenon-primitivetype,it'sgoingtoberemovedfrommemoryanytimeifitisnolongerneeded.classTest{constructor(name){this.name=name}}constgloablTest=newTest("globalTest")constglobalString=......
  • RAG与LLM原理及实践(6)--- Chroma collection及存储逻辑分析
     背景在chromavectordb的世界中,除了对query的理解,另外就是需要深入理解chroma的运行模式,chroma运行时,提供了 local模式,server-client模式,这些在应用中固然重要,但从实现原理上说,其实就是通过http服务,在固定端口如11344上请求数据。但是在这之前,需要深入了解并理解coll......
  • GEE问题:Landsat Collection 2不同传感器之间是否需要进行协调校正?
    LandsatTeam团队和GEE团队对于大多数应用而言,在使用采集2地表反射率产品时,无需进行任何传感器间协调校正(转述Landsat科学团队MikeWulder的信息)(个人经验)。使用波段比指数时尤其如此。您提到的Roy等人的系数是为采集前数据开发的。大地遥感卫星档案现已进入第2个数......
  • Arturia - FX Collection 5 v5.0.0 VST, VST3, AAX x64 {R2R} [13.06.2024]
    Arturia-FXCollection5v5.0.0forWindowsmac【【新品发布+小广告】ArturiaFXCollection5超强音乐制作插件套装34款产品逐一点评】https://www.bilibili.com/video/B...4d4e7f5c56f93e901cd    包括BusEXCITER-104BusFORCEBusPEAKChorusDIMENSION-DCh......