我们已经讨论了各种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);  

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

  1. Mybatis学习--Java API

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...

  2. Hadoop学习笔记1 - 使用Java API访问远程hdfs集群

    转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...

  3. Elasticsearch Java API 配置测试

    Elasticsearch1.X,2.X,5.X随着版本的迭代,除了系统升级,Java API也做了相对较大的调整,也就是说,1.X的API在2.X以及5.X乃至未来6.X版本都不是通用的. 本例子使 ...

  4. Mybatis的Java API(八)

    使用mybatis的主要Java接口就是SqlSession.可以通过这个接口来执行命令,获取映射器和事务管理. SqlSession是由SqlSessionFactory实例创建,SqlSessio ...

  5. Neo4j学习笔记(1)——使用Java API实现简单的增删改查

    阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...

  6. mybatis Java API

    既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyB ...

  7. Java数据持久层框架 MyBatis之API学习八(Java API详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  8. MyBatis——Java API

    Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...

  9. MyBatis(九):Mybatis Java API批量操作(增、删、改、查)

    最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...

随机推荐

  1. home目录迁移至新分区

    在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区. 1.创建新分区. fidisk /dev/sda:用磁盘管理器打开磁盘 n:新建 +10g :设置分区为10G w :保存 保存 ...

  2. 99%的人理解错 HTTP 中 GET 与 POST 的区别

    转自:http://www.oschina.net/news/77354/http-get-post-different GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发 ...

  3. 多文件工程的编译-Makefile的简便写法

    通常我们在命令行使用GCC对程序进行编译,如果对于单个或者几个文件时比较方便的,但当工程中的文件逐渐增多甚至变得十分庞大的时候,使用GCC显然力不从心,不好管理.因此我们有必要编写一个Makefile ...

  4. FusionCharts Marimekko图

    1.Marimekko静态页面 Marimekko.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...

  5. 嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并通过SDL显示)

    /* 编译命令:arm-linux-gcc -o show2642 264showyuv2.c -I/usr/local/ffmpeg_arm/include/ -L/usr/local/ffmpeg ...

  6. JSON对象转换成JSON字符串

    1.问题背景 有一个json对象,需要将其转换成json字符串 JSON.stringify(obj) 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  7. DataTable复制数据,深度复制

    /**/ /// <summary> /// 复制数据,深度复制 /// </summary> /// <param name="dataSourceRow&q ...

  8. 芝麻HTTP:批量部署Splash负载集群

    安装Ansible: 看官方文档去:http://www.ansible.com.cn/index.html 好像这个主控端不支持Windows? 大家虚拟机装个Ubuntu吧. 闲话少扯直接上干货: ...

  9. 使用Python收集获取Linux系统主机信息

    爬虫代理IP由芝麻HTTP服务供应商提供 使用 python 代码收集主机的系统信息,主要:主机名称.IP.系统版本.服务器厂商.型号.序列号.CPU信息.内存等系统信息. #!/usr/bin/en ...

  10. java中outputStream与inputStream的相互转换

    package com.boco.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; im ...