您的位置:首页 > 编程语言 > Java开发

MyBatis基于Java API配置

2016-07-02 23:16 393 查看
在前面的章节中,我们已经探讨了多样的MyBatis配置的参数,像environments,typeAliases,和typeHandler,和如何去运用XML的文件 来配置它们。尽管你想运用基于JavaAPI来配置MyBatis,最好就是你已经理解了前面笔者介绍过的关于MyBatis的配置文件各个参数的意思。在这一节中,我们将会涉及到类的注解使用前面的配置。

 

MyBatis的SqlSessionFactory的接口可以基于java API的方式来创建。在前面的章节中,我们使用过年的基于XML的配置文件的参数,都可以转换为注解的方法,或编程的方式。

我们可以使用以下的java API来创建SqlSessionFactory.

public static SqlSessionFactory getSqlSessionFactory()
{
SqlSessionFactory sqlSessionFactory = null;
try{
DataSource dataSource = DataSourceFactory.getDataSource();
TransactionFactory transactionFactory = new
JdbcTransactionFactory();
Environment environment = new Environment("development",
transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.getTypeAliasRegistry().registerAlias("student",
Student.class);
configuration.getTypeHandlerRegistry().register(PhoneNumber.
class,PhoneTypeHandler.class);
configuration.addMapper(StudentMapper.class);
sqlSessionFactory = new SqlSessionFactoryBuilder().
build(configuration);
}catch (Exception e){
throw new RuntimeException(e);
}
return sqlSessionFactory;
}


1. Enviroment

   我们运用MyBatis的连接数据库时,我们需要为每个数据库创建Environment对象。为了作用在多套的数据库上,我们需要创建一个SqlSessionFactory对象给每个environment.为了创建 Enviroment的参数,我们需要javax.sql.DataSource和TransactionFactory这两个类的实例。让我们来看一下如何去创建DataSource和TransactionFactory的对象。

2. DataSource

MyBatis提供了DataSource类型有:UNPOOLED,POOLED,JBDI。

1)        UNPOOLED的dataSource创建一个新的数据库连接,在每次使用时,都会重新连接。

2)        POOLEDdataSource创建一个连接池。只要连接一次,其它时候使用时,将会用连接池中的数据。MyBatis提供org.apache.ibatis.datasource.PooledDataSorce,这个继承了javax.sql.DataSource去创建连接池。

3)        JNDI的dataSource连接池配置在应用的服务上,使用JNDI来获取一个连接。

让我们来看看如何使用MyBatis的PooledDataSource的接口来创建一个DataSource的对象。

public class DataSourceFactory
{
public static DataSource getDataSource()
{
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mybatisdemo";
String username = "root";
String password = "admin";
PooledDataSource dataSource = new PooledDataSource(driver, url,
username, password);
return dataSource;
}
}

一般在生产环境,DataSource将会配置在应用的的服务上,和通过JNDI来获取DataSource对象。

public class DataSourceFactory
{
public static DataSource getDataSource()
{
String jndiName = "java:comp/env/jdbc/MyBatisDemoDS";
try {
InitialContext ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup(jndiName);
return dataSource;
}
catch (NamingException e) {
throw new RuntimeException(e);
}
}
}

3. TransactionFactory

MyBatis提供了下面的两种接口来实现TransactionFactory:

1)        JdbcTransactionFactory

2)        ManageTransactionFactory

如果应用程序在没有的事务管理的环境中,那么我们将使用JdbcTransactionFactory.

DataSource dataSource = DataSourceFactory.getDataSource();
TransactionFactory txnFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", txnFactory,
dataSource);

如果应用的程序是应用在有事务管理的环境中,应用容器提供的事务管事服务,你需要使用ManagedTransactionFactory。

DataSource dataSource = DataSourceFactory.getDataSource();
TransactionFactory txnFactory = new ManagedTransactionFactory();
Environment environment = new Environment("development", txnFactory,
dataSource);

4. typeAliases

MyBatis提供了多种的方式来注册类型的别名,使用Configuration对象:

 

1)        使用一个单独的小写字母开头的来注册别名,不合格的类将使用默认的别名规则,使用代码如下:

configuration.getTypeAliasRegistry().registerAlias(Student.class);

2)        给出单独类的别名来注册,使用代码如下:

configuration.getTypeAliasRegistry().registerAlias("Student",
Student.class);


3)        使用完整的限定名来注册类的别名,使用代码如下:

configuration.getTypeAliasRegistry().registerAlias("Student",
"com.owen.mybatis.domain.Student");

4)        直接使用com.owen.mybatis.domain的包名来注册别名。使用代码如下:

configuration.getTypeAliasRegistry().registerAliases("com.
mybatis3.domain");

5)        使用包名并且继承Identifiable的类型来注册。使用代码如下:

configuration.getTypeAliasRegistry().registerAliases("com.
mybatis3.domain", Identifiable.class);

5. typeHandlers

MyBatis使用Configuration对象来实现多种方式注册typeHandlers.

1)        特殊的Java类注册到typeHandlers。

configuration.getTypeHandlerRegistry().register(PhoneNumber.
class,PhoneTypeHandler.class);

2)        注册一个typeHandler:

configuration.getTypeHandlerRegistry().register(PhoneTypeHandler.
class);

3)        注册所有的typeHandler,使用包名来注册。

configuration.getTypeHandlerRegistry().register("com.owen.mybatis.
typehandlers");

6. Settings

你可以使用下面的代码来设置Settings:

configuration.setCacheEnabled(true);
configuration.setLazyLoadingEnabled(false);
configuration.setMultipleResultSetsEnabled(true);
configuration.setUseColumnLabel(true);
configuration.setUseGeneratedKeys(false);
configuration.setAutoMappingBehavior(AutoMappingBehavior.PARTIAL);
configuration.setDefaultExecutorType(ExecutorType.SIMPLE);
configuration.setDefaultStatementTimeout(25);
configuration.setSafeRowBoundsEnabled(false);
configuration.setMapUnderscoreToCamelCase(false);
configuration.setLocalCacheScope(LocalCacheScope.SESSION);
configuration.setAggressiveLazyLoading(true);
configuration.setJdbcTypeForNull(JdbcType.OTHER);
Set<String> lazyLoadTriggerMethods = new HashSet<String>();
lazyLoadTriggerMethods.add("equals");
lazyLoadTriggerMethods.add("clone");
lazyLoadTriggerMethods.add("hashCode");
lazyLoadTriggerMethods.add("toString");
configuration.setLazyLoadTriggerMethods(lazyLoadTriggerMethods );

7. Mappers

MyBatis提供了多种方式来注册MapperXML的文件和使用Mapper的接口Configuration对象。

1)        添加单一的映射接口:

configuration.addMapper(StudentMapper.class);

2)        添加所有的映射的XML文件或接口的包名,使用下面的代码:

<pre name="code" class="html">configuration.addMappers("com.mybatis3.mappers");



3)        使用所有的映射接口和扩展接口,我们使用BaseMapper的类。

configuration.addMappers("com.owen.mybatis.mappers", BaseMapper.
class);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: