MyBatis核心接口和类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis核心接口和类相关的知识,希望对你有一定的参考价值。

三大对象:

1、SqlSessionFactoryBuilder:负责构建SqlSessionFactory,并且提供了多个build()方法的重载

2、SqlSessionFactory:创建SqlSession实例的工厂

3、SqlSession:用于执行持久化操作的对象

 

三大对象获取的步骤:

(1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。

(2)首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件的实例构建该对象。

(3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得。

(4)有了SqlSessionFactory对象之后,通过SqlSessionFactory对象的openSession()方法就可以获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法。

 

三大对象的声明周期和作用域:

《1》SqlSessionFactoryBuilder的最大特点是:用过即丢。一旦创建了SqlSessionFactoryBuilder对象之后,这个类就不再需要存在了,因此SqlSessionFactoryBuilder的最佳范围是存在方法体内,也就是局部变量而已。

《2》SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在,因此SqlSessionFactory的最佳作用域是Application(单例模式)。

《3》SqlSession对应着一次数据库回话。在每次访问数据库时都需要创建它,每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。因此最佳的作用域范围是request作用域或者方法体作用域内。

 

 

package com.ssm.utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * MyBatis的核心接口和类
 * @author Administrator
 *
 */
public class MyBatisUtil {

    private static SqlSessionFactory factory;
    
    /*
     * 在静态代码块下,factory只会被创建一次
     */
    static{
        try {
            String resource="mybatis-config.xml";
            InputStream is=Resources.getResourceAsStream(resource);
            factory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /**
     * 创建SqlSession对象
     * @return
     */
    public static SqlSession createSession(){
        return factory.openSession(false);//true为自动提交事务,true为默认值
    }
    
    /**
     * 关闭SqlSession对象
     * @param session
     */
    public static void closeSession(SqlSession session){
        if (session!=null) {
            session.close();
        }
    }
}

 

package com.ssm.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.ssm.entity.Address;
import com.ssm.entity.User;
import com.ssm.mapper.UserMapper;
import com.ssm.utils.MyBatisUtil;

public class TestUser {

    public static void main(String[] args) {
        SqlSession session=null;
        List<User> userList;
        /**
         * 查询所有user的集合
         */
        try {
            session=MyBatisUtil.createSession();
            userList = session.getMapper(UserMapper.class).getUserList();
            for (User user : userList) {
                System.out.println("userid:"+user.getId()+"\tuserName:"+user.getUserName());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            MyBatisUtil.closeSession(session);
        }
    }
}

 

以上是关于MyBatis核心接口和类的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis核心接口和类

MyBatis框架的基本要素-核心接口和类的作用范围

Mybatis 的基本要素—核心对象

阶段3 1.Mybatis_03.自定义Mybatis框架_3.自定义mybatis的编码-根据测试类中缺少的创建接口和类

MyBatis 01 快速入门

Mybatis——Dao层实现映射文件深入核心配置文件深入