• 笔记: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);  

  • 相关阅读:
    jquery引入页面公共部分
    webpack1:安装webpack及项目创建
    windows命令中的cd
    区分IE8 、IE9 、IE10的专属css hack
    HSLA色相饱和透明度
    jquery开关按钮效果
    Jquery样式
    CSS文本溢出显示省略号
    数组重排
    webstorm node 3000端口被占用
  • 原文地址:https://www.cnblogs.com/li3807/p/7061890.html
Copyright © 2020-2023  润新知