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.
1) UNPOOLED的dataSource创建一个新的数据库连接,在每次使用时,都会重新连接。
2) POOLEDdataSource创建一个连接池。只要连接一次,其它时候使用时,将会用连接池中的数据。MyBatis提供org.apache.ibatis.datasource.PooledDataSorce,这个继承了javax.sql.DataSource去创建连接池。
3) JNDI的dataSource连接池配置在应用的服务上,使用JNDI来获取一个连接。
让我们来看看如何使用MyBatis的PooledDataSource的接口来创建一个DataSource的对象。
一般在生产环境,DataSource将会配置在应用的的服务上,和通过JNDI来获取DataSource对象。
1) JdbcTransactionFactory
2) ManageTransactionFactory
如果应用程序在没有的事务管理的环境中,那么我们将使用JdbcTransactionFactory.
如果应用的程序是应用在有事务管理的环境中,应用容器提供的事务管事服务,你需要使用ManagedTransactionFactory。
1) 使用一个单独的小写字母开头的来注册别名,不合格的类将使用默认的别名规则,使用代码如下:
2) 给出单独类的别名来注册,使用代码如下:
3) 使用完整的限定名来注册类的别名,使用代码如下:
4) 直接使用com.owen.mybatis.domain的包名来注册别名。使用代码如下:
5) 使用包名并且继承Identifiable的类型来注册。使用代码如下:
1) 特殊的Java类注册到typeHandlers。
2) 注册一个typeHandler:
3) 注册所有的typeHandler,使用包名来注册。
1) 添加单一的映射接口:
2) 添加所有的映射的XML文件或接口的包名,使用下面的代码:
3) 使用所有的映射接口和扩展接口,我们使用BaseMapper的类。
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);
相关文章推荐
- spring注解方式配置AOP
- java抽象工厂模式(Abstract Factory)-创建型
- java串口通信API说明
- Spring4.* 中整合 Hibernate
- 统计一个字符串中单个字符出现的次数
- 编程珠玑第五章二分搜索(折半查找)之java实现
- java中PreparedStatement接口及ResultSet结果集
- Spring MVC @ModelAttribute详解
- Java基础之(四) this的用法
- Java Web 获取项目路径
- springmvc 结合 ehcache
- java框架之springmvc06(数据验证)
- JAVA 多态-深层次理解
- java并发锁-Lock接口
- java文件基本操作
- leetcode 218. The Skyline Problem java代码
- Java中使用Statement接口SQL语句
- Java 工程师的学习线路图。
- Java设计模式之单例模式
- Java总结篇系列:Java泛型