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 ...
随机推荐
- 兼容ie6的图片垂直居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Jquery文本框值改变事件(支持火狐、ie)
Jquery值改变事件支持火狐和ie浏览器,并且测试通过,绑定后台代码可以做成autocomplete控件. 具体代码列举如下: $(document).ready(function () { $(& ...
- 【C#】Smtp发送邮件
class SmtpEmail { SmtpClient smtpclient; MailMessage msg; Attachment attachment; public void sendMai ...
- 广告基本知识-ROI分解
任何一个在线广告系统,都面临ROI的问题,对于Invest,我们先不考虑,因为对于流量有多种方式可以买回,也无法优化(当然在RTB的时候是可以优化的).Return是主要优化的方向,Return=点击 ...
- java遍历Set集合
class Person{ private String name; private int age; public Person(String name,int age){ this.name = ...
- WP8开发札记(一)WP8应用生命周期管理
在介绍生命周期前,我们先了解两个相关的概念. 1.墓碑机制:WP8与Android采用的真后台机制不同,WP8采用的是墓碑机制.一旦从当前应用程序离开(非退出),该应用会被墓碑化,这样可以更好的管理( ...
- ASP.NET MVC:多语言的三种技术处理策略
ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...
- 数模学习笔记(四)——AHP
1.层次分析法是对复杂.较为模糊的问题作出决策的简易方法. 2.步骤: (i)建立递阶层次结构模型:最高层(目标层),中间层(准则层),最底层(措施层) (ii)构造出各层次中的所有判断矩阵 各准则在 ...
- tmux tutorial
This is a great tutorial about tmux quick start: http://www.youtube.com/watch?v=wKEGA8oEWXw&nore ...
- ASP.NET发送电子邮件源码示例
using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Mail; try { ...