MyBatis運用心得(1)

zhuzhu_guang發表於2010-08-31
最近的小專案使用MyBatis作為持久層工具。就此參照官方文件,深入淺出地記錄下來
1.重要的幾個類
1)SqlSession:執行資料庫操作的具體類,應該是持有Connection連線,在MyBaits官方文件上說SqlSession是非執行緒安全的,需要為每一個執行緒建立一個新的SqlSession例項,它的作用域應該是基於Request或者方法級別的,不要將其設成靜態的。SqlSession由SqlSessionFacatory工廠類來產生:
SqlSession session = sqlSessionFactory.openSession();
每次open出來的SqlSession必須執行close方法,以釋放佔用的資料庫資源。

2)SqlSessionFactory:產生SqlSession的工廠類,它的作用域應該是application級別的,也就是唯一的,文件上建議使用靜態域或者Singleton模式,也可以使用Guice或者Spring容器來管理它(Guice和Mybatis的結合以後會提及)。SqlSessionFactory由SqlSessionFactoryBuilder產生:
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);


3)SqlSessionFactoryBuilder:顧名思義,用於產生SqlSessionFactory,文件上建議只要SqlSessionFactory已經建立,SqlSessionFactoryBuilder就沒有用了,除非還想建立多個SqlSessionFactory,所以基於方法作用域比較合適。建立SqlSessionFactory需要資料庫環境和配置,可以基於配置檔案讀取或者Configuration例項:
String resource = "configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);

SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);


4)Environment:資料庫連線環境,記錄了JDBC連線,以及所用的DataSource、事務工廠。Environment可以有"development"和"product"2種級別,在一個系統裡應該是可以配置多個Environment,但還沒有嘗試過。其可以由程式碼建立,也可以基於配置檔案
Environment environment =
new Environment("development", transactionFactory, dataSource);
<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>


5)Configuration:MyBatis的重要類,記錄了MyBatis的眾多配置,包括Environment、TypeAliases、Mappers、TypeHandlers、ObjectFactory、Plugins。這些配置項中Environment是必須的,其他的都是可選的。可以由配置檔案或者程式碼來建立
Configuration configuration = new Configuration(environment);

<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>
</configuration>


6)Mappers:Mappers是自定義的一些介面,通過annotation的方式定義Sql語句,在configuration中將這些Mappers加進來。在SqlSession中可以像xml中定義一樣執行。這應該是Mybatis模仿其他ORM的產品,Mapper也建議使用方法作用域。

相關文章