SqlSessionFactoryBuilder
占用xml解析资源,最好随时使用,随时抛弃,最好的scope是method scopse。
SqlSessionFactory
一旦创建,不应销毁,持续使用。Scope = Application。最好使用Dependency Injection provided by Spring.
SqlSession(一次SQL的访问会话)
每个Thread都应该hold一个SqlSession,SqlSession不是Thread Safe的。Scope = Method。
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}
Mapper Instances
用来把方法绑定到sql的接口,可以通过SqlSession实例化。 Scope = Method。不用显式的销毁。
Mapper Configuration XML
configuration
o properties -- java properties,可以在配置中作为变量使用
o settings -- cacheEnabled, lazyLoadingEnabled,useColumnLabels,
<settings> <setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="enhancementEnabled" value="false"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25000"/> </settings>
o typeAliases -- 在配置文件中有效,简化输入,内建aliase同Java全小写,包装类加"_",eg.bigdecimal
o typeHandlers -- 使Java type同JDBC type做匹配
public class ExampleTypeHandler implements TypeHandler { public void setParameter( PreparedStatement ps, int i, Object parameter,JdbcType jdbcType) throws SQLException { ps.setString(i, (String) parameter); } public Object getResult( ResultSet rs, String columnName) throws SQLException { return rs.getString(columnName); } public Object getResult( CallableStatement cs, int columnIndex) throws SQLException { return cs.getString(columnIndex); } } // MapperConfig.xml <typeHandlers> <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/> </typeHandlers>
o objectFactory
o plugins
o environments
environment
• transactionManager
• dataSource
o mappers