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);
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM