一:创建数据库脚本
drop table project_info;
drop table status; create table status(
id number(10) primary key,
name varchar2(20) not null
); create table project_info(
id number(10) primary key,
project_name varchar2(100) not null,
start_date date not null,
end_date date not null,
status_id number(10) references status(id)
); drop sequence seq_status;
drop sequence seq_projectinfo;
create sequence seq_status;
create sequence seq_projectinfo; insert into status(id,name)values(seq_status.nextval,'已申报');
insert into status(id,name)values(seq_status.nextval,'审核中');
insert into status(id,name)values(seq_status.nextval,'已审核'); insert into project_info(id,project_name,start_date,end_date,status_id)values(seq_projectinfo.nextval,'北京社会科学院2017年申报',to_date('2017=04-02','yyyy-MM-dd'),to_date('2017=04-03','yyyy-MM-dd'),1);
insert into project_info(id,project_name,start_date,end_date,status_id)values(seq_projectinfo.nextval,'福建社会科学院2017年申报',to_date('2017=04-04','yyyy-MM-dd'),to_date('2017=04-05','yyyy-MM-dd'),1);
insert into project_info(id,project_name,start_date,end_date,status_id)values(seq_projectinfo.nextval,'上海社会科学院2017年申报',to_date('2017=04-06','yyyy-MM-dd'),to_date('2017=04-07','yyyy-MM-dd'),1);

  二:项目目录结构

三:在src下创建jdbc.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=system
password=orcl

四:在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

五:在src下创建mybatis-config.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>
<properties resource="jdbc.properties"/>
<settings>
<!-- 开启延时加载开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置延时加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<typeAliases>
<typeAlias type="com.pojo.ProjectInfo" alias="ProjectInfo"/>
<typeAlias type="com.pojo.Status" alias="Status"/>
</typeAliases>
<environments default="developement">
<environment id="developement">
<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>
<mappers>
<mapper resource="com/mapper/ProjectInfoMapper.xml"/>
</mappers>
</configuration>
六:在src的com.util包下创建MyBatisUtil.java

package com.util;
import java.io.IOException;
import java.io.InputStream;
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;
// 获取Sqlsessin的工具类
public class MyBatisUtil {
public static SqlSessionFactory sqlSessionFactory=null;
static{
try {
//解析xml
//InputStream is=MyBatisUtil.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
System.out.println("解析xml文件或创建sqlSessionFactory错误!");
e.printStackTrace();
}

}
//获取SqlSession对象
public static SqlSession getSqlSession(boolean isCommit){
return sqlSessionFactory.openSession(isCommit);

}
}

七:在src的com.pojo包下创建Status.java

package com.pojo;
//一方:申报类型表
//一对多:引入集合
public class Status {
private Integer id;
private String name;
public Status() {
super();
}
public Status(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Status [id=" + id + ", name=" + name + "]";
}
}

八:在src的com.pojo包下创建ProjectInfo.java

package com.pojo;

import java.util.Date;

