




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MochaFramework技术培训——之Mybatis3应用入门1MyBatis简介JDBC实现查询分析我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个步骤:加载JDBC驱动建立并获取数据库连接创建JDBCStatements对象设置SQL语句的传入参数执行SQL语句并获得查询结果对查询结果进行转换处理并将处理结果返回释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)1从JDBC到MyBatisJDBC演变到Mybatis过程第一步优化:连接获取和释放数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。可以通过DataSource
进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。1从JDBC到MyBatisJDBC演变到Mybatis过程第二步优化:SQL统一存取我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处:可读性很差,不利于维护以及做性能调优改动Java代码需要重新编译、打包部署不利于取出SQL在数据库客户端执行(取出后还得删掉中间的Java代码,编写好的SQL语句写好后还得通过+号在Java进行拼凑)可以将这些SQL语句统一集中放到配置文件或者数据库里面(以key-value的格式存放)。然后通过SQL语句的key值去获取对应的SQL语句。既然我们将SQL语句都统一放在配置文件或者数据库中,那么这里就涉及一个SQL语句的加载问题。1从JDBC到MyBatisJDBC演变到Mybatis过程第三步优化:传入参数映射和动态SQLkey-value的Map,解析的时候根据变量名的具体值来判断JSTL中的<iftest=””></if>标签——>SQL解析器1从JDBC到MyBatisJDBC演变到Mybatis过程第四步优化:结果映射和结果缓存需要返回什么类型的对象。需要返回的对象的数据结构怎么跟执行的结果映射,这样才能将具体的值赋值到对应的数据结构上进而考虑对SQL执行结果的缓存来提升性能1从JDBC到MyBatisJDBC演变到Mybatis过程第五步优化:解决重复SQL语句问题SQL抽象SQL引用1从JDBC到MyBatisMyBatis的前身就是iBatis,iBatis本身是Apache的一个开源项目,2010年这个项目由Apachesoftwarefoundation迁移到了Googlecode,并且改名为MyBatis。MyBatis作为持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs映射成数据库的记录。1MyBatis简介1MyBatis功能架构设计1MyBatis框架架构设计加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。1MyBatis简介2MyBatis
层次结构总体来说MyBatis主要完成两件事情:根据JDBC规范建立与数据库的连接;通过Annotaion/XML+JAVA反射技术,实现Java对象与关系数据库之间相互转化。MyBatis是一种典型的交互式框架准备交互的必要条件;构建一个交互的环境;构建会话环境;交换数据。1MyBatis主要的类层次结构1MyBatis功能架构设计1MyBatis框架架构设计加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。1MyBatis简介2MyBatis
层次结构3MapperXML文件MyBatis的XML配置文件包含了影响MyBatis行为的设置和属性信息。XML文档的高层级结构如下:configuration配置properties属性settings设置typeAliases类型命名typeHandlers类型处理器objectFactory对象工厂plugins插件environments环境environment环境变量transactionManager事务管理器dataSource数据源databaseIdProviderchinese?mappers映射器1MyBatis核心XML配置文件这些是极其重要的调整,它们会修改MyBatis在运行时的行为方式:1settings类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。例如:1typeAliasesMyBatis可以配置多种环境。这会帮助你将SQL映射应用于多种数据库之中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的SQL映射。一个重要的问题要注意:可以配置多种环境,但只能为每个SqlSessionFactory实例选择一个环境。也就是说每个数据库对应一个SqlSessionFactory。1environmentstransactionManager在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):JDBC–这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。MANAGED(托管)–这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)默认情况下它会关闭连接。1transactionManagerdataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。1dataSource有三种内建的数据源类型(也就是type=”[UNPOOLED|POOLED|JNDI]”)。UNPOOLED:这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。POOLED:这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前Web应用程序用来快速响应请求很流行的方法。JNDI:这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用1dataSource(续)既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句:1mappersMyBatis真正的力量是在映射语句中,SQL映射的XML文件是相当的简单。当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大量的代码量。cache-配置给定命名空间的缓存cache-ref–从其他命名空间引用缓存配置resultMap–最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象parameterMap–已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除sql–可以重用的SQL块,也可以被其他语句引用insert–映射插入语句update–映射更新语句delete–映射删除语句select–映射查询语句1MyBatisMapperXML文件1select1insert1delete1update1MyBatis简介2MyBatis
层次结构3MapperXML文件4MyBatis核心对象每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得。SqlSessionFactoryBuilder对象可以从XML配置文件,或从Configuration类的习惯准备的实例中构建SqlSessionFactory对象。1MyBatis核心对象有了SqlSessionFactory对象,就可以获得SqlSession的实例了。SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法。你可以用SqlSession实例来直接执行已映射的SQL语句。理解MyBatis核心对象的不同范围和生命周期是很重要的。不正确的使用它们会导致严重的并发问题。1MyBatis核心对象SqlSessionFactoryBuilder这个类可以被实例化,使用和丢弃。一旦你创建了SqlSessionFactory后,这个类就不需要存在了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例。SqlSessionFactory一旦被创建,SqlSessionFactory应该在你的应用执行期间都存在。没有理由来处理或重新创建它。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次。这样的操作将被视为是非常糟糕的。因此SqlSessionFactory的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。1MyBatis核心对象SqlSession每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet的HttpSession。如果你现在正用任意的Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围内。换句话说,基于收到的HTTP请求,你可以打开了一个SqlSession,然后返回响应,就可以关闭它了。关闭SqlSession很重要,你应该确保使用finally块来关闭它。1MyBatis核心对象1MyBatis简介2MyBatis
层次结构3MapperXML文件4MyBatis核心对象5MyBatis一对一和一对多映射1MyBatis一对一1MyBatis一对一Mapper接口中的方法定义1MyBatis一对一Mapper.xml1MyBatis一对多案例:一个班级有多个学生,一个学生只能属于一个班级1MyBatis一对多Mapper接口中的方法定义1MyBatis一对多Mapper.xml配置1MyBatis一对多Mapper.xml配置1MyBatis简介2MyBatis
层次结构3MyBatis
MapperXML文件4MyBatis
核心对象5MyBatis
一对一和一对多映射6MyBatis
动态SQL1MyBatis
动态SQLMyBatis的一个强大的特性之一通常是它的动态SQL能力ifchoose(when,otherwise)trim(where,set)foreach1MyBatis
动态SQL示例1MyBatis
动态SQL示例1MyBatis
动态SQL示例7MyBatis的缓存技术1MyBatis简介2MyBatis
层次结构3MyBatis
MapperXML文件4MyBatis
核心对象5MyBatis
一对一和一对多映射6MyBatis
动态SQL1MyBatis的缓存技术缓存技术是一种“以空间换时间”的设计理念,利用内存空间资源来提高数据检索速度的有效手段之一MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis3中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置MyBatis默认情况下是没有开启缓存的,除了局部的session缓存。要开启二级缓存,你需要在你的SQL映射文件中添加一行<cache/>1MyBatis的缓存技术<cache/>这个简单语句的效果如下:映射语句文件中的所有select语句将会被缓存。映射语句文件中的所有insert,update和delete语句会刷新缓存。缓存会使用LeastRecentlyUsed(LRU,最近最少使用的)算法来收回。根据时间表(比如noFlushInterval,没有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林地开路协议书
- 林地转租协议书
- 架子安全协议书
- 2025年中医儿科三基试题及答案
- 2025年中医院实操考试题及答案
- 2025年仓库收货考试题及答案解析
- 2025年免疫治疗在自身免疫性肠道疾病治疗中的应用突破
- 柿子销售协议书
- 树枝收集协议书
- 校内住宿协议书
- 反洗钱培训课件
- 人员卫生与微生物控制知识要点
- 2025-2030年钢管市场市场现状供需分析及投资评估规划分析研究报告
- 生产夜班安全管理制度
- 特种设备安全风险分级管控与隐患排查治理体系建设指导手册
- 2025-2030电熨斗行业发展分析及投资价值研究咨询报告
- 2025四川广安鑫鸿集团有限公司招聘工作人员21人笔试参考题库附带答案详解析集合
- 2025年内蒙古交通投资(集团)有限责任公司所属天骄航空有限公司招聘笔试参考题库含答案解析
- 2025-2030特钢产业发展分析及政府战略规划实施研究报告
- 飞灰资源化处置项目可行性研究报告-持续完善碳市场建设,补全飞灰处理
- T/CCAA 39-2022碳管理体系要求
评论
0/150
提交评论