MyBatis----延迟加载demo】的更多相关文章

在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整个结果对象就是一个代理对象,后面对这个对象的访问,都是通过代理对象去访问的,那是否有更好的方法呢? 答案是有的. Student对象关联Teacher对象,需要对Teacher对象延迟加载. 一种方式就是mybatis当前的这种做法,对Student进行代理,当访问到getTeacher时就进行延迟加载,设置…
下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是等到访问Teacher对象的属性时,才加载Teacher对象. 源代码下载:http://download.csdn.net/detail/u014569459/7363097 1.Student.java package dao.domain; public class Student { pub…
下面是一个简单的MyBatis使用DEMO. 整体结构 整体代码大致如下: POM依赖 需要引用两个jar包,一个是mybatis,另一个是mysql-connector-java,如果是maven工程的话,pom里如下添加依赖就可以了. <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</ver…
把以前写的关于mybatis的demo放在这边,以便查看. 目录结构: package com.test.mybatis.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession…
MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提高了数据库性能. 坏处:因为当需要用到数据时才进行数据库查询,这样在进行大批量数据查询时,以可能造成用户等待时间变长,造成用户体验下降. 与延迟加载相对的,就是立即加载,它指的是不管用不用,只要一调用方法,马上发起查询. 在对应的四种表关系中,一对多和多对多通常情况下采用延迟加载,而多对一和一对一通…
注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-16-lazyload,需要自取,需要配置maven环境以及mysql环境(sql语句在resource下的test.sql中),觉得有用可以点个小星星. docsify文档地址在:https://damaer.github.io/Mybatis-Learning/#/ mybatis的懒加载,也称为延迟加载,是指在进行关联查询的时候,按照设置延迟…
什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载. lazyLoadingEnabled.aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载.如果设为'false…
下面将通过以下步骤说明如何使用MyBatis开发一个简单的DEMO: 步骤一:新建表STUDENTS 字段有: Stu_Id.Stu_Name.Stu_Age.Stu_Birthday CREATE TABLE `student` ( `Stu_Id` bigint(20) NOT NULL AUTO_INCREMENT , `Stu_Name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL , `Stu_Ag…
------------------------------------------------SqlMapConfig.xml--------------------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config …
配置完成后可能会报错Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath 是由于缺少jar包   cglig-2.2.jar  asm-2.2.3.jar 配置过程 mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration P…
1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快. 2.使用association实现延…
写demo的时候,用mybatis的配置文件链接数据库,始终链接不上,太急人了.仔细查阅,发现在mysql中新增的表没有事务支持.还有就是mysql搜索引擎支持的不对.我换了一下 innodb的引擎,这引擎支持事务.结果就搞定了...哎,又学习了吧. http://baike.baidu.com/view/1238935.htm?fr=aladdin mysql表类型MyISAM和InnoDB区别(mysql 不支持事务解决) http://blog.csdn.net/ocean1010/art…
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——MyBatis关联查询 1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查…
demo结构 数据库情况 (不会转sql语句 骚瑞) 数据库连接信息 jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mysql_demo jdbc.username=root jdbc.password=root javabean Student.class package entity; public class Student { private Integer i…
1.实体类 package cn.bdqn.bean; import java.util.Set; /** *国家的实体类 */ public class Country { private Integer cId; // 国家的编号 private String cName; // 国家的名称 private Set<Provincial> provincials; public Integer getcId() { return cId; } public void setcId(Inte…
摘录自:http://www.linuxidc.com/Linux/2016-07/133593.htm 阅读目录 一.延迟加载 二.查询缓存 一.延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 在mybatis核心配置文件中配置: lazyLoad…
一.延迟加载 1.主对象的加载: 根本没有延迟的概念,都是直接加载. 2.关联对象的加载时机: 01.直接加载: 访问主对象,关联对象也要加载 02.侵入式延迟: 访问主对象,并不加载关联对象 访问主对象属性的属性的时候,关联对象会被加载 03.深度延迟 访问主对象,并不加载关联对象 访问主对象的属性的时候,关联对象也不会被加载 访问关联对象或关联对象的属性的时候,才会加载关联对象. 3.一对多延迟加载代码: 01.实体类代码: package cn.pb.bean;import java.ut…
 当你要使用one to one,many to one 就会碰到N+1的问题.很明显,对象之间关联很多有A关联B,B关联C,C关联A这样的关系,如果不是采用延迟加载,很容易一下在出现成千上万对象,造成N+1的问题. 而Mybatis 设置延迟加载主要2个属性配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//ibatis.apac…
1.mybatis-config.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuratio…
一.Mybatis中的延迟加载 1.延迟加载背景:Mybatis中Mapper配置文件中的resultMap可以实现高级映射(使用association.collection实现一对一及一对多(多对多)映射),同样的association.collection具备延迟加载功能.所谓延迟加载,就是先单表查询,需要时再从关联表去关联查询(同样也可能只是是单表查询),大大单表查询速度更快,所以可以间接的提高数据库性能 2.在mybatis核心配置文件中配置,其中lazyLoadingEnabled表示…
一.项目创建 1.项目目录结构 2.数据库配置和上一篇的一样,这里不再描述.下面创建mybatis配置文件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…
1.     什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快. 2.    打开延迟加载开…
延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 好处: 先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速 度要快. 坏处: 因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗 时间,所以可能造成用户等待时间变长,造成用户体验下降. 在对应的四种表关系中:一对多,多对一,一对一,多对多 一对多,多对多:通常情况下我们都是采用延迟加载. 多对一,一对一:通常情况下我们…
1.概念 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. 2.关联对象的加载时机 ①.直接加载 执行完对主加载对象的select语句,马上执行对关联对象的select查询 ②.侵入式延迟加载 执行对主加载对象的查询时,不会执行对关联对象的查询.但是当要访问主加载对象的详情时,就会马上执行关联对象的select查询.即对关联对象的查询执行,侵入到了主加载对象的详情访问中.也可以这样理解:将关联…
首先我们先思考一个问题,假设:在一对多中,我们有一个用户,他有100个账户. 问题1:在查询用户的时候,要不要把关联的账户查出来? 问题2:在查询账户的时候,要不要把关联的用户查出来? 解答:在查询用户的时候,用户下的账户信息应该是我们什么时候使用,什么时候去查询. 在查询账户的时候,账户的所属用户信息应该是随着账户查询时一起查询出来. 搞清楚这两个简单的问题后,我们就可以引出延迟加载和立即加载的特性. 延迟加载:在真正使用数据的时候才发起查询,不用的时候不查询关联的数据,延迟加载又叫按需查询(…
什么是延迟加载? 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息. 需求: 查询订单信息,需要时再去查询用户信息 实现方式: 编写两个statement,其中一个statement是查询订单信息,一个是查询用户信息,但是查询订单信息的statement要使用resultMap标签进行结果映射. Mapper接口: /**  * 延迟加载  查询订单 需要时在查询用户信息  * */  public List<OrderExt> lazyLoading();…
延迟加载 概念:MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. (注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的.) 加载时机 直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询. 侵入式延迟:执行对主加载对象的查询时,不会执行对关联对象的查询.但当要访问主加载对象的详情时,就会马上执行关联对象的select查…
一.什么是延迟加载 resultMap可实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 二.使用association实现延迟加…
一.何为延迟加载? 延迟加载 我们并不需要总是在加载用户信息时就一定要加载他的账户信息.此时就是我们所说的延迟加载. 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 好处: 先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速 度要快. 坏处: 因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗 时间,     所以可能造成用户等待时间变长,造成用户体验下降. 二.实现需求 两张…
延迟加载配置: 什么时候用延迟加载?比如现在有班级和学生表,一对多关系,你可能只需要班级的信息,而不需要该班级学生的信息,这时候可以进行配置,让查询时先查询到班级的信息,在之后需要学生信息时候,再进行查询,避免不必要的查询. 需要进行如下配置:这里以一对多为例,其他关系类似: PersonMapping.xml <select id="selectPersonByClassId" resultMap="class_person_map" parameterTy…