//多方:项目表
//多对一:引入对象
public class ProjectInfo {
private Integer id;
private String project_name;
private Date start_date;
private Date end_date;
private Status status;//外建列引入对象
public ProjectInfo() {

}
public ProjectInfo(Integer id, String projectName, Date startDate,
Date endDate, Status status) {
super();
this.id = id;
project_name = projectName;
start_date = startDate;
end_date = endDate;
this.status = status;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProject_name() {
return project_name;
}
public void setProject_name(String projectName) {
project_name = projectName;
}
public Date getStart_date() {
return start_date;
}
public void setStart_date(Date startDate) {
start_date = startDate;
}
public Date getEnd_date() {
return end_date;
}
public void setEnd_date(Date endDate) {
end_date = endDate;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
@Override
public String toString() {
return "ProjectInfo [end_date=" + end_date + ", id=" + id
+ ", project_name=" + project_name + ", start_date=" + start_date
+ ", status=" + status + "]";
}
}

九:在src的com.mapper包下创建ProjectInfoMapper.java

package com.mapper;

import java.util.List;

import com.pojo.ProjectInfo;
import com.pojo.Status;

//项目信息映射接口
public interface ProjectInfoMapper {
List<ProjectInfo> findProject();
Status findByStatusId(Integer id);
}

十:在src的com.mapper包下创建ProjectInfoMapper.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.ProjectInfoMapper">
<select id="findProject" resultMap="projectmap">
select * from project_info
</select>
<resultMap type="ProjectInfo" id="projectmap">
<id property="id" column="ID"/>
<result property="project_name" column="PROJECT_NAME"/>
<result property="start_date" column="START_DATE"/>
<result property="end_date" column="END_DATE"/>
<association property="status" column="STATUS_ID" javaType="Status" select="findByStatusId"/>
</resultMap>
<select id="findByStatusId" resultType="Status" parameterType="Integer">
select * from status where id=#{id}
</select>
</mapper>

十一:在src的com.mapper.impl包下创ProjectInfoMapperImpl.java

package com.mapper.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mapper.ProjectInfoMapper;
import com.pojo.ProjectInfo;
import com.pojo.Status;
import com.util.MyBatisUtil;
//项目信息映射接口实现类
public class ProjectInfoMapperImpl implements ProjectInfoMapper{

public Status findByStatusId(Integer id) {
SqlSession sqlSession=MyBatisUtil.getSqlSession(false);
ProjectInfoMapper mapper=sqlSession.getMapper(ProjectInfoMapper.class);
Status status=mapper.findByStatusId(id);
sqlSession.close();
return status;
}

public List<ProjectInfo> findProject() {
SqlSession sqlSession=MyBatisUtil.getSqlSession(false);
ProjectInfoMapper mapper=sqlSession.getMapper(ProjectInfoMapper.class);
List<ProjectInfo> list=mapper.findProject();
sqlSession.close();
return list;
}

}

十二:在src的com.test包下创建Test.java

package com.test;

import java.util.List;

import com.mapper.ProjectInfoMapper;
import com.mapper.impl.ProjectInfoMapperImpl;
import com.pojo.ProjectInfo;

//测试类
public class Test {
public static void main(String[] args) {
ProjectInfoMapper mapper=new ProjectInfoMapperImpl();
System.out.println("延迟加载:");
List<ProjectInfo> list=mapper.findProject();
for(ProjectInfo projectInfo:list){
System.out.println(projectInfo);
System.out.println(projectInfo.getStatus());
}
System.out.println("根据id查询状态信息");
//System.out.println(mapper.findByStatusId(1));
}
}

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

  1. mybatis源代码分析:mybatis延迟加载机制改进

    在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...

  2. mybatis源代码分析:深入了解mybatis延迟加载机制

    下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是 ...

  3. MyBatis使用DEMO及cache的使用心得

    下面是一个简单的MyBatis使用DEMO. 整体结构 整体代码大致如下: POM依赖 需要引用两个jar包,一个是mybatis,另一个是mysql-connector-java,如果是maven工 ...

  4. MyBatis的demo

    把以前写的关于mybatis的demo放在这边,以便查看. 目录结构: package com.test.mybatis.util; import java.io.IOException; impor ...

  5. 【MyBatis】MyBatis 延迟加载策略

    MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提 ...

  6. Mybatis【20】-- Mybatis延迟加载怎么处理?

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-16-lazyload,需要自取,需要配置mave ...

  7. MyBatis 延迟加载,一级缓存,二级缓存设置

    什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...

  8. Mybatis入门DEMO

    下面将通过以下步骤说明如何使用MyBatis开发一个简单的DEMO: 步骤一:新建表STUDENTS 字段有: Stu_Id.Stu_Name.Stu_Age.Stu_Birthday CREATE ...

  9. mybatis——延迟加载

    ------------------------------------------------SqlMapConfig.xml------------------------------------ ...

  10. mybatis延迟加载

    配置完成后可能会报错Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath 是由于 ...

随机推荐

  1. Servlet和Filter的url匹配以及url-pattern详解

    Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜.估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,ser ...

  2. android.intent.category.LAUNCHER和android.intent.action.MAIN

    一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢? 有些程序可能需要显示在程序列表里,有些不需要.怎么定义呢? android. ...

  3. tp3.2关联模型 BELONGS_TO

    <?php namespace Home\Model; use Think\Model\RelationModel; class AttenModel extends RelationModel ...

  4. c#.NET中日志信息写入Windows日志中解决方案

    1. 目的应用系统的开发和维护离不开日志系统,选择一个功能强大的日志系统解决方案是应用系统开发过程中很重要的一部分.在.net环境下的日志系统解决方案有许多种,log4net是其中的佼佼者.在Wind ...

  5. CSS3的transform属性

    CSS3的一些属性可能比较新,有一些书从国外翻译到国内的时间上会延缓1-2年.所以有一些东西还需要及时整理. 下面说一下CSS3的一个属性:transform 其实字面上的意思已经很明显了就是变化,变 ...

  6. spring boot 基础学习

    构建微服务:Spring boot 入门篇 http://www.cnblogs.com/ityouknow/p/5662753.html SpringBoot入门系列:第一篇 Hello World ...

  7. Centos 查看版本

    # cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)

  8. numpy array转置与两个array合并

    我们知道,用 .T 或者 .transpose() 都可以将一个矩阵进行转置. 但是一维数组转置的时候有个坑,光transpose没有用,需要指定shape参数, 在array中,当维数>=2, ...

  9. DNS安装配置

    安装Bind软件: rpm -qa | grep bind bind-utils--.x86_64 bind--.x86_64 bind-libs--.x86_64 配置named.conf , vi ...

  10. js抽象工厂模式

    抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要知道或关心实际生产出的具体产品是什么.这样客户就可以从具体 ...