笔记: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);
}
- 环境配置 environment
我们需要为想使用MaBatis连接的每一个数据库创建一个 Enviroment对象。为了使用每一个环境,我们需要为每一个环境environment创建一个SqlSessionFactory对象。而创建Environment对象,我们需要java.sql.DataSource和TransactionFactory实例。下面让我们看看如何创建DataSource 和
TransactionFactory
对象。 - 数据源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。
- 事务工厂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);
- 类型别名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);
- 类型处理器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");
- 全局参数设置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 );
- 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);
笔记:MyBatis 使用 Java API配置的更多相关文章
- Mybatis学习--Java API
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...
- Hadoop学习笔记1 - 使用Java API访问远程hdfs集群
转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...
- Elasticsearch Java API 配置测试
Elasticsearch1.X,2.X,5.X随着版本的迭代,除了系统升级,Java API也做了相对较大的调整,也就是说,1.X的API在2.X以及5.X乃至未来6.X版本都不是通用的. 本例子使 ...
- Mybatis的Java API(八)
使用mybatis的主要Java接口就是SqlSession.可以通过这个接口来执行命令,获取映射器和事务管理. SqlSession是由SqlSessionFactory实例创建,SqlSessio ...
- Neo4j学习笔记(1)——使用Java API实现简单的增删改查
阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...
- mybatis Java API
既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- MyBatis——Java API
Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...
- MyBatis(九):Mybatis Java API批量操作(增、删、改、查)
最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...
随机推荐
- 安装VMware Workstation提示the msi failed的解决办法
有朋友安装VMware Workstation时出现报错,提示the msi failed等信息,原来他以前安装过绿色版.优化版的VM,但删掉后重装VM就会有这样的报错提示,如果你也遇到了相同的困扰, ...
- 子沐代码段——Flask+Mysql+Echarts可视化
前言 子沐不久前,使用Scrapy爬取了智联招聘的职位数据,并部署到服务器上,设置了定时任务.数据量日益庞大.子沐在想,数据不过只是存在数据库里,并没有什么意义,所以子沐萌发一个想法,那就是做一个可视 ...
- 解决VC6下调不出MSDN的问题!
原文:http://www.programfan.com/blog/article.asp?id=1524http://blog.programfan.com/trackback.asp?id=15 ...
- RFM模型及R语言实现
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 一.基本概念 根据美国数据库营销研究所Arth ...
- VS2008下QT开发环境搭建(转)
原博文地址:http://blog.csdn.net/sunnyboycao/article/details/6364444 VS2008集成QT4.7.2环境搭建 作者:jimmy 日期:2011- ...
- Caused by: java.lang.ClassNotFoundException: ognl.PropertyAccessor
1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 一道bfs与邻接表应用题
Problem Description 终于有一天,王元姬用他的劫打上了最强王者.他号称,他从来不会在偶数段位停留,因为他的实力太强会跳段(这个13我给满分).傲娇棠和翔妹觉得他的13装的都比勇哥哥好 ...
- java的几种引用之二
import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftR ...
- 戏说java多线程之CyclicBarrier(循环栅栏)的CyclicBarrier(int parties)构造方法
CyclicBarrier是JDK 1.5 concurrent包出现的一个用于解决多条线程阻塞,当达到一定条件时一起放行的一个类.我们先来看这样一个简单的需求. 现在我有一个写入数据的类,继承Run ...