7.MyBatis延时加载
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延时加载的更多相关文章
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
- Mybatis 中延时加载
1 为了处理N+1 问题,Mybatis 引入了延时加载功能,意义是一开始并不取出关联数据,只有当使用时,才发送sql语句去取. mybatis中两个全局设置 lazyLoadingEnabled 和 ...
- MyBatis中二级缓存和延时加载同时开启的问题
首先,二级缓存默认不开启! 要配置 <setting name="cacheEnabled" value="true"/> 在MyBatis中:一级 ...
- mybatis_12延时加载_懒加载
延时加载:也叫懒加载 2.1 延迟加载 延迟加载又叫懒加载,也叫按需加载.也就是说先加载主信息,在需要的时候,再去加载从信息. 在mybatis中,resultMap标签 的association标签 ...
- JAVA的单例模式与延时加载
延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...
- 一段实现页面上的图片延时加载的js
大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较 ...
- WinForm的延时加载控件概述
这篇文章主要介绍了WinForm的延时加载控件,很实用的技巧,在C#程序设计中有着比较广泛的应用,需要的朋友可以参考下 本文主要针对WinForm的延迟加载在常用控件的实现做简单的描述.在进行C# ...
- picLazyLoad 图片延时加载,包含背景图片
/** * picLazyLoad 图片延时加载,包含背景图片 * $(img).picLazyLoad({...}) * data-original 预加载图片地址 * alon */ ;(func ...
- iOS 延时加载
这里列举了四种线程延时加载的方法, 1.performSelector方法 此方法必须在主线程中执行,并不是阻塞当前的线程 [self performSelector:@selector(delayM ...
随机推荐
- [转]gdb 调试 objc
源:http://bbs.pediy.com/showthread.php?t=159549 3. 在没有 symbols的情况下,想要下断 objc method 或者 private framew ...
- cocos2d(背景图片循环滚动)
背景图片循环滚动 使用action 实现的: 主要有两个背景图片交替循环滚动:我选的两个背景图片的宽度都是1024的 ,所以定义了#define BGIMG_WIDTH 1024 代码如下: 在Hel ...
- nginx开启后主机无法访问虚拟机的nginx解决方案
如果IP可以通的话 一般是防火墙引起 方法1.cat /etc/sysconfig/iptables # Generated by iptables-save v1. :: *filter :INPU ...
- SoapUI调用Web服务
msg = string.Empty; //string sendAddr, string destAddr, string smContent, int IsNeedreport, DateTime ...
- 判断0-N之间出现1的次数
Console.WriteLine("请输入截止数字?退出请输入y"); string input = Console.ReadLine(); int n = Convert.To ...
- 解决WP7的32位图像渐变色色阶问题
做游戏时发现背景图色阶现象严重,想了想会不会是显卡色深问题,于是加了下面一段代码,结果解决这个问题. graphics.PreferredBackBufferFormat = Microsoft.Xn ...
- Http的四种post方式
1.引言 HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交 ...
- IOS开发小记-内存管理
关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...
- 如何使用开源库,吐在VS2013发布之前,顺便介绍下V2013的新特性"Bootstrap"
如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性"Bootstrap" 刚看到Visual Studio 2013 Preview - ASP.NET, M ...
- SharePoint 2016 自定义城市和区域字段
前言 最近有这么一个需求,就是用到中国的各种行政区,然后还是三级联动,就琢磨写这么一个字段.然后,觉得挺有意义的,写字段的过程也有点心得,就想到拿到博客里分享给大家,一起看看. 1. 创建字段的解决方 ...