MyBatis基于Java API配置

来源:互联网 发布:怎么修改淘宝收获地址 编辑:程序博客网 时间:2024/06/07 15:41

在前面的章节中,我们已经探讨了多样的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 = newJdbcTransactionFactory();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);



















0 0
原创粉丝点击