软件架构设计实践- 基于SSM框架 课件 第9章 Mybatis框架基础_第1页
软件架构设计实践- 基于SSM框架 课件 第9章 Mybatis框架基础_第2页
软件架构设计实践- 基于SSM框架 课件 第9章 Mybatis框架基础_第3页
软件架构设计实践- 基于SSM框架 课件 第9章 Mybatis框架基础_第4页
软件架构设计实践- 基于SSM框架 课件 第9章 Mybatis框架基础_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件架构设计实战——基于SSM框架Software

Architecture

Design

Practice

Based

on

SSM

Framework第9章MyBatis框架基础123MyBatis概述MyBatis重要API简介MyBatis的配置文件4第一个MyBatis应用程序MyBatis概述在面向对象程序设计当中我们所面对的是一个一个的对象,而在关系型数据库中,所面对的是实体以及实体之间的关系,在程序设计中我们经常面临的问题是面向对象程序设计中的对象与关系型数据库中实体之间的转换,需要程序员编写大量的、重复的、与业务逻辑无关的代码,这种机械性的工作能不能被简化呢?11.1传统JDBC的劣势随着软件开发技术的不断升级,软件开发工具的不断进步,采用JDBC数据库连接方式的弊端也越来越明显,主要表现为以下四个方面:(1)SQL语句在代码中硬编码,造成代码不易维护。(2)数据表之间存在各种关系,包括一对一、一对多、多对多、级联等。如果采用JDBC编程的方式维护数据表之间的关系,过程较为复杂并且容易出错。(3)数据库连接创建、释放频繁,会造成系统资源浪费,从而影响系统性能。(4)虽然在JDBC中提供了预处理接口PreparedStatement,但是用PreparedStatement向占位符传参数存在硬编码,因为SQL语句的where条件不一定,可能有时多也可能有时少,修改SQL语句需要修改代码,造成系统不易维护。1.2ORM简介MVC设计模式实现了表现层(即View)和数据处理层(即Model)的解耦合,而持久化层的设计则是要实现数据处理层内部的业务逻辑和数据逻辑的解耦合。而ORM采用映射元数据来描述对象关系的映射,使得ORM能在任何一个应用的业务逻辑层和数据库层之间充当桥梁,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM映射1.2ORM简介在ORM的映射当中,面向对象程序设计中的类映射成关系型数据库中的表(可能一个表,可能多个表,也可能一个表的部分字段),一般采用XML文件的形式进行描述;而具体的一个个对象则映射为数据库表中的一条条记录,对象的属性映射为数据库表中的字段。1.2ORM简介(1)HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了较为轻量级的对象封装,它将对象与数据库表建立映射关系,是个全自动的ORM框架,Hibernate可以自动生成SQL语句、并自动执行,使得Java程序员可以随心所欲的使用面向对象编程思维来操作数据库,通过操作对象的方式来操作数据库极大的提高开发的效率。1.2ORM简介(2)MyBatisMyBatis是一种“半自动化”的ORM框架,和Hibernate不同,MyBatis需要手动提供POJO(PlainOldJavaObjects)、SQL语句并匹配映射关系,正因为此,它可以更加灵活地生成映射关系。MyBatis充分允许开发人员利用数据库的各项功能,例如存储过程、视图、复杂查询等,具有高度灵活性、可优化、易维护等优点。与Hibernate相比,使用MyBatis的编码量较大,但这并不影响它在一些复杂的和需要优化性能的项目中使用。1.3MyBatis简介MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。在MyBatis中也采用了工厂模式进行对象创建与管理,每个MyBatis应用程序主要都使用了SqlSessionFactory实例,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。1.3MyBatis简介MyBatis的主要优点包括以下四个方面:(1)通过参数映射方式,实现了SQL和Java代码的分离,解除SQL语句与程序代码的耦合,可以将参数灵活的配置在SQL语句的配置文件XML中,避免在Java类中配置参数。(2)通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索。(3)Mybatis也采用非侵入式设计,使用简单,没有任何第三方依赖,最简单安装只要两个jar文件+配置几个SQL映射文件,易学易用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。(4)Mybatis不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,便于统一管理和优化。通过SQL语句可以满足操作数据库的所有需求。Mybatis可以通过XML配置文件对数据库连接进行管理。课程思政MyBatis的前身是iBatis,iBatis是ClintonBegin于2001年发起的一个开放源代码项目,目的是发展密码软件的解决方案。从MyBatis的发展历程可以看出,其发展过程并不是一帆风顺的,也经历了很多磨难和变迁,所以大家一定要清晰的认识到科研的道路一定要经得起沉浮、耐得住寂寞、不怕失败、刻苦专研,总能守得日出见云开。在软件项目开发中使用MyBatis能够给程序员带来诸多的便利性,减少大量的重复代码编写,提高软件开发的效率。作为软件从业人员一定要有高尚的情怀、无私的奉献精神,共同推动软件产业的发展,为我国的社会主义现代化建设贡献力量。1.4MyBatis的功能架构MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和POJO为数据库中的记录。1.4MyBatis的功能架构1.4MyBatis的功能架构接口层:主要就是和数据库交互,提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库,接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层:是MyBatis的核心,负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等,它主要的目的是根据调用的请求完成一次数据库操作。主要完成两个功能:①通过传入参数构建动态SQL语句;②SQL语句的执行以及封装查询结果集。基础支撑层:基础支撑层是整个MyBatis框架的地基,负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件,为上层的数据处理层提供最基础的支撑。1.5MyBatis的工作流程在理解了Mybatis的功能架构之后,接下来我们探讨一下Mybatis的工作流程,这也是后面我们使用Mybatis框架的基础。1.5MyBatis的工作流程1.5MyBatis的工作流程Mybatis框架也是采用工程模式进行对象的创建与管理的,其核心对象为SqlSessionFactory,每一步流程的详细说明如下文所述:(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml文件可以加载多个映射文件,每个文件对应数据库中的一张表。1.5MyBatis的工作流程(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。1.5MyBatis的工作流程(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。1.6MyBatis下载与使用由于Mybatis是由第三方机构负责升级维护的开源框架,没有在IDE工具中集成,所以需要开发者手动下载jar包。1.6MyBatis下载与使用名称说明asm-7.1.jar操作Java字节码的类库cglib-3.3.0.jar用来动态继承Java类或实现接口commons-logging-1.2.jar用于通用日志处理javassist-3.27.0-GA.jar分析、编码和创建Java类库log4j-api-2.13.3.jarlog4j到log4j2的桥接包ognl-3.3.4.jar支持ognl表达式的解析reload4j-1.2.24.jar一个更强大的日志管理器,目的是为了解决log4j中的漏洞slf4j-api-2.0.6.jar提供日志接口并提供获取具体日志对象的方法lib文件夹存放了MyBatis运行依赖的jar包,一共包括8个jar文件,每个jar的具体作用见表9-2的说明。mybatis-3.5.13.jar是MyBatis的核心类库,mybatis-3.5.13.pdf是MyBatis的参考文档,介绍了MyBatis的简单使用说明和案例,在项目开发中,导入mybatis-3.5.13.jar包和其依赖的另外8个jar即可。MyBatis重要API简介本节将对MyBatis的重要API接口进行重点讲解。1.ResourcesResources是MyBatis的加载资源的工具类,位于org.apache.ibatis.io.Resources包中,其核心方法是getResourceAsStream(StringfileName),用于通过类加载器返回指定资源的字节输入流,返回值类型为InputStream。2MyBatis重要API简介本节将对MyBatis的重要API接口进行重点讲解。2.SqlSessionFactorySqlSessionFactory对象是由SqlSessionFactoryBuilder对象创建的,SqlSessionFactoryBuilder对象通过调用build()方法创建SqlSessionFactory对象2MyBatis重要API简介本节将对MyBatis的重要API接口进行重点讲解。3.SqlSessionSqlSession对象是MyBatis应用中的核心对象,类似于JDBC编程中的Connection对象,其首要作用是执行持久化操作,具有强大功能,在软件开发中最为常见、使用频率也最高。2MyBatis的配置文件配置文件对MyBatis的整个运行体系产生影响,它包含了很多控制MyBatis功能的重要信息,是MyBatis实现功能的重要保证。在开发过程中,当需要更改MyBatis的配置信息时,只需要更改配置文件中的相关元素及属性即可,具有良好的可扩展性。3MyBatis的配置文件33.1properties元素<properties>用于配置属性的元素,MyBatis支持<properties>元素的两种配置方式:properties文件和<property>子元素。1.properties文件properties元素可以通过resource属性指定外部properties文件,代码如下:<propertiesresource="mybatisDemo/resources/perties"/>2.property子元素配置<properties>元素通过其子元素<property>完成属性传递,例如:通过properties子元素property配置username和password变量,代码如下:<properties><propertyname="username"value="root"/><propertyname="password"value="root"/></properties>3.2settings元素settings元素用于配置MyBatis的运行时行为,它能深刻的影响MyBatis的底层运行,一般不需要大量配置,大部分情况下使用其默认值即可。3.3typeAliases元素由于类的完全限定名比较长,为了简化开发、降低代码的繁琐度,MyBatis支持使用别名。别名就是为类设置一个简短的名称,方便开发人员代码编写。别名的设置一般通过配置文件中的<typeAliases>元素进行,具体代码如下:<typeAliases><typeAliasalias="Student"type="com.exmple.model.Student"/></typeAliases>如果需要对同一个包下的多个类定义别名,则可以定义为:<typeAliases><packagename="com.exmple.model"/></typeAliases>3.4typeHandlers元素在程序运行过程中,当MyBatis为SQL语句设置参数或者从结果集中取值值,都需要进行数据类型的转换,而这些工作都由typeHandler来完成。typeHandler,即类型转换器,它的核心功能是根据程序运行需要将Java语言中的各种基本数据类型转换成数据库语言支持的JDBC类型,或者由JDBC类型转换为Java的数据类型。在MyBatis内部定义了一系列的typeHandler,满足软件开发的基本需要,例如:BoolTypeHandler能够完成Boolean类型的双向转换、LongTypeHandler能够完成Long类型的双向转换、ByteTypeHandler能够完成Byte类型的双向转换,这些typeHandler无需显示声明,MyBatis会自动探测数据类型并完成转换。3.5objectFactory元素MyBatis通过ObjectFactory(对象工厂)创建结果集对象,在默认情况下,MyBatis通过其定义的DefaultObjectFactory类完成相关的工作。但是,在实际开发中,当需要干预结果集对象的创建过程时,就需要自定义ObjectFactory。MyBatis支持自定义ObjectFactory,自定义ObjectFactory分为两个环节:首先要编写ObjectFactory类,其次要完成配置。自定义的ObjectFactory类通常要实现ObjectFactory接口或继承DefaultObjectFactory类,编写完ObjectFactory类之后,要将该ObjectFactory类配置到MyBatis的配置文件中。MyBatis通过<ObjectFactory>元素配置<ObjectFactory>,具体示例代码如下。<objectFactorytype="com.exmple.factory.MyObjectFactory"/>3.6environments元素MyBatis支持多种环境,使用不同的环境可以操作不同的数据库,并且MyBatis可以将相同的SQL映射应用到多种数据库。通过修改运行环境,MyBatis能够匹配数据库的常见需求,例如:开发环境、测试环境、运行环境之间的随意切换,让多个数据库使用相同的SQL映射。environment是environments的子元素,用来配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信息。3.6environments元素1.transactionManager元素MyBatis支持两种事务管理器类型,即JDBC类型和MANAGED类型。如果使用JDBC类型的事务管理器,则应用程序服务器负责事务管理操作,例如事务提交、事务回滚等。如果使用MANAGED类型的事务管理器,则应用程序服务器仅负责管理连接生命周期,事务的管理由MyBatis负责。3.6environments元素2.dataSource元素用于配置数据库的连接属性,例如要连接的数据库的驱动程序名称、URL地址、用户名和密码等。dataSource中的type属性用于指定数据源类型,有以下3种类型。(1)UNPOOLED(2)POOLED(3)JNDI(JavaNamingandDirectoryInterface)3.7mappers元素在MyBatis的配置文件中,mappers元素用于引入配置文件。mapper是mappers的子元素,mapper中的resource属性用于指定SQL映射文件的路径(类资源路径),每个mapper元素用于引入一个映射文件,在一个应用当中可以编写多个映射文件(映射文件的编写下一章将详细介绍)。代码如下所示。<mappers><mapperresource="com/example/mapper/Student.xml"/><mapperresource="com/example/mapper/Course.xml"/><mapperresource="com/example/mapper/Grade.xml"/></mappers>第一个MyBatis应用程序本节将结合“驾校学员信息管理系统”中的“学员信息”管理作为入门案例来讲解MyBatis框架的基本使用。44.1搭建开发运行环境1.新建工程导入架包4.1搭建开发运行环境2.数据准备DROPDATABASEIFEXISTSdriverschooldb;CREATEDATABASEdriverschooldb;USEdriverschooldb;DROPTABLEIFEXISTSt_student;CREATETABLEt_student(stu_idi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论