您好,欢迎访问三七文档
JohnRaygjwm0826@126.com什么是MYBATIS入门Mapper的XML配置文件动SQL映射语句文件动态语句JavaAPISelectBuilderSQLBuilder既然你已经知道如何配置MyBatis和创建映射文件,你就已经准备好来提升技能了。MyBatis的JavaAPI就是你收获你所做的努力的地方。正如你即将看到的,和JDBC相比,MyBatis很大程度简化了你的代码而且保持简洁,很容易理解和维护。MyBatis3已经引入了很多重要的改进来使得SQL映射更加优秀。目录结构SqlSessionsSqlSession在我们深入JavaAPI之前,理解关于目录结构的最佳实践是很重要的。MyBatis非常灵活,你可以用你自己的文件来做几乎所有的事情。但是对于任一框架,都有一些最佳的方式。让我们看一下典型应用的目录结构:目录结构SqlSessionsSqlSession使用MyBatis的主要Java接口就是SqlSession。尽管你可以使用这个接口执行命令,获取映射器和管理事务,但我们会讨论SqlSession本身更多,首先我们还是要了解如何获取一个SqlSession实例。SqlSessions是由SqlSessionFactory实例创建的。SqlSessionFactory对象含创建SqlSession实例的所有方法。而SqlSessionFactory本身是由SqlSessionFactoryBuilder创建的,它可以从XML配置,注解或手动配置Java来创建SqlSessionFactory。SqlSessionFactoryBuilder�SqlSessionFactorySqlSessionFactoryBuilder有五个build()方法,每一种都允许你从不同的资源中创建一个SqlSession实例:SqlSessionFactorybuild(Readerreader)SqlSessionFactorybuild(Readerreader,Stringenvironment)SqlSessionFactorybuild(Readerreader,Propertiesproperties)SqlSessionFactorybuild(Readerreader,Stringenv,Propertiesprops)SqlSessionFactorybuild(Configurationconfig)第一种方法是最常用的,它使用了一个参照了XML文档或上面讨论过的更特定的SqlMapConfig.xml文件的Reader实例。可选的参数是environment和properties。Environment决定加载哪种环境,包括数据源和事务管理器。比如:示例:environmentsdefault=developmentenvironmentid=developmenttransactionManagertype=JDBC…dataSourcetype=POOLED…/environmentenvironmentid=productiontransactionManagertype=EXTERNAL…dataSourcetype=JNDI…/environment/environments如果你调用了一个使用environment参数的build方法,那么MyBatis将会使用configuration对象来配置这个environment。当然,如果你指定了一个不合法的environment,你会得到错误提示。如果你调用了其中之一没有environment参数的build方法,那么就使用默认的environment(在上面的示例中就会指定为default=”development”)。如果你调用了使用properties实例的方法,那么MyBatis就会加载那些properties(属性配置文件),并在配置中可使用它们。那些属性可以用${propName}语法形式多次用在配置文件中。回想一下,属性可以从SqlMapConfig.xml中被引用,或者直接指定它。因此理解优先级是很重要的。我们在文档前面已经提及它了,但是这里要再次重申:如果一个属性存在于这些位置,那么MyBatis将会按找下面的顺序来加载它们:�在properties元素体中指定的属性首先被读取从properties元素的类路径resource或url指定的属性第二个被读取,可以覆盖已经指定的重复属性。作为方法参数传递的属性最后被读取,可以覆盖已经从properties元素体和resource/url属性中加载的任意重复属性。因此,最高优先级的属性是通过方法参数传递的,之后是resource/url属性指定的,最后是在properties元素体中指定的属性。总结一下,前四个方法很大程度上是相同的,但是由于可以覆盖,就允许你可选地指定environment和/或properties。这里给出一个从SqlMapConfig.xml文件创建SqlSessionFactory的示例:Stringresource=org/mybatis/builder/MapperConfig.xml;Readerreader=Resources.getResourceAsReader(resource);SqlSessionFactoryBuilderbuilder=newSqlSessionFactoryBuilder();SqlSessionFactoryfactory=builder.build(reader);最后一个build方法使用了一个Configuration实例。configuration类包含你可能需要了解SqlSessionFactory实例的所有内容。Configuration类对于配置的自查很有用,包含查找和操作SQL映射(不推荐使用,因为应用正接收请求)。configuration类有所有配置的开关,这些你已经了解了,只在JavaAPI中露出来。这里有一个简单的示例,如何手动配置configuration实例,然后将它传递给build()方法来创建SqlSessionFactory:DataSourcedataSource=BaseDataTest.createBlogDataSource();TransactionFactorytransactionFactory=newJdbcTransactionFactory();Environmentenvironment=newEnvironment(development,transactionFactory,dataSource);Configurationconfiguration=newConfiguration(environment);configuration.setLazyLoadingEnabled(true);configuration.setEnhancementEnabled(true);configuration.getTypeAliasRegistry().registerAlias(Blog.class);configuration.getTypeAliasRegistry().registerAlias(Post.class);configuration.getTypeAliasRegistry().registerAlias(Author.class);configuration.addMapper(BoundBlogMapper.class);configuration.addMapper(BoundAuthorMapper.class);SqlSessionFactoryBuilderbuilder=newSqlSessionFactoryBuilder();SqlSessionFactoryfactory=builder.build(configuration);现在你有一个SqlSessionFactory,可以用来创建SqlSession实例。SqlSessionFactoryBuilder�SqlSessionFactorySqlSessionFactory有六个方法可以用来创建SqlSession实例。通常来说,如何决定是你选择下面这些方法时:事务:你想为session使用事务或者使用自动提交(通常意味着很多数据库和/或JDBC驱动没有事务)?连接:你想MyBatis获得来自配置的数据源的连接还是提供你自己定义的连接?执行:你想MyBatis复用预处理语句和/或批量更新语句(包括插入和删除)?重载的openSession()方法签名设置允许你选择这些可选中的任何一个组合:SqlSessionopenSession()SqlSessionopenSession(booleanautoCommit)SqlSessionopenSession(Connectionconnection)SqlSessionopenSession(TransactionIsolationLevellevel)SqlSessionopenSession(ExecutorTypeexecType,TransactionIsolationLevellevel)SqlSessionopenSession(ExecutorTypeexecType)SqlSessionopenSession(ExecutorTypeexecType,booleanautoCommit)SqlSessionopenSession(ExecutorTypeexecType,Connectionconnection)ConfigurationgetConfiguration();默认的openSession()方法没有参数,它会创建有如下特性的SqlSession:�将会开启一个事务(也就是不自动提交)范围�连接对象会从由活动环境配置的数据源实例中得到。�事务隔离级别将会使用驱动或数据源的默认设置。�预处理语句不会被复用,也不会批量处理更新。这些方法大都可以自我解释的。开启自动提交,传递“true”给可选的autoCommit参数。提供自定义的连接,传递一个Connection实例给connection参数。注意没有覆盖同时设置Connection和autoCommit两者的方法,因为MyBatis会使用当前connection对象提供的设置。MyBatis为事务隔离级别调用使用一个Java枚举包装器,称为TransactionIsolationLevel,否则它们按预期的方式来工作,并有JDBC支持的5级(NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ,SERIALIZABLE)还有一个可能对你来说是新见到的参数,就是ExecutorType。这个枚举类型定义了3个值:ExecutorType.SIMPLE这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。ExecutorType.REUSE这个执行器类型会复用预处理语句。ExecutorType.BATCH这个执行器会批量执行所有更新语句,如果SELECT在它们中间执行还会标定它们是必须的,来保证一个简单并易于理解的行为。注意:在SqlSessionFactory中还有一个方法我们没有提及,就是getConfiguration()。这个方法会返回一个Configuration实例,在运行时你可以使用它来自检MyBatis的配置。注意:如果你已经使用之前版本MyBatis,你要回忆那些session,transaction和batch都是分离的。现在和以往不同了,这些都包含在session的范围内了。你需要分开处理事务或批量操作来得到它们的效果。目录结
本文标题:JavaAPI
链接地址:https://www.777doc.com/doc-1084994 .html