Mybatis 延迟加载和立即加载

立即加载

查询什么,就给我们返回什么,不会附带其他的信息。比如:当我们查询用户时,单纯的返回用户信息,不返回用户拥有的账户信息。
之前我们已经实现过了,这里不多说了。

延迟加载

又叫做按需求加载,当我们查询用户信息时,需要账户信息时,返回。不需要账户信息时,只返回用户信息。
一般情况下,我们在一对多,多对多的情况下使用延迟加载。
实现方式:一对多的情况下,我们查询一的一方时,调用多的一方查询的方法,即可实现。

1.一对一的延迟加载

用户对于账户来说,就是一对一的关系,查询账户时,需要返回用户时,返回。不需要则不返回。
第一步:开启延迟加载
在主配置文件中sqlmapconfig.xml中配置settings

	<settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

第二步:配置映射文件
1.配置account的映射文件
配置标签,select属性的内容是userDao的映射文件的namespace和userDao中查询的方法。
column的值得是sql语句查询的条件。

<resultMap id="AccountUserMap" type="account" >
        <id property="id" column="id"></id>
        <result property="uid" column="uid"></result>
        <result property="money" column="money"></result>
        <association property="user" column="uid" javaType="user" select="com.mybatis.dao.UserDao.findById"></association>
    </resultMap>
    <select id="findAll" resultMap="AccountUserMap">
        SELECT * FROM  account
    </select>

2.配置userDao的映射文件的方法
配置了查询用户的方法,需要时,调用,不需要时不调用。

	<select id="findById" parameterType="Integer" resultType="User">
        SELECT * FROM  USER WHERE id=#{uid};
    </select>

测试:
需要用户的信息,调用account.getUser()即可,不需要时,不调用即可。

  @Test
   public void testFindAll(){
      List<Account> accounts = accountDao.findAll();
      for (Account account :accounts) {
         System.out.println(account);
         //System.out.println(account.getUser());
      }
   }
2.一对多的延迟加载

步骤一样,只是配置文件中有点差别,这里用的是标签。

<resultMap id="userAccountMap" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="sex" column="sex"></result>
        <result property="brithday" column="brithday"></result>
        <result property="address" column="address"></result>
        <collection property="accounts" ofType="account" select="com.mybatis.dao.AccountDao.findAccountById" column="id"></collection>

    </resultMap>
    <select id="findAll" resultMap="userAccountMap">
       SELECT  * FROM  user
    </select>

你可能感兴趣的:(mybatis)