【mybatis】懒加载的应用 一对一、一对多 实例
2020-07-25 17:29
89 查看
懒加载(延迟加载)的使用
- 懒加载是一种延迟技术,当我们没有使用被标记延迟加载的元素时,mybatis便不会执行select的语句的实现。
- 通俗的讲,有使用到,就会被加载即被association或者collection标签关联的数据。
- 本例中用户对应多个账户,账户对应一个用户。
- 表信息如下
- 主配置文件mybatis-config.xml 需要添加 懒加载的配置。
<settings> <setting name="lazyLoadingEnabled" value="true"/> </settings>
- 实体类 Account / User
public class User { private Integer id; private String username; private Date birthday; private String sex; private String address; private List<Account> accounts; } public class Account { private Integer id; private Integer uid; private Double money; private User user; }
- AccountMapper.xml / UserMapper.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.wei.mapper.AccountMapper"> <resultMap id="accountUserMap" type="account"> <id property="id" column="id" /> <result property="uid" column="uid" /> <result property="money" column="money" /> <association property="user" column="uid" javaType="user" select="com.wei.mapper.UserMapper.findUserById" > </association> </resultMap> <select id="findAll" resultMap="accountUserMap"> select * from account </select> <!--通过id查找--> <select id="findAccountById" resultType="com.wei.pojo.Account" parameterType="int"> select * from account where uid = #{id} </select> </mapper>
<?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.wei.mapper.UserMapper"> <resultMap id="userAccountMap" type="user"> <id property="id" column="id" /> <result property="username" column="username" /> <result property="birthday" column="birthday" /> <result property="sex" column="sex" /> <result property="address" column="address" /> <collection property="accounts" ofType="Account" column="id" select="com.wei.mapper.AccountMapper.findAccountById" > <id property="id" column="id" /> <result property="uid" column="uid" /> <result property="money" column="money" /> </collection> </resultMap> <select id="findAll" resultMap="userAccountMap"> select * from user </select> <!--通过id查找--> <select id="findUserById" resultType="com.wei.pojo.User" parameterType="int"> select * from user where id = #{uid} </select> </mapper>
- AccountMapper / UserMapper mapper接口
public interface AccountMapper { List<Account> findAll(); List<Account> findAccountById(Integer id); } public interface UserMapper { List<User> findAll(); User findUserById(Integer id); }
- 测试类
public class MybatisTest { @Test public void fun1(){ SqlSession sqlsession = MybatisUtils.getSqlsession(); AccountMapper mapper = sqlsession.getMapper(AccountMapper.class); List<Account> all = mapper.findAll(); for (Account account : all) { System.out.println(account); } sqlsession.close(); } @Test public void fun2(){ SqlSession sqlsession = MybatisUtils.getSqlsession(); UserMapper mapper = sqlsession.getMapper(UserMapper.class); List<User> all = mapper.findAll(); for (User user : all) { System.out.println(user); System.out.println(user.getAccounts()); } sqlsession.close(); } }
一对一 的延迟加载结果
- 延迟加载之前的输出
- 使用延迟加载,为了简洁,未打印user
与没有开启延迟加载的区别是,延迟加载只有使用到才会使用sql去查询,并且是一个一个输出。而非延迟加载是全部sql都执行一遍。
一对多的延迟加载
相关文章推荐
- mybatis3.2.7学习笔记2_一对一、一对多、多对多、延时加载、缓存
- mybatis 框架 的应用之四(一对一 与 一对多)
- Mybatis中的高级映射一对一、一对多、多对多
- 基于PHP的加载类操作以及其他两种魔术方法的应用实例
- mybatis 详解(七)------一对一、一对多、多对多
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- mybatis复杂应用的简单实例
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- MavenWeb项目MyBatis简单的注解使用(一对一,一对多,多对多关系查询)
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
- MyBatis关联映射,一对多实例:增删改查
- Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
- Mybatis实现多表查询【多对一,一对一,一对多,多对多】(主要学习常用的方式)
- mybatis 详解(七)------一对一、一对多、多对多
- ADS下的分散加载文件应用实例
- MyBatis高级映射之-一对一(一对多)关联映射
- MyBatis多表查询(一对一,多对一,一对多,多对多)
- Mybatis 一对多 多对一查询实例
- mybatis 一对一,一对多,评论处理和回显