`

MyBatis关联查询(对象嵌套对象)

阅读更多

    Mybatis 查询对象中嵌套其他对象的解决方法有两种,一种是用关联另一个resultMap的形式,如

<association property="office"  javaType="Office" resultMap="officeMap"/>

     

<mapper namespace="com.dixn.oa.modules.sys.dao.RoleDao">
    
   <resultMap type="Office" id="officeMap">
    	<id property="id" column="id" />
    	<result property="name" column="office.name" />
    	<result property="code" column="office.code" />
    </resultMap>
    
    <resultMap id="roleResult" type="Role">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="enname" column="enname" />
		<result property="roleType" column="roleType" />
		<result property="dataScope" column="dataScope" />
		<result property="remarks" column="remarks" />
		<result property="useable" column="useable" />
		<association property="office"  javaType="Office" resultMap="officeMap"/>
		<collection property="menuList" ofType="Menu">
			<id property="id" column="menuList.id" />
		</collection>
		<collection property="officeList" ofType="Office">
			<id property="id" column="officeList.id" />
		</collection>
	</resultMap>
	
    <sql id="roleColumns">
    	a.id,
    	a.office_id AS "office.id",
    	a.name,
    	a.enname,
    	a.role_type AS roleType,
	a.data_scope AS dataScope,
	a.remarks,
	a.create_by AS "createBy.id",
	a.create_date,
	a.update_by AS "updateBy.id",
	a.update_date,
	a.del_flag,
    	o.name AS "office.name",
    	o.code AS "office.code",
    	a.useable AS useable,
    	a.is_sys AS sysData
    </sql>
    
<select id="get" resultMap="roleResult">
	SELECT
	<include refid="roleColumns"/>
	rm.menu_id AS "menuList.id",
	ro.office_id AS "officeList.id"
	FROM sys_role a
	JOIN sys_office o ON o.id = a.office_id
	LEFT JOIN sys_role_menu rm ON rm.role_id = a.id
	LEFT JOIN sys_role_office ro ON ro.role_id = a.id
	WHERE a.id = #{id}
</select>

    

     另一种联合查询 (一对一)的实现,但是这种方式有“N+1”的问题,不建议使用

 

 

 <resultMap id="roleResult" type="Role">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="enname" column="enname" />
		<result property="roleType" column="roleType" />
		<result property="dataScope" column="dataScope" />
		<result property="remarks" column="remarks" />
		<result property="useable" column="useable" />
		<association property="office"  javaType="Office"     column="id" select="getOfficeById"/>
		<collection property="menuList" ofType="Menu">
			<id property="id" column="menuList.id" />
		</collection>
		<collection property="officeList" ofType="Office">
			<id property="id" column="officeList.id" />
		</collection>
	</resultMap>

 

 
    
    <select id="getOfficeById"  resultType="Office">
        select o.name AS "office.name",o.code AS "office.code" from sys_office o where o.id = #{id}
    </select> 

    以上就是两种对象内嵌套对象查询的实现。
0
6
分享到:
评论

相关推荐

    mybatis 关联查询完整代码

    本篇文章将详细探讨MyBatis在关联查询中的一对一和一对多关系映射,以及如何通过ResultMap配置来实现这些复杂的查询。 在数据库设计中,一对一和一对多的关系非常常见。一对一关系通常出现在两个表之间,其中一个表...

    mybatis 多层级collection嵌套.docx

    这样,MyBatis将根据配置自动执行相关联的查询,将多层级的数据结构填充到对应的Java对象中。 总结来说,MyBatis通过`&lt;collection&gt;`标签实现了对多层级数据结构的映射,使得我们可以方便地处理复杂的关联查询,避免...

    Spring整合MyBatis关联查询示例

    1. **嵌套结果映射**(Nested Result Maps):在同一个ResultMap中定义一对一或一对多的子ResultMap,MyBatis会自动处理关联对象的填充。 2. **关联查询**(Association Queries):使用`&lt;association&gt;`和`...

    mybatis关联查询多对多查询案例

    这些注解告诉MyBatis如何处理中间表,并提供关联对象的映射。 3. **编写Service和DAO**:在Service层,我们需要编写逻辑来处理多对多的关联操作,如添加、删除和查找关联关系。在DAO层,对应的Mapper接口和XML文件...

    Mybatis关联映射

    通过本次实验的学习,我们深入了解了MyBatis关联映射的基本原理和技术要点,掌握了不同类型的关联查询方法及其应用场景。在实际开发过程中,合理运用关联映射技术能够显著提升系统的性能和可维护性。同时,通过实验...

    MyBatis关联映射代码

    这种映射允许我们在查询时自动处理关联对象,而无需手动编写复杂的SQL语句。关联映射分为嵌套查询(Nested Select)和嵌套结果(Nested ResultMap)两种方式。 1. 嵌套查询:在查询主表数据时,通过子查询来获取...

    MyBatis的关联映射实践报告

    了解数据表之间以及对象之间的三种关联关系 2.熟悉关联关系中的嵌套查询和 嵌套结果 3.掌握一对一,一对多,和多对多关联映射作用

    SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)

    MyBatis 在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。 嵌套查询方式: ```xml select="com.ghl.mapper.ClassMapper.findStudentInClass"/&gt; ``` 嵌套结果方式: ```xml ```...

    mybatis 的高级关联查询源码

    - 使用 `lazyLoadingEnabled` 属性可实现延迟加载,只有当访问到关联对象时才执行子查询,提高初次加载速度。 - `fetchSize` 设置可以控制每次从数据库读取的数据量,避免一次性加载大量数据导致内存溢出。 - `...

    基于java的企业级应用开发:MyBatis的关联映射.ppt

    MyBatis提供了两种处理关联对象的方法:嵌套查询和嵌套结果。嵌套查询会在主查询的基础上执行额外的SQL,而嵌套结果则是通过一次复杂的多表查询获取所有需要的数据。嵌套查询虽然简单,但可能导致大量额外的SQL语句...

    Mybatis实现一对一关联查询(Mysql数据库)

    本主题将详细探讨如何在Mybatis中实现一对一(1-1)的关联查询,以User用户表和User_Card身份证表为例。这两个表之间存在一对一的关系,意味着每个用户都对应一个且仅有一个身份证信息。 首先,我们需要理解Mybatis...

    Mybatis关联练习

    在这个“Mybatis关联练习”中,我们将深入探讨Mybatis中的一对一、一对多和多对一关系映射,以及如何通过接口实现数据查询,并结合分页插件提高查询效率。 首先,我们来看一下Mybatis中的一对一关联。一对一关系...

    mybatis 一对多的查询,包含 连接查询 嵌套查询 及日志处理

    - 连接查询(JOIN):MyBatis 允许在 XML 映射文件中编写 SQL JOIN 语句,直接在一个查询中获取父对象和其关联的子对象。这种方式简单明了,但可能导致 SQL 查询性能下降。 - 嵌套查询:另一种方式是使用 `...

    Springboot中mybatis表关联映射关系(一对一)

    MyBatis 提供了两种方式来加载关联关系对象:嵌套查询和嵌套结果。嵌套查询时指通过执行另一条 SQL 映射语句来返回预期的复杂类型;嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。 例如,以下是使用嵌套...

    MyBatis的关联映射彩色PPT版本.pptx

    为了解决这个问题,MyBatis提供延迟加载机制,通过在核心配置文件中开启`lazyLoadingEnabled`和关闭`aggressiveLazyLoading`,可以在需要时才加载关联对象,从而提高效率。 对于一对多的关系,例如一个部门有多名...

    MyBatis3关联关系

    4. **嵌套的 select 语句**:如果不想在主查询中包含“多”的一方所有数据,可以在“一”的一方 ResultMap 中使用 `&lt;collection&gt;` 标签的 `select` 属性引用一个 SQL 查询,该查询将单独获取关联对象集合。...

    mybatis_xml关联插件

    MyBatis支持嵌套结果映射和关联映射来处理这些复杂的关系。比如,如果一个用户有多个订单,可以这样配置: ```xml SELECT u.*, o.* FROM users u JOIN orders o ON u.id = o.user_id WHERE u.id = #{id} ...

    MyBatis一对一查询的代码

    这样,当执行查询时,MyBatis会自动处理这种复杂的一对一关系,将查询结果组装成完整的`User`对象,其中包含了`UserDetail`对象。 总结一下,MyBatis中的一对一查询主要通过`resultMap`、`id`、`result`以及`...

    MyBatis的关联映射-资料.rar

    4. **延迟加载**:MyBatis提供了延迟加载功能,当首次访问关联对象时才执行SQL查询,而不是在主对象加载时一次性加载所有关联数据。这可以避免内存占用过多,但需要开启MyBatis的二级缓存和懒加载特性。 5. **联合...

    Mybatis简单关系查询案例

    总结来说,Mybatis的关联查询处理有嵌套查询和嵌套结果两种策略,后者在性能上更优。同时,针对多对一的关系,我们可以利用`&lt;association&gt;`标签进行映射,并通过懒加载来优化数据加载时机。在实际开发中,合理运用...

Global site tag (gtag.js) - Google Analytics