Mybatis的延时加载(懒加载)
目的:是为了减少对数据库的使用,减少内存使用,减轻服务其压力。加快查询效率,
延时加载一般是用在了多表联查的时候,延时加载一般是通过设置配置文件来完成的,
延时加载也称之为懒加载或者按需加载,主要是应用到了级联操作
延时加载的使用
表之间的关系是一对一(使用assocation完成延时加载)
局部懒加载::在接口对应的xml文件里面的mapper里面配置xml文件
<!--配置产生级联操作-->
<resultMap id="userMap" type="com.zhiyou100.pojo.User">
<!--实体类和表映射-->
<!--注意:这里 column写的是数据库里面的字段 property写的是实体类的属性-->
<!--这里只有主键id才需要用到 id column="id" property="id" -->
<id column="id" property="id"></id>
<result column="username" property="username"></result>
<result column="age" property="age"></result>
<result column="address" property="address"></result>
<result column="gender" property="gender"></result>
<result column="u_rid" property="u_rid"></result>
<result column="u_did" property="u_did"></result>
<!--映射级联 让user和role产生关联--><!--这一步就是让两个表产生了关联-->
<!--因为使用一对一关联所以使用的是association标签-->
<!--产生延时加载需要加入两个属性 一个是
select : 填写的需要级联调用, select 对应另外表中的id值全路径 包名 + 类名 + 方法名
column : 这里面填写的就是级联调用的 select中的id值对应的参数 参数的名称是当前表中的字段名称,或者是查询语句中的列名
根据用户表中的角色id值 u_rid 查询角色表中的对应的角色信息
fetchType="lazy" 表示局部不是mybatis-config.xml里面的全部开启开启延时加载 把lazy换成 eager 表示立即加载
-->
<association property="role" fetchType="lazy" javaType="role" select="com.zhiyou100.dao.IRoleDao.queryRoleById" column="u_rid" >
<!--实体类和表映射-->
<id property="roleId" column="r_id"></id>
<result property="roleName" column="r_name"></result>
<result property="roleDesc" column="r_desc"></result>
<result property="roleUpdateTime" column="r_updateTime"></result>
</association>
</resultMap>
全局懒加载设置,在mybatis-config.xml配置
<!--这个必须写在数据源组件之后,包别名之前-->
<!--注意写的位置,如果位置不对就容易出错-->
<settings>
<!--开启延时加载策略-->
<!--这是一个全局性质的加载,那么整个工程里面都会开启延时加载-->
<!--value里面写true就表示开启懒加载,写false就表示关闭懒加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
表与表之间的关系是一对多(使用collection实现懒加载)
局部懒加载::在接口对应的xml文件里面的mapper里面配置xml文件
<!--使用resultMap 让实体类的属性名称和表中的字段名称保持一致-->
<!--注意:property-->
<resultMap id="roleMap" type="role">
<id property="roleId" column="r_id"></id>
<result property="roleName" column="r_name"></result>
<result property="roleDesc" column="r_desc"></result>
<result property="roleUpdateTime" column="r_updateTime"></result>
<!--一对多关系查询-->
<!--column user表中的与role表相连外键是r_id-->
<!--property 表示要配置呢一个属性名,明显这里是配置属性名users-->
<!-- ofType 指的是集合中数据的类型,这里明显是user对象 -->
<collection property="users" ofType="user" select="com.zhiyou100.dao.IUserDao.queryUserByRid" column="r_id" >
<!--根据角色id值查询对应的所有的用户信息 操作user表的-->
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="address" column="address"></result>
<result property="gender" column="gender"></result>
</collection>
</resultMap>
两个实体类一个user一个role
public class User implements Serializable {
/*
* 两个保持一致:数据类型和名称
* */
private int id; // 主键 id
private String username; // 用户名
private Integer age; // 年龄
private String address; // 地址
private String gender; // 性别
private Integer u_rid;
private Integer u_did;
public class Role implements Serializable {
private Integer roleId;
private String roleName;
private String roleDesc;
private Date roleUpdateTime;
// 角色--->用户 一对多关系
private List<User> users;
本文详细介绍了MyBatis中的懒加载(延时加载)机制,包括其目的、应用场景及如何配置实现。主要针对多表联查场景下的一对一和一对多关系,通过XML映射文件中的association和collection标签进行配置。
687

被折叠的 条评论
为什么被折叠?



