1.创建javaWeb项目MyBatis_Lazy并在WebRoot下的WEB-INF下的lib下添加如下jar文件

cglib-nodep-2.1_3.jar

log4j-1.2.17.jar

mybatis-3.2.3.jar

ojdbc14.jar

2.在src下创建log4j.properties日志文件

 log4j.rootLogger=DEBUG, Console  

 #Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.properties

3.在src下创建jdbc.properties数据库属性文件

 driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl
username=scott
password=tiger

jdbc.properties

4.在src下创建Configuration.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>
<!-- 1.jdbc链接数据库的主配置文件 -->
<properties resource="jdbc.properties"/> <!-- 2.全局参数配置 -->
<settings>
<!--打开延迟加载的开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!--将积极加载改为消极加载及按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings> <!-- 别名配置 -->
<typeAliases>
<typeAlias type="com.entity.Dept" alias="Dept"/>
<typeAlias type="com.entity.Emp" alias="Emp"/>
</typeAliases> <!-- 3.数据源的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="jdbc"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 4.注册映射文件 -->
<mappers>
<mapper resource="com/mapper/ScottMapper.xml"/>
</mappers> </configuration>

Configuration.xml

5.在src下com.entity包下创建Dept.java

 package com.entity;

 public class Dept {

     private int deptno;

     private String dname;

     public Dept() {
}
public Dept(int deptno, String dname) {
this.deptno = deptno;
this.dname = dname;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + "]";
} }

Dept.java

6.在src下com.entity包下创建Emp.java

 package com.entity;

 public class Emp {
private int empno; //员工编号
private String ename; //员工姓名
private double sal; //工资
private Dept dept; //外键列:部门对象 public Emp() {
}
public Emp(int empno, String ename, double sal, Dept dept) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
this.dept = dept;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
} /* @Override
public String toString() {
return "Emp [ empno=" + empno + ", ename=" + ename
+ ", sal=" + sal + "]";
}*/ }

Emp.java

7.在src下com.util包下创建MyBatisUtil.java

 package com.util;

 import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory=null;
static{
try {
Reader reader=Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
} public static SqlSession getSeqlsession(boolean isCommit){
return sqlSessionFactory.openSession(isCommit);
} }

MyBatisUtil.java

8.在src下com.mapper包下创建ScottMapper.java接口

 package com.mapper;

 import java.util.List;

 import com.entity.Dept;
import com.entity.Emp; /**
* 映射接口
* @author pc
*
*/
public interface ScottMapper {
/**
* 1.查询员工表是延迟加载部门信息
* @return
*/
List<Emp> getEmpLazyLoading(); /**
* 2.根据部门编号查询某个部门信息
* @param deptno
* @return
*/
Dept findByDeptno(int deptno); }

ScottMapper.java

9.在src下com.mapper包下创建ScottMapper.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.mapper.ScottMapper">
<!-- 1.查询从表数据Emp -->
<select id="getEmpLazyLoading" resultMap="EmpLazyLoading">
select * from emp
</select> <!-- 2.配置id=EmpLazyLoading的resultMap -->
<resultMap id="EmpLazyLoading" type="Emp">
<id property="empno" column="empno"/>
<result property="ename" column="ename"/>
<result property="sal" column="sal"/> <!-- 外键字段:多对一映射 -->
<association property="dept" javaType="Dept" column="deptno" select="findByDeptno"/>
</resultMap> <!-- 3.根据部门编号查询部门信息 -->
<select id="findByDeptno" parameterType="int" resultType="Dept">
select * from dept where deptno=#{deptno}
</select> </mapper>

ScottMapper.xml

10.在src下com.mapper.impl包下创建ScottMapperImpl.java

 package com.mapper.impl;

 import java.util.List;

 import org.apache.ibatis.session.SqlSession;

 import com.entity.Dept;
import com.entity.Emp;
import com.mapper.ScottMapper;
import com.util.MyBatisUtil; public class ScottMapperImpl implements ScottMapper {
/**
* 1.查询所有员工信息
*/
public List<Emp> getEmpLazyLoading() {
SqlSession sqlSession=MyBatisUtil.getSeqlsession(false);
ScottMapper mapper=sqlSession.getMapper(ScottMapper.class);
List<Emp> emp=mapper.getEmpLazyLoading();
sqlSession.close();
return emp;
}
/**
* 2.根据部门编号查询部门信息
*/
public Dept findByDeptno(int deptno) {
SqlSession sqlSession=MyBatisUtil.getSeqlsession(false);
ScottMapper mapper=sqlSession.getMapper(ScottMapper.class);
List<Emp> emp=mapper.getEmpLazyLoading();
Dept dept=mapper.findByDeptno(deptno);
sqlSession.close();
return dept;
} }

