Mybatis延迟加载

延迟加载测试观察延迟加载的方式

Mybatis延迟加载_第1张图片

1.延迟加载

输出语句为:
System.out.println(account.getAid());
测试结果
Mybatis延迟加载_第2张图片
可以看出,只需要获取id,所以就不用再获取account的user属性
通过日志可以看出只会有一个查询语句

select * from account

2.非延迟加载(积极加载)

会有两条查询语句
Mybatis延迟加载_第3张图片

Mybatis的延迟加载,两种配置方式:

注意:
如果配置了全局为延迟加载,在映射文件中配置了积极加载,那么改映射文件配置的那个方法,将会积极加载。

1.在核心配置文件中配置(全局配置)

Mybatis延迟加载_第4张图片

    
        
    

2.在映射文件中配置(局部配置)

Mybatis延迟加载_第5张图片

  

一、目录结构

Mybatis延迟加载_第6张图片

二、maven



    4.0.0

    com.william
    Mybatis_Day04_OTO_lazy
    1.0-SNAPSHOT

    
        1.8
        1.8
    
    
        
            org.mybatis
            mybatis
            3.4.5
        
        
            mysql
            mysql-connector-java
            5.1.47
        
        
            junit
            junit
            4.12
        
        
            log4j
            log4j
            1.2.17
        
    


三、domain实体类

1、 Account

package com.william.domain;

/**
 * @author :lijunxuan
 * @date :Created in 2020/2/2  20:35
 * @description :
 * @version: 1.0
 */
public class Account {
    private Integer aid;
    private String accountname;
    private Float money;
    private Integer userId;
    private User user;

    @Override
    public String toString() {
        return "Account{" +
                "aid=" + aid +
                ", accountname='" + accountname + '\'' +
                ", money=" + money +
                ", userId=" + userId +
                ", user=" + user +
                '}';
    }

    public Integer getAid() {
        return aid;
    }

    public void setAid(Integer aid) {
        this.aid = aid;
    }

    public String getAccountname() {
        return accountname;
    }

    public void setAccountname(String accountname) {
        this.accountname = accountname;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

2、User

package com.william.domain;

/**
 * @author :lijunxuan
 * @date :Created in 2020/2/2  20:37
 * @description :
 * @version: 1.0
 */
public class User {
   private Integer id;
   private String username;
   private String PASSWORD;
   private String sex;
   private String birthday;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", PASSWORD='" + PASSWORD + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPASSWORD() {
        return PASSWORD;
    }

    public void setPASSWORD(String PASSWORD) {
        this.PASSWORD = PASSWORD;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

四、Dao 接口

1、AccountDao

package com.william.dao;

import com.william.domain.Account;

import java.util.List;

/**
 * @author :lijunxuan
 * @date :Created in 2020/2/3  11:58
 * @description :
 * @version: 1.0
 */
public interface AccountDao {
    List findAll();
}

2、UserDao

package com.william.dao;

public interface UserDao {
   void findId(Integer id);
}

五、映射文件

延迟加载

Mybatis延迟加载_第7张图片

1、AccountDao.xml




    
        
        
        
        
        
        
        
    
    

2、UserDao.xml




    

六、核心配置文件

1、Mybatis-config.xml




    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
        
    


也可以进行全局配置延迟加载

Mybatis延迟加载_第8张图片




    
    
        
    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
        
    


七、数库配置文件

1、db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/web02
jdbc.user=root
jdbc.password=root

2、log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE, info

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n


八、测试类

1、MybatisTest.java

package com.william;

import com.william.dao.AccountDao;
import com.william.domain.Account;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

/**
 * @author :lijunxuan
 * @date :Created in 2020/2/3  12:18
 * @description :
 * @version: 1.0
 */
public class MybatisTest {
    /**
     * 一对一映射
     */
    @Test
    public void testOTO(){
        try {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis-config.xml"));
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            AccountDao mapper = sqlSession.getMapper(AccountDao.class);
            List list = mapper.findAll();
            for (Account account : list) {
                System.out.println(account.getAid());
            }
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

九、懒加载测试结果

Mybatis延迟加载_第9张图片

你可能感兴趣的:(Mybatis,mybatis)