1.一对多查询
UserDAOMapper.xml
<SqlMap namespace="User">
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<typeAlias alias="address" type="com.ibatis.sample.Address"/>
<resultMap id="get-user-result" class="user"> resultMap的功能就是将user类的所有属性都映射出来
<result property="id" column="id" /> property是user的属性, column是数据库列名
<result property="name" column="name" />
<result property="addresses" column="id" 此处指明通过getAddressById获得addresses(一个address的数组)属性,getAddressById的参数是id
select="User.getAddressesById"/> 此处的 User.getAddressById User.指的是命名空间
/<resultMap>
<select id="getUsers"
parameterClass="string"
resultMap="get-user-result" >
<![CDATA[
select
id,
name
from t_user
where id = #id#
]]>
</select>
<select id="getAddressesById"
parameterClass="int"
resultClass="address">
<![CDATA[
select
address,
zipcode
from t_address
where user_id = #userid#
]]>
</select>
使用方法代码
List userList = sqlMap.queryForList("User.getUsers", ""); 即可返回user的list
Address[] addresses = userList.getAddresses();
*延时加载
在List userList = sqlMap.queryForList("User.getUsers", "")时,只执行了select id, name, sex from t_user一条SQL语句.当
Address[] addresses = userList.getAddresses();时,才开始执行获取Address的sql语句.这就是延时加载
*延迟加载并非对所有属性有效,只有实现了List接口的属性才能进行延迟加载
2.一对一查询
如果user和address是一对一关联,则使用同时select两个表的查询,以提高性能,节省资源
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="address" column="t_address.address"/>
<result property="zipCode" column="t_address.zipcode"/>
</resultMap>
<select parameterClass="string" resultMap="get-user-result" >
<![CDATA[
select
*
from t_user, t_address
where t_user.id = t_address.user_id
]]>
</select>
分享到:
相关推荐
一、延迟加载机制 在Mybatis中,通过`resultMap`的`association`和`collection`元素可以实现一对多和一对一的映射,并且它们支持延迟加载功能。延迟加载的基本原理是,Mybatis会在对象被请求时,检查其相关属性是否...
Mybatis使用Java的动态代理机制,在你需要访问延迟加载的属性时,实际调用的是代理对象的方法,这个方法会去数据库执行对应的查询语句,获取所需的数据。 需要注意的是,虽然延迟加载能够减少一次性加载大量数据的...
MyBatis懒加载,也称为延迟加载(Lazy Loading),是一种优化技术,主要应用于对象关系映射框架中,如MyBatis。懒加载的核心思想是“按需加载”,即在真正需要数据时才去数据库获取,而不是在初始加载实体对象时就一...
MyBatis提供了延迟加载机制,但默认是关闭的,需要在Mapper XML的association或collection标签中启用。 同时,为了处理一对多关系时可能出现的级联更新和级联删除,MyBatis提供了cascade属性,可以在insert、update...
总的来说,MyBatis的关联映射是实现Java对象与数据库表关联关系的重要手段,通过合理使用`<association>`元素和延迟加载机制,可以在保证开发灵活性的同时,有效提升应用程序的性能。学习并掌握这些知识点对于进行...
默认情况下,Mybatis是开启延迟加载的,但如果希望立即加载关联数据,可以通过设置`fetchType="eager"`来实现。 ### 5. 示例代码运行 这个压缩包中的例子应该包含了完整的Java代码和Mybatis配置文件,你可以直接...
- 高级应用篇:掌握关联查询,理解延迟加载机制,使用 MyBatis 的缓存功能,以及逆向工程生成代码。 - 扩展点:了解如何与其他框架集成,如 SpringBoot,以及使用第三方分页插件 PageHelper。 通过学习 MyBatis,...
高级映射涉及一对多、多对一的关系映射,以及延迟加载机制,使得大数据量关联查询更加高效。 总结来说,MyBatis是一个强大的持久层框架,提供了丰富的功能和高度定制性,便于开发人员进行数据库操作,降低了数据库...
在这个项目中,你将深入理解MyBatis如何处理不同类型的关联关系,包括一对一、一对多、多对多的映射,以及延迟加载的概念和实现。 首先,我们来了解一下MyBatis。MyBatis是一个优秀的持久层框架,它支持定制化SQL、...
MyBatis的延迟加载机制 - **实现**: 在MyBatis中,通过配置`lazyLoadingEnabled`参数来开启延迟加载功能。 - **配置**: 在全局配置文件中设置`lazyLoadingEnabled=true`,并配置具体的懒加载策略。 - **使用**: 当...
5. **使用延迟加载(Lazy Loading)**:MyBatis支持延迟加载,即在真正需要子记录时才去数据库查询。但这种方式在大数据量时可能导致不必要的数据库交互,因此需要根据实际需求权衡。 6. **批处理(Batch)**:对于...
为了解决这个问题,MyBatis提供延迟加载机制,通过在核心配置文件中开启`lazyLoadingEnabled`和关闭`aggressiveLazyLoading`,可以在需要时才加载关联对象,从而提高效率。 对于一对多的关系,例如一个部门有多名...
* 在使用 `fetchType` 属性时,需要指定是否启动延迟加载。 MyBatis 提供了两种方式来加载关联关系对象:嵌套查询和嵌套结果。嵌套查询时指通过执行另一条 SQL 映射语句来返回预期的复杂类型;嵌套结果是使用嵌套...
为了提高性能,可以考虑使用延迟加载(lazy loading)或级联加载(eager loading)。延迟加载只在访问关联对象时才执行SQL,而级联加载则在获取主对象时一起加载所有关联对象。这需要在`<collection>`标签中设置`...
在处理关联关系时,MyBatis还提供了缓存和延迟加载机制。缓存可以帮助减少数据库的访问,提高性能;而延迟加载则是在需要的时候才去查询关联的数据,避免一次性加载大量数据导致内存压力。 - **一级缓存**:默认...
- **Lazy loading(懒加载)**:如果关联数据不常用,可以配置为延迟加载,只有当真正需要时才会执行额外的SQL查询获取关联数据。 5. **Nested Select**:Mybatis通过在主查询中嵌入子查询来实现关联数据的加载。...
9. **关联映射的性能优化**:通过合理设计关联映射,如避免N+1查询问题,使用子查询或连接查询,以及利用缓存机制,可以显著提升数据检索的效率。 总的来说,MyBatis的关联映射功能使得数据库操作变得更加灵活,...
- 当查询主表数据量较大,而从表数据不是每次都需要时,使用延迟加载可以减少初始查询的时间消耗。 **配置**: - 在`SqlMapConfig.xml`中,配置`settings`标签启用延迟加载功能。 - 映射文件中,通过`resultMap`中的...
本文将深入探讨 iBATIS 的一些高级特性,包括关联对象、事务管理、延迟加载、缓存以及动态标签的使用。 **关联对象** 在 iBATIS 中,关联对象的处理并不像 Hibernate 那样提供级联保存和级联删除的功能。但 iBATIS...