Java框架篇---Mybatis 構建SqlSessionFactory

從 XML 中構建 SqlSessionFactory

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

從 XML 文件中構建 SqlSessionFactory 的實例很是簡單,建議使用類路徑下的資源文件進行配置。可是也可使用任意的輸入流(InputStream)實例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置。MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,可以使從 classpath 或其餘位置加載資源文件更加容易。mysql

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

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

<?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="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>

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

不使用 XML 構建 SqlSessionFactory

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

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

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

從 SqlSessionFactory 中獲取 SqlSession

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

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

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

SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
} finally {
  session.close();
}

以上轉自:http://mybatis.github.io/mybatis-3/zh/getting-started.htmlmybatis

相關文章
相關標籤/搜索