开启提早加载
#提早加载总开关mybatis-plus.configuration.lazy-loading-enabled=true#设置按需加载mybatis-plus.configuration.aggressive-lazy-loading=false
表关系
Mapper文件配置
IAccountDao.xml mapper配置文件<mapper namespace="com.itheima.dao.IAccountDao"> <!-- 定义封装account和user的resultMap --> <resultMap id="accountUserMap" type="account"> <id property="id" column="id"></id> <result property="uid" column="uid"></result> <result property="money" column="money"></result> <!-- 一对一的关系映射:配置封装user的内容 select属性指定的内容:查问用户的惟一标识: column属性指定的内容:用户依据id查问时,所须要的参数的值(resultMap中id项的column) property为account实体类中无关association的实体类的名称 javaType示意association中实体类的类型 --> <association property="user" column="uid" javaType="user" select="com.itheima.dao.IUserDao.findById"></association> </resultMap> <!-- 查问所有 一对一用到的 --> <select id="findAll" resultMap="accountUserMap"> select * from account </select> <!-- 依据用户id查问账户列表 一对多用到的 --> <select id="findAccountByUid" resultType="account"> select * from account where uid = #{uid} </select></mapper>
IUserDao.xml mapper配置<mapper namespace="com.itheima.dao.IUserDao"> <!-- 定义User的resultMap--> <resultMap id="userAccountMap" type="user"> <id property="id" column="id"></id> <result property="username" column="username"></result> <result property="address" column="address"></result> <result property="sex" column="sex"></result> <result property="birthday" column="birthday"></result> <!-- 配置user对象中accounts汇合的映射 --> <!-- 一对多的关系映射:配置封装account的内容 select属性指定的内容:查问账户的惟一标识: column属性指定的内容:用户依据id查问账户时,所须要的参数的值(resultMap中id项的column) property为user实体类中无关association的实体类的名称 ofType示意association中实体类的类型 --> <collection property="accounts" ofType="account" select="com.itheima.dao.IAccountDao.findAccountByUid" column="id"></collection> </resultMap> <!-- 查问所有 一对多用到的--> <select id="findAll" resultMap="userAccountMap"> select * from user </select> <!-- 依据id查问用户 一对一用到的--> <select id="findById" parameterType="INT" resultType="user"> select * from user where id = #{uid} </select></mapper>
实体类
public class Account implements Serializable { private Integer id; private Integer uid; private Double money; //一个账户对应一个用户,一对一 // 从表实体应该蕴含一个主表实体的对象援用 private User user;}
测试类 /** * 测试查问所有 */ @Test public void testFindAll(){ //留神看,这里咱们查问了,account 单没有 用他的user变量 List<Account> accounts = accountDao.findAll();// for(Account account : accounts){// System.out.println("--------每个account的信息------------");// System.out.println(account);// System.out.println(account.getUser());// } }
控制台输入
和测试1相比只是开释了遍历 /** * 测试查问所有 */ @Test public void testFindAll(){ List<Account> accounts = accountDao.findAll(); for(Account account : accounts){ System.out.println("--------每个account的信息------------"); System.out.println(account); System.out.println(account.getUser()); } }
当遍历到user的时候,框架会通过account类的id开始去查问user,并实现封装 ,这就是懒加载