ScottMapperImpl.java

11.在src下com.test包下创建Test.java

 package com.test;

 import java.util.List;

 import com.entity.Emp;
import com.mapper.ScottMapper;
import com.mapper.impl.ScottMapperImpl; public class Test {
public static void main(String[] args) {
ScottMapper mapper=new ScottMapperImpl();
List<Emp> list=mapper.getEmpLazyLoading();
for (Emp emp : list) {
System.out.println(emp.getDept().getDname());
}
//System.out.println(mapper.findByDeptno(10));;
} }

Test.java

7.MyBatis延时加载的更多相关文章

  1. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  2. Mybatis 中延时加载

    1 为了处理N+1 问题,Mybatis 引入了延时加载功能,意义是一开始并不取出关联数据,只有当使用时,才发送sql语句去取. mybatis中两个全局设置 lazyLoadingEnabled 和 ...

  3. MyBatis中二级缓存和延时加载同时开启的问题

    首先,二级缓存默认不开启! 要配置 <setting name="cacheEnabled" value="true"/> 在MyBatis中:一级 ...

  4. mybatis_12延时加载_懒加载

    延时加载:也叫懒加载 2.1 延迟加载 延迟加载又叫懒加载,也叫按需加载.也就是说先加载主信息,在需要的时候,再去加载从信息. 在mybatis中,resultMap标签 的association标签 ...

  5. JAVA的单例模式与延时加载

    延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...

  6. 一段实现页面上的图片延时加载的js

    大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较 ...

  7. WinForm的延时加载控件概述

    这篇文章主要介绍了WinForm的延时加载控件,很实用的技巧,在C#程序设计中有着比较广泛的应用,需要的朋友可以参考下   本文主要针对WinForm的延迟加载在常用控件的实现做简单的描述.在进行C# ...

  8. picLazyLoad 图片延时加载,包含背景图片

    /** * picLazyLoad 图片延时加载,包含背景图片 * $(img).picLazyLoad({...}) * data-original 预加载图片地址 * alon */ ;(func ...

  9. iOS 延时加载

    这里列举了四种线程延时加载的方法, 1.performSelector方法 此方法必须在主线程中执行,并不是阻塞当前的线程 [self performSelector:@selector(delayM ...

随机推荐

  1. poj2236无线网络

    这一题的大意:在救灾当中需要用网络,这堆人就用笔记本建了一个无线网,但是来,互相通信都是有距离限制的,一台电脑只能和距离他为d的电脑通信,然后一台电脑也可以通过几台电脑搭成线这样通信.然后就是输入每台 ...

  2. Google Adsense(Google网站联盟)广告申请指南

    Google AdSense 是一种获取收入的快速简便的方法,适合于各种规模的网站发布商.它可以在网站的内容网页上展示相关性较高的 Google 广告,并且这些广告不会过分夸张醒目.由于所展示的广告同 ...

  3. Android 下载模块分析(DownloadManager和DownloadProvider)

    Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...

  4. 使用 Spring 2.5 TestContext 测试DAO层

    资源准备:   mysql5.0 spring-2.5  hibernate-3.2  junit-4.jar 创建表 DROP TABLE IF EXISTS `myproject`.`boys`; ...

  5. ASP.NET Web API下的HttpController激活:程序集的解析

    ASP.NET Web API下的HttpController激活:程序集的解析 HttpController的激活是由处于消息处理管道尾端的HttpRoutingDispatcher来完成的,具体来 ...

  6. 我的Emacs折腾经验谈(一) 一些给新人的建议

    这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了. 最近在折腾emacs这个东西,首先说我曾经算是个极 ...

  7. WCF心跳判断服务端及客户端是否掉线并实现重连接

    WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...

  8. 浅谈一下SSI+Oracle框架的整合搭建

    浅谈一下SSI+Oracle框架的整合搭建 最近换了一家公司,公司几乎所有的项目都采用的是Struts2+Spring+Ibatis+Oracle的架构,上一个东家一般用的就是JSF+Spring,所 ...

  9. C++ 容器的综合应用的一个简单实例——文本查询程序

    C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...

  10. oracle存储过程异常捕获

    在oracle中捕获异常,通过 //sql执行 exception when others then dbms_output.putline('exception'); 其中others表示捕获未命名 ...