笔记:MyBatis 使用 Java API配置

我们已经讨论了各种MyBatis配置元素,如envronments、typeAlias和typeHandlers,以及如何使用XML配置它们。即使你想使用基于JavaAPI的MyBatis配置,MyBatis的SqlSessionFactory接口除了使用基于XML的配置创建外也可以通过Java API 编程式地被创建。每个在XML中配置的元素,都可以编程式的创建。使用Java API创建SqlSessionFactory,代码如下:

?
?

????public?static?SqlSessionFactory?getSqlSessionFactory()??

????{??

????????SqlSessionFactory?sqlSessionFactory?=?null;??

????????try??

????????{??

????????????DataSource?dataSource?=?DataSourceFactory.getDataSource();??

????????????TransactionFactory?transactionFactory?=?new??xJdbcTransactionFactory();??

????????????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);??

????????}??

????????
?

  1. 环境配置 environment

    我们需要为想使用MaBatis连接的每一个数据库创建一个 Enviroment对象。为了使用每一个环境,我们需要为每一个环境environment创建一个SqlSessionFactory对象。而创建Environment对象,我们需要java.sql.DataSource和TransactionFactory实例。下面让我们看看如何创建DataSource 和
    TransactionFactory
    对象。

  2. 数据源DataSource

    MyBatis支持三种内建的DataSource类型: UNPOOLED, POOLED, 和JNDI.

  • UNPOOLED类型的数据源dataSource为每一个用户请求创建一个数据库连接。在多用户并发应用中,不建议使用。
  • POOLED类型的数据源dataSource创建了一个数据库连接池,对用户的每一个请求,会使用缓冲池中的一个可用的Connection对象,这样可以提高应用的性能。MyBatis提供了org.apache.ibatis.datasource.pooled.PooledDataSource 实现javax.sql.DataSource来创建连接池。
  • 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);??

????????????????}??

????????????}

}

当前有一些流行的第三方类库,如commons-dbcp和c3p0实现了java.sql.DataSource,你可以使用它们来创建dataSource。

  1. 事务工厂TransactionFactory

    MyBatis支持一下两种TransactionFactory实现:

  • JdbcTransactionFactory
  • ManagedTransactionFactory

如果你的应用程序运行在未托管(non-managed)的环境中,你应该使用JdbcTransactionFactory。

????????DataSource?dataSource?=?DataSourceFactory.getDataSource();??

????????TransactionFactory?txnFactory?=?new?JdbcTransactionFactory();??

????????Environment?environment?=?new?Environment("development",?txnFactory,?dataSource);??

如果你的应用程序运行在未托管(non-managed)的环境中,并且使用容器支持的事务管理服务,你应该使用ManagedTransactionFactory。

????????DataSource?dataSource?=?DataSourceFactory.getDataSource();??

????????TransactionFactory?txnFactory?=?new?ManagedTransactionFactory();??

Environment?environment?=?new?Environment("development",?txnFactory,?dataSource);?

  1. 类型别名typeAliases

    MyBatis 提供以下几种通过Configuration对象注册类型别名的方法:

  • 根据默认的别名规则,使用一个类的首字母小写、非完全限定的类名作为别名注册,可使用以下代码:

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

  • 指定指定别名注册,可使用以下代码:

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

  • 通过类的完全限定名注册相应类别名,可使用一下代码:

    configuration.getTypeAliasRegistry().registerAlias("Student",?"com.mybatis3.domain.Student");

  • 为某一个包中的所有类注册别名,可使用以下代码:

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

  • 为在com.mybatis3.domain package包中所有的继承自Identifiable类型的类注册别名,可使用以下代码:

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

  1. 类型处理器typeHandlers

    MyBatis提供了一系列使用Configuration对象注册类型处理器(type handler)的方法。我们可以通过以下方式注册自定义的类处理器:

  • 为某个特定的类注册类处理器:

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

  • 注册一个类处理器:

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

  • 注册com.mybatis3.typehandlers包中的所有类型处理器:

    configuration.getTypeHandlerRegistry().register("com.mybatis3.typehandlers");

  1. 全局参数设置Settings

    MyBatis提供了一组默认的,能够很好地适用大部分的应用的全局参数设置。然而,你可以稍微调整这些参数,让它更好地满足你应用的需要。你可以使用下列方法将全局参数设置成想要的值。

    ????????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?);

  2. Mappers

    MyBatis提供了一些使用Configuration对象注册Mapper XML文件和Mappe接口的方法。

  • 添加一个Mapper接口,可使用以下代码:

    configuration.addMapper(StudentMapper.class);??

  • 添加 com.mybatis3.mappers包中的所有Mapper XML文件或者Mapper接口,可使用以下代码:

    configuration.addMappers("com.mybatis3.mappers");??

  • 添加所有com.mybatis3.mappers包中的拓展了特定Mapper接口的Maper接口,如 aseMapper,可使用如下代码:

    configuration.addMappers("com.mybatis3.mappers",?BaseMapper.class);??

时间: 2024-12-15 23:27:55

笔记:MyBatis 使用 Java API配置的相关文章

Elasticsearch Java API 配置测试

Elasticsearch1.X,2.X,5.X随着版本的迭代,除了系统升级,Java API也做了相对较大的调整,也就是说,1.X的API在2.X以及5.X乃至未来6.X版本都不是通用的. 本例子使用的版本是5.6.5 一. 首先添加maven依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <ver

MyBatis——Java API

Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyBatis 很大程度简化了你的代码而且保持简洁,很容易理解和维护.MyBatis 3 已经引入 了很多重要的改进来使得 SQL 映射更加优秀. 应用目录结构 在我们深入 Java API 之前,理解关于目录结构的最佳实践是很重要的.MyBatis 非常灵 活, 你可以用你自己的文件来

mybatis Java API

既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyBatis 很大程度简化了你的代码而且保持简洁,很容易理解和维护.MyBatis 3 已经引入 了很多重要的改进来使得 SQL 映射更加优秀. 应用目录结构 在我们深入 Java API 之前,理解关于目录结构的最佳实践是很重要的.MyBatis 非常灵 活, 你可以用你自己的文件来做几乎所有的事情.

Kafka笔记整理(二):Kafka Java API使用

[TOC] Kafka笔记整理(二):Kafka Java API使用 下面的测试代码使用的都是下面的topic: $ kafka-topics.sh --describe hadoop --zookeeper uplooking01:2181,uplooking02:2181,uplooking03:2181 Topic:hadoop PartitionCount:3 ReplicationFactor:3 Configs: Topic: hadoop Partition: 0 Leader:

Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建

[TOC] Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建 Redis Java API使用(一):单机版本Redis API使用 Redis的Java API通过Jedis来进行操作,因此首先需要Jedis的第三方库,因为使用的是Maven工程,所以先给出Jedis的依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactI

SpringBoot学习笔记(1):配置Mybatis

SpringBoot学习笔记(1):配置Mybatis 参考资料: 1.AndyLizh的博客 2.xiaolyuh123的博客 快速开始 添加Mybatis依赖(其他依赖已省去) <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

ElasticSearch笔记整理(三):Java API使用与ES中文分词

[TOC] pom.xml 使用maven工程构建ES Java API的测试项目,其用到的依赖如下: <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.3.0</version> </dependency> <dependency> <grou

JAVA学习笔记一(JAVA输出环境变量)

package mytest; import java.util.*;; public class mymain { public static void main(String[] args) { // TODO Auto-generated method stub System.out.print(new Date()); Properties p=System.getProperties(); p.list(System.out); Runtime rt=Runtime.getRuntim