• 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日志文件

     1 log4j.rootLogger=DEBUG, Console  
     2   
     3 #Console  
     4 log4j.appender.Console=org.apache.log4j.ConsoleAppender  
     5 log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
     6 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
     7   
     8 log4j.logger.java.sql.ResultSet=INFO  
     9 log4j.logger.org.apache=INFO  
    10 log4j.logger.java.sql.Connection=DEBUG  
    11 log4j.logger.java.sql.Statement=DEBUG  
    12 log4j.logger.java.sql.PreparedStatement=DEBUG   
    log4j.properties

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

    1 driver=oracle.jdbc.driver.OracleDriver
    2 url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
    3 username=scott
    4 password=tiger
    jdbc.properties

    4.在src下创建Configuration.xml主配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
     3 <configuration>
     4    <!-- 1.jdbc链接数据库的主配置文件 -->
     5    <properties resource="jdbc.properties"/>
     6    
     7    <!-- 2.全局参数配置 -->
     8    <settings>
     9         <!--打开延迟加载的开关  -->
    10         <setting name="lazyLoadingEnabled" value="true"/>
    11          <!--将积极加载改为消极加载及按需加载  -->
    12         <setting name="aggressiveLazyLoading" value="false"/>
    13    </settings>
    14    
    15    <!-- 别名配置 -->
    16    <typeAliases>
    17      <typeAlias type="com.entity.Dept" alias="Dept"/>
    18      <typeAlias type="com.entity.Emp" alias="Emp"/>
    19    </typeAliases>
    20    
    21    <!-- 3.数据源的配置 -->
    22    <environments default="development">
    23      <environment id="development">
    24        <transactionManager type="jdbc"/>
    25        <dataSource type="POOLED">
    26          <property name="driver" value="${driver}"/>
    27          <property name="url" value="${url}"/>
    28          <property name="username" value="${username}"/>
    29          <property name="password" value="${password}"/>
    30        </dataSource>
    31      </environment>
    32    </environments>
    33    <!-- 4.注册映射文件 -->
    34    <mappers>
    35      <mapper resource="com/mapper/ScottMapper.xml"/>
    36    </mappers>
    37    
    38 </configuration>
    Configuration.xml

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

     1 package com.entity;
     2 
     3 public class Dept {
     4     
     5     private int deptno;
     6     
     7     private String dname;
     8     
     9     public Dept() {
    10     }
    11     public Dept(int deptno, String dname) {
    12         this.deptno = deptno;
    13         this.dname = dname;
    14     }
    15     public int getDeptno() {
    16         return deptno;
    17     }
    18     public void setDeptno(int deptno) {
    19         this.deptno = deptno;
    20     }
    21     public String getDname() {
    22         return dname;
    23     }
    24     public void setDname(String dname) {
    25         this.dname = dname;
    26     }
    27     @Override
    28     public String toString() {
    29         return "Dept [deptno=" + deptno + ", dname=" + dname + "]";
    30     }
    31     
    32 
    33 }
    Dept.java

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

     1 package com.entity;
     2 
     3 public class Emp {
     4     private int empno; //员工编号
     5     private String ename; //员工姓名
     6     private double sal; //工资
     7     private Dept dept; //外键列:部门对象
     8     
     9     
    10     public Emp() {
    11     }
    12     public Emp(int empno, String ename, double sal, Dept dept) {
    13         this.empno = empno;
    14         this.ename = ename;
    15         this.sal = sal;
    16         this.dept = dept;
    17     }
    18     public int getEmpno() {
    19         return empno;
    20     }
    21     public void setEmpno(int empno) {
    22         this.empno = empno;
    23     }
    24     public String getEname() {
    25         return ename;
    26     }
    27     public void setEname(String ename) {
    28         this.ename = ename;
    29     }
    30     public double getSal() {
    31         return sal;
    32     }
    33     public void setSal(double sal) {
    34         this.sal = sal;
    35     }
    36     public Dept getDept() {
    37         return dept;
    38     }
    39     public void setDept(Dept dept) {
    40         this.dept = dept;
    41     }
    42     
    43 /*    @Override
    44     public String toString() {
    45         return "Emp [ empno=" + empno + ", ename=" + ename
    46                 + ", sal=" + sal + "]";
    47     }*/
    48     
    49     
    50 
    51 }
    Emp.java

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

     1 package com.util;
     2 
     3 import java.io.IOException;
     4 import java.io.Reader;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 public class MyBatisUtil {
    12     private static SqlSessionFactory sqlSessionFactory=null;
    13     static{
    14         try {
    15             Reader reader=Resources.getResourceAsReader("Configuration.xml");
    16             sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
    17         } catch (IOException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21     
    22     public static SqlSession getSeqlsession(boolean isCommit){
    23         return sqlSessionFactory.openSession(isCommit);
    24     }
    25 
    26 }
    MyBatisUtil.java

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

     1 package com.mapper;
     2 
     3 import java.util.List;
     4 
     5 import com.entity.Dept;
     6 import com.entity.Emp;
     7 
     8 /**
     9  * 映射接口
    10  * @author pc
    11  *
    12  */
    13 public interface ScottMapper {
    14    /**
    15     * 1.查询员工表是延迟加载部门信息    
    16     * @return
    17     */
    18    List<Emp> getEmpLazyLoading();
    19    
    20    /**
    21     * 2.根据部门编号查询某个部门信息
    22     * @param deptno
    23     * @return
    24     */
    25    Dept findByDeptno(int deptno);
    26    
    27     
    28 }
    ScottMapper.java

    9.在src下com.mapper包下创建ScottMapper.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <mapper namespace="com.mapper.ScottMapper">
     4   <!-- 1.查询从表数据Emp -->
     5   <select id="getEmpLazyLoading" resultMap="EmpLazyLoading">
     6      select * from emp
     7   </select>
     8   
     9   <!-- 2.配置id=EmpLazyLoading的resultMap -->
    10   <resultMap id="EmpLazyLoading" type="Emp">
    11      <id property="empno" column="empno"/>
    12      <result property="ename" column="ename"/>
    13      <result property="sal" column="sal"/>
    14      
    15      <!-- 外键字段:多对一映射 -->
    16      <association property="dept" javaType="Dept" column="deptno" select="findByDeptno"/>
    17   </resultMap>
    18   
    19   <!-- 3.根据部门编号查询部门信息 -->
    20   <select id="findByDeptno" parameterType="int" resultType="Dept">
    21      select * from dept where deptno=#{deptno}
    22   </select>
    23   
    24 </mapper>
    ScottMapper.xml

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

     1 package com.mapper.impl;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.session.SqlSession;
     6 
     7 import com.entity.Dept;
     8 import com.entity.Emp;
     9 import com.mapper.ScottMapper;
    10 import com.util.MyBatisUtil;
    11 
    12 public class ScottMapperImpl implements ScottMapper {
    13     /**
    14      * 1.查询所有员工信息
    15      */
    16     public List<Emp> getEmpLazyLoading() {
    17         SqlSession sqlSession=MyBatisUtil.getSeqlsession(false);
    18         ScottMapper mapper=sqlSession.getMapper(ScottMapper.class);
    19         List<Emp> emp=mapper.getEmpLazyLoading();
    20         sqlSession.close();
    21         return emp;
    22     }
    23     /**
    24      * 2.根据部门编号查询部门信息
    25      */
    26     public Dept findByDeptno(int deptno) {
    27         SqlSession sqlSession=MyBatisUtil.getSeqlsession(false);
    28         ScottMapper mapper=sqlSession.getMapper(ScottMapper.class);
    29         List<Emp> emp=mapper.getEmpLazyLoading();
    30         Dept dept=mapper.findByDeptno(deptno);
    31         sqlSession.close();
    32         return dept;
    33     }
    34 
    35 
    36 }
    ScottMapperImpl.java

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

     1 package com.test;
     2 
     3 import java.util.List;
     4 
     5 import com.entity.Emp;
     6 import com.mapper.ScottMapper;
     7 import com.mapper.impl.ScottMapperImpl;
     8 
     9 public class Test {
    10     public static void main(String[] args) {
    11         ScottMapper mapper=new ScottMapperImpl();
    12         List<Emp> list=mapper.getEmpLazyLoading();
    13         for (Emp emp : list) {
    14             System.out.println(emp.getDept().getDname());
    15         }
    16         //System.out.println(mapper.findByDeptno(10));;
    17     }
    18 
    19 }
    Test.java
  • 相关阅读:
    [Linux] Chmod 改变权限
    [linux命令]基本命令
    [Linux命令] 查看目录大小du
    [Linux命令]格式化mkfs
    在VMWare下的Linux切换
    .net的MSMQ异步调用
    CASSINI源代码分析
    [Wix] RadioButton与ListItem的属性要改掉了
    如何快速生成Insert数据插入语句?
    撕纸
  • 原文地址:https://www.cnblogs.com/holly8/p/5805079.html
Copyright © 2020-2023  润新知