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 ...
随机推荐
- Memcache Slab Eviction 功能测试
Memcache Slab Eviction 功能测试 1 功能简述 1.1 Automove功能背景 由于memcache的内存分配是基于slab的,每个1M的page内只能存放对应slab大小范围 ...
- EasyUI实现异步加载tree(整合Struts2)
首先jsp页面有一ul用于展现Tree <ul id="mytree"></ul> 加载Tree <script type="text/ja ...
- jquery选择器之基本过滤选择器
<style type="text/css"> /*高亮显示*/ .highlight{ background-color: gray } </style> ...
- (转)js网址验证
这个url的正则表达式判断的js!是比较全面的.它验证的情况包括!IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!是我见过的最全面的url验证了!可能还有遗漏的! <s ...
- Jquery EasyUI tabs处理
一 获取选中的 Tab 1. // 获取选中的 tab panel 和它的 tab 对象 2. var pp = $('#tt').tabs('getSelected'); 3. var ta ...
- How to make workflow chart using several tools in Linux?
Just as what I said, I usually use yED to make workflow chart and markdown as the language to write ...
- 提高你的Java代码质量吧:不要让类型默默转换
一.分析 在Java运算中的类型转换,是先运算在进行类型转换的.具体场景如下. 二.场景 在如下程序中: public class Client{ public static final int ...
- 在OpenStack虚拟机实例中创建swap分区的一种方法
测试组里一个同学负责MapR的搭建,MapR文档中建议每个节点上至少有24GB的swap分区,不知道MapR为啥会有这种反人类的建议……swap无非就是一块顺序读写的磁盘空间,莫非省着内存不用,用sw ...
- 基于Log4net插件
基本代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using log ...
- function返回值Python特殊语法:filter、map、reduce、lambda
废话就不多说了,开始... Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item顺次 ...