1、Mybatis簡介入門相關對象做用域(筆記)

內容來源於官網:https://mybatis.org/mybatis-3/zh/configuration.htmlhtml

1、入門簡介
簡介:MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎全部的 JDBC 代碼以及設置參數和獲取結果集的工做。java

每一個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的實例爲核心的。SqlSessionFactory 的實例能夠經過 SqlSessionFactoryBuilder 得到。
而 SqlSessionFactoryBuilder 則能夠從 XML 配置文件或一個預先配置的 Configuration 實例來構建出 SqlSessionFactory 實例。mysql

說明:工廠模式:工廠類模式提供的快速的建立單個類的模式 ,工廠只負責建立出對象,具體的方法須要你本身去實現。建造者模式:經過傳入具體對象 調用了具體定義的方法,建造者負責傳遞對象和指定對象調用何種方法。sql

導入依賴:數據庫

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

https://my.oschina.net/u/3995...安全

輸入圖片說明

一、從xml中讀取配置文件構建鏈接session

<?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>
  <environments default="development">
    <environment id="development">
      <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="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>


public class TestMyBatis {
   
    public static void main(String[] args) {
        try {
            // 基本mybatis環境
            // 1.定義mybatis_config文件地址
            String resources = "mybatis_config.xml";
            // 2.獲取InputStreamReaderIo流
            Reader reader = Resources.getResourceAsReader(resources);
            // 3.獲取SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            // 4.獲取Session
            SqlSession sqlSession = sqlSessionFactory.openSession();
            // 5.操做Mapper接口
            count=sqlSession.selectOne("com.bdqn.dao.TUserMapper.queryCount");
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

讀取配置文件,配置文件轉化爲流,經過SqlSessionFactoryBuilder處理傳入的配置文件對象,再將處理事後的配置文件對象傳給sqlSessionFactory,配置文件包括數據源和數據庫事務 去生成sqlsession對象。sqlseesion對象則可用來操做mapper接口了。mybatis

SqlSession正如以前所提到的,SqlSession 在 MyBatis 中是很是強大的一個類。它包含了全部執行語句、提交或回滾事務以及獲取映射器實例的方法。app

二、經過java代碼拉鍊接框架

jdbc建立鏈接

public static void main(String[] args) {
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    try {
        // 加載數據庫驅動
        Class.forName("com.mysql.jdbc.Driver");

        // 經過驅動管理類獲取數據庫連接
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
        // 定義sql語句 ?表示佔位符
        String sql = "select * from user where username = ?";
        // 獲取預處理statement
        preparedStatement = connection.prepareStatement(sql);
        // 設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
        preparedStatement.setString(1, "王五");
        // 向數據庫發出sql執行查詢,查詢出結果集
        resultSet = preparedStatement.executeQuery();
        // 遍歷查詢結果集
        while (resultSet.next()) {
            System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 釋放資源
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

2、做用域

一、SqlsessionFactoryBuilder : 這個類能夠被實例化、使用和丟棄,一旦建立了 SqlSessionFactory,就再也不須要它了。 所以 SqlSessionFactoryBuilder 實例的最佳做用域是方法做用域(也就是局部方法變量)。 你能夠重用 SqlSessionFactoryBuilder 來建立多個 SqlSessionFactory 實例,但最好仍是不要一直保留着它,以保證全部的 XML 解析資源能夠被釋放給更重要的事情。

二、SqlSessionFactory 一旦被建立就應該在應用的運行期間一直存在,重複建立SqlSessionFactory 會很消耗資源。

三、Sqlsession:每一個線程都應該有它本身的 SqlSession 實例。SqlSession 的實例不是線程安全的,所以是不能被共享的,因此它的最佳的做用域是請求或方法做用域。每次使用完後須要關閉。

相關文章
相關標籤/搜索