------------------------------------------------SqlMapConfig.xml---------------------------------------------------------

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 加载属性文件 -->

<properties resource="db.properties">

<!--properties中还可以配置一些属性名和属性值 -->

<!-- <property name="jdbc.driver" value=""/> -->

</properties>

<!-- 全局配置参数,需要时再设置 -->

<!-- 延迟加载的配置,懒加载 -->

<settings>

<!--打开延迟加载的开关  -->

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

<!--将积极加载变为消极加载     按需加载  -->

<setting name="aggressiveLazyLoading" value="false"/>

</settings>

<!-- 别名定义 -->

<typeAliases>

<!-- 针对单个别名定义 type:类型的路径 alias:别名 -->

<!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->

<!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->

<package name="mode" />

</typeAliases>

<!-- 和spring整合后 environments配置将废除 -->

<environments default="development">

<environment id="development">

<!-- 使用jdbc事务管理,事务控制由mybatis -->

<transactionManager type="JDBC" />

<!-- 数据库连接池,由mybatis管理 -->

<dataSource type="POOLED">

<property name="driver" value="${jdbc.driver}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</dataSource>

</environment>

</environments>

<!-- 通过mapper接口加载映射文件:需要遵循一些规范:需要将mapper接口名称和mapper.xml映射文件保持一致,且在一个目录中 放在一个目录 ,且同名 前提是:使用的事mapper代理方式 -->

<mappers>

<package name="mapper" />

</mappers>

</configuration>

------------------------------------pojo.java-------------------------------------------------------------

public class User {

private Integer id;

private String name;

private Integer age;

private Integer addressId;

private Address address;}

------------------------------------------

public class Address {

private Integer id;

private String sheng;

private String shi;

private String xian;

-------------------------------------mapping-----------------------------------------------

<mapper namespace="mapper.AddressMapper" >

<select id="selectAddressById" parameterType="int" resultType="address">

select * from address where id = #{value}

</select>

</mapper>

-------------------------

<mapper namespace="mapper.UserMapper" >

<!-- 延迟加载的resultMap -->

<resultMap type="user" id="UserAddressLazyLoading">

<!--对用户信息进行配置  -->

<id column="id" property="id"/>

<result column="name" property="name"/>

<result column="age" property="age"/>

<result column="address_id" property="addressId"/>

<!--对地址信息进行延迟加载  -->

<!-- select指的是所要加载的statement查询语句的id(关联查询的sql语句) -->

<!--column指的是  user表中 关联 address表的列 . javaType指的是关联映射的类 -->

<association column="address_id"  property="address" javaType="address" select="mapper.AddressMapper.selectAddressById"></association>

</resultMap>

<!-- 查询 用户关联地址,  地址信息需要延迟加载 -->

<select id="selectUserAddressLazyLoading" resultMap="UserAddressLazyLoading">

select * from user

</select>

</mapper>

--------------------------------------------------------------------------------------

public class Demo1 {

private SqlSessionFactory sqlSessionFactory;

// 此方法是在执行testFindUserById之前执行

@Before

public void setUp() throws Exception {

// 创建sqlSessionFactory

// mybatis配置文件

String resource = "SqlMapConfig.xml";

// 得到配置文件流

InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis的配置文件信息

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

@Test

public void testselectByPrimaryKey() throws Exception {

SqlSession sqlSession = sqlSessionFactory.openSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

List<User> users = userMapper.selectUserAddressLazyLoading();

for(User user: users){

System.out.println(user.getName());

}

System.out.println(".......................................");

System.out.println(users);

}

//根据id查询Address

@Test

public void testselectAddressById() throws Exception {

SqlSession sqlSession = sqlSessionFactory.openSession();

AddressMapper addressMapper = sqlSession.getMapper(AddressMapper.class);

Address address = addressMapper.selectAddressById(1);

System.out.println(address);

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

mybatis——延迟加载的更多相关文章

  1. mybatis源代码分析:mybatis延迟加载机制改进

    在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...

  2. mybatis源代码分析:深入了解mybatis延迟加载机制

    下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是 ...

  3. 【MyBatis】MyBatis 延迟加载策略

    MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提 ...

  4. MyBatis 延迟加载,一级缓存,二级缓存设置

    什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...

  5. mybatis延迟加载

    配置完成后可能会报错Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath 是由于 ...

  6. Mybatis学习记录(七)----Mybatis延迟加载

    1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——My ...

  8. mybatis延迟加载一对多

    1.实体类 package cn.bdqn.bean; import java.util.Set; /** *国家的实体类 */ public class Country { private Inte ...

  9. Mybatis延迟加载和查询缓存

    摘录自:http://www.linuxidc.com/Linux/2016-07/133593.htm 阅读目录 一.延迟加载 二.查询缓存 一.延迟加载 resultMap可以实现高级映射(使用a ...

随机推荐

  1. jquery如何根据text选择option

    百度出来的代码都是这样的: $('#test option[text="b"]').attr("selected",true); 或 $('#test').fi ...

  2. Microsoft .NET Framework 4.6.1

    适用于操作系统平台:Windows 7 SP1.Windows 8.Windows 8.1.Windows 10.Windows Server 2008 R2 SP1.Windows Server 2 ...

  3. 《SharePoint 2013 应用开发实战》目录

    博客地址:http://blog.csdn.net/FoxDave 第 1 章  1 ◄SharePoint概述►        1 1.1  SharePoint的发展历程 1 1.1.1  Sha ...

  4. sqlite的ef使用小结

    最近有一个小项目,老师推荐我用下sqlite这种轻型的数据库来进行数据的存储.轻型数据库具有其独特之处:方便,不用安装特定的软件就能够实用,关于sqlite的优点我不赘述,网上还是有好多资料的. 但我 ...

  5. javaScript学习(入门)

    不落俗套的来讲讲javascript的特点: 1.所有主流浏览器都是支持javascript的. 2.绝大部分网页都使用javascript. 3.javascript可以实现网页呈现各种动态效果. ...

  6. Git进行代码管理的心得

    git从网上下载安装后 直接可在开始菜单中找到 打开可以看到一个类似命令窗口的东西 用代码进行用户名和邮箱的设置 虽然不知道为什么但是教程叫我这么做 (ˇˍˇ) 然后似乎就可以用了 进入文件夹 输入对 ...

  7. 遗传算法的C语言实现(一):以非线性函数求极值为例

    以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...

  8. 【转】最佳Restful API 实践

    原文转自:https://bourgeois.me/rest/ REST APIs are a very common topic nowaday; they are part of almost e ...

  9. 一周学会go语言并应用 by王奇疏

    <一周学会go语言并应用> by王奇疏 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 零.安装go语言,配置环境及IDE 这部分内容不多,请参考我的这篇安装环境 ...

  10. Objective-C 中,atomic原子性一定是安全的吗?

    我们在学习OC的时候认为,atomic使用了原子性,保证了线程安全,事实真的是这样吗? nonatomic的内存管理语义是非原子性的,非原子性的操作本来就是线程不安全的,而atomic的操作是原子性的 ...