Java框架篇---Mybatis 構建SqlSessionFactory

Java框架篇---Mybatis 構建SqlSessionFactorymysql

一 、從 XML 中構建 SqlSessionFactorysql

基於 MyBatis 的應用都是以一個 SqlSessionFactory 的實例爲中心的。SqlSessionFactory 的實例能夠經過 SqlSessionFactoryBuilder 得到。而 SqlSessionFactoryBuilder 則能夠從 XML 配置文件或一個預先定製的 Configuration 的實例構建出 SqlSessionFactory 的實例。
   從 XML 文件中構建 SqlSessionFactory 的實例很是簡單,建議使用類路徑下的資源文件進行配置。可是也可使用任意的輸入流(InputStream)實例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置。MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,可以使從 classpath 或其餘位置加載資源文件更加容易。

[Java] 純文本查看 複製代碼
?數據庫

String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);安全

XML 配置文件(mybatis.xml)中包含了對 MyBatis 系統的核心設置,這裏先給出一個簡單的示例:

[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>mybatis

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <!-- 配置數據庫鏈接信息 -->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </dataSource>
    </environment>
</environments>
<mappers>
    <mapper resource="com/oumyye/mapping/userMapping.xml"/>
 </mappers>

</configuration>app

固然,還有不少能夠在XML 文件中進行配置,上面的示例指出的則是最關鍵的部分。要注意 XML 頭部的聲明,用來驗證 XML 文檔正確性。environment 元素體中包含了事務管理和鏈接池的配置。mappers 元素則是包含一組 mapper 映射器(這些 mapper 的 XML 文件包含了 SQL 代碼和映射定義信息)。

2、不使用 XML 構建 SqlSessionFactory框架

若是你更願意直接從 Java 程序而不是 XML 文件中建立 configuration,或者建立你本身的 configuration 構建器,MyBatis 也提供了完整的配置類,提供全部和 XML 文件相同功能的配置項。

[Java] 純文本查看 複製代碼
?工具

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);ui

注意該例中,configuration 添加了一個映射器類(mapper class)。映射器類是 Java 類,它們包含 SQL 映射語句的註解從而避免了 XML 文件的依賴。不過,因爲 Java 註解的一些限制加之某些 MyBatis 映射的複雜性,XML 映射對於大多數高級映射(好比:嵌套 Join 映射)來講仍然是必須的。有鑑於此,若是存在一個對等的 XML 配置文件的話,MyBatis 會自動查找並加載它(這種狀況下, BlogMapper.xml 將會基於類路徑和 BlogMapper.class 的類名被加載進來)。

3、從 SqlSessionFactory 中獲取 SqlSession

既然有了 SqlSessionFactory ,顧名思義,咱們就能夠從中得到 SqlSession 的實例了。SqlSession 徹底包含了面向數據庫執行 SQL 命令所需的全部方法。你能夠經過 SqlSession 實例來直接執行已映射的 SQL 語句。例如:

[Java] 純文本查看 複製代碼
?

SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}

誠然這種方式可以正常工做,而且對於使用舊版本 MyBatis 的用戶來講也比較熟悉,不過如今有了一種更直白的方式。使用對於給定語句可以合理描述參數和返回值的接口(好比說BlogMapper.class),你如今不但能夠執行更清晰和類型安全的代碼,並且還不用擔憂易錯的字符串字面值以及強制類型轉換。例如:

[Java] 純文本查看 複製代碼?1234567SqlSession session = sqlSessionFactory.openSession();try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);} finally { session.close();}

相關文章
相關標籤/搜索