软件架构设计实践- 基于SSM框架 课件 第8、9章 Spring MVC高级功能、Mybatis框架基础_第1页
软件架构设计实践- 基于SSM框架 课件 第8、9章 Spring MVC高级功能、Mybatis框架基础_第2页
软件架构设计实践- 基于SSM框架 课件 第8、9章 Spring MVC高级功能、Mybatis框架基础_第3页
软件架构设计实践- 基于SSM框架 课件 第8、9章 Spring MVC高级功能、Mybatis框架基础_第4页
软件架构设计实践- 基于SSM框架 课件 第8、9章 Spring MVC高级功能、Mybatis框架基础_第5页
已阅读5页,还剩98页未读, 继续免费阅读

下载本文档

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

文档简介

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

Architecture

Design

Practice

Based

on

SSM

Framework第8章Spring

MVC高级功能12345拦截器异常处理文件上传下载静态资源访问JSON数据交换和RESTful应用拦截器拦截器拦截器的概念拦截器(Interceptor)可以拦截对处理器的调用,并允许在处理器执行前和(或)执行后进行一些操作拦截器可以为所有处理器提供统一的可插拔功能,可以让处理器专注于业务逻辑从作用看,拦截器与Servlet的过滤器有相似之处,它们的区别主要体现在过滤器会拦截<url-pattern>中配置的所有请求资源,拦截器只拦截对处理器的调用拦截器Spring

MVC中的拦截器需要实现HandlerInterceptor接口,它允许在三个时机插入处理代码,对应三个拦截器方法:处理器执行前(preHandle)处理器执行完毕(postHandle)视图渲染完成(afterCompletion)拦截器拦截器方法的执行顺序拦截器拦截器要点:preHandle中定义执行处理器代码之前要执行的操作,postHandle中定义执行处理器代码之后要执行的操作,afterCompletion中定义视图渲染完毕之后要执行的操作preHandle返回值是布尔类型,返回true表示放行,如果后面还有拦截器,则执行下一个拦截器的preHandle,如果没有其它拦截器,则执行处理器代码;返回false表示拦截,不再执行后面的代码三个方法中的Object类型参数,表示被拦截的处理器postHandle中的ModelAndView类型参数,代表处理器返回的ModelAndView拦截器配置拦截器要想拦截器起作用,还需要在配置文件中进行配置,也就是要告诉Spring

MVC要拦截哪些处理器。拦截器拦截器配置要点:<mvc:mapping>一定要有,并且要在<mvc:exclude-mapping>之前<mvc:mapping>和<mvc:exclude-mapping>都可以有多个**代表多层路径,*代表单层路径要想使用mvc命名空间,需要先声明拦截器拦截器链SpringMVC允许同时在一个处理器上配置多个拦截器,作用在一个处理器上的多个拦截器就形成了拦截器链。在配置拦截器链时,只需在<mvc:interceptors></mvc:interceptors>标签中使用多个<mvc:interceptor></mvc:interceptor>标签进行配置即可。拦截器多个拦截器的执行顺序异常处理异常处理Spring

MVC异常处理概述提供了一个统一的异常处理手段,这样一方面可以使程序员专注于业务逻辑,另一方面也可以提供一个相对友好的出错界面。SpringMVC提供了一系列的异常处理机制,它们基于一个统一的接口HandlerExceptionResolver,这一接口有多个实现类,它们以不同的方式处理不同的异常。异常处理自定义全局异常处理器:使用方法自定义异常处理类装配异常处理类异常处理异常处理类异常处理说明异常处理类里重写resolveException()方法。Exception类入参是需要处理的异常。Object类入参是触发异常的处理器,其具体类型是HandlerMethod。方法返回ModelAndView,这个ModelAndView类的对象会代替产生异常的处理器返回的ModelAndView类对象返回给前端控制器,可以在这里指定产生异常时需要渲染给客户端的视图。文件上传下载文件上传下载文件上传SpringMVC提供了MultipartResolver接口,专门用于处理文件上传。当收到请求时,前端控制器的checkMultipart()方法会调用MultipartResolver的isMultipart()方法判断请求中是否包含文件。如果请求数据中包含文件,则调用MultipartResolver的resolveMultipart()方法对请求的数据进行解析,同时将HttpServletRequest类对象封装为MultipartHttpServletRequest类对象,并将文件数据封装到MultipartFile类的对象中,传递给处理器。文件上传下载MultipartResolver接口有两个实现类:StandardServletMultipartResolver:基于Servlet实现文件上传,不需要额外的依赖项,但对容器支持的Servlet版本有要求,需要在web.xml中配置文件上传相关信息,是Spring

6推荐使用的。CommonsMultipartResolver:基于ApacheCommonsFileUpload组件,需要额外的依赖项,需要在Spring配置文件中配置相关信息。文件上传下载使用步骤:在Spring配置文件中装配多部件解析器在web.xml的前端控制器中配置multipart文件上传下载装配多部件解析器StandardServletMultipartResolver配置multipart文件上传下载上传页面文件上传下载处理器代码文件上传下载说明处理器的第一个入参类型是MultipartFile,参数名file要与表单中的file表单域的name属性相同。处理器第二个入参的类型是HttpServletRequest,这里是为了在处理器中获取保存文件的物理路径。getOriginalFilename()方法作用是获取上传文件的原始文件名。transferTo()方法用于将MultipartFile中的文件数据转移到File对象中UUID类的randomUUID()方法作用是生产一个通用唯一识别码(UniversallyUniqueIdentifier),防止文件重名。文件上传下载文件下载一般来说,在浏览器中直接请求文件地址就可以下载了,但这样做有很多缺点,如:没办法获取下载状态,比如一共多少,传输了多少,传输是否出错等没办法控制下载过程一个更好的方法是,通过服务器的文件系统,先从磁盘上把文件读取进缓冲区,然后再通过程序发送给客户端,这样就可以控制整个下载过程了。文件下载使用ResponseEntity<>实现文件下载ResponseEntity<>类可以让处理器返回一个经序列化的实体对象,除此之外,ResponseEntity还支持设置响应头和状态码,使用ResponseEntity类,可以实现文件下载。文件下载处理器代码文件上传下载说明返回类型ReponseEntity<>的泛型为byte[],这样文件的字节流会被直接写入响应体内。HttpHeaders的setContentType()方法的参数是枚举类型MediaType.APPLICATION_OCTET_STREAM,它能将响应头中的ContentType设置为application/octet-stream。setContentDispositionFormData()方法的作用是将响应头中的ContentDisposition设置为“attachment;filename=xxx:”。静态资源访问静态资源访问问题的提出在配置前端控制器的Servlt映射时,将对网站的所有请求都交给前端控制器处理。前端控制器会拦截对网站的所有请求,然后调用处理器映射器对请求路径进行解析,并最终映射为对处理器方法的调用。这一过程中,对静态资源,如图片、HTML页面、CSS文件、JS文件等的请求也会进行映射,这显然是找不到对应的处理器方法的,因此会返回404错误。静态资源访问静态资源访问方法一:配置默认Servlet原理:在web.xml中配置名为default的Servlet映射,当请求以该映射路径开头的路径时,会交由Web容器的默认Servlet(即名为default的Servlet)处理,而不是由SpringMVC的前端控制器处理。静态资源访问静态资源访问方法二:注册DefaultServletHttpRequestHandler原理:在Spring配置文件中装配一个DefaultServletHttpRequestHandler,它是SpringMVC预定义的一个处理器,它的作用就是将所有请求转发到Web容器的默认Servlet去处理。由于它具有最低的映射优先级,因此不会影响前端控制器DispatcherServlet。静态资源访问静态资源访问方法三:配置资源映射原理:在Spring配置文件中配置资源映射,可将特定路径下的文件视为静态文件,对其的请求不再交给处理器映射器处理。location属性指明静态文件的实际路径,mapping属性指明静态文件的映射路径,其含义是将以“/img”开头的路径的请求视为对静态文件的请求,并将其映射到“/static/assets/img/”路径下,而不再交给处理器映射器进行处理。JSON数据交换

和RESTful应用JSON数据交换和RESTful应用概述最理想的Web应用程序:前后端分离,即前端和后端只存在数据耦合,这样的后端程序也称为Web

API。数据交换涉及到的最重要问题就是数据的格式,需要有一种规范的格式,确保多数后台和前台技术都能解析。目前最流行的数据交换格式就是JSON。JSON数据交换和RESTful应用JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,它独立于编程语言,以纯文本来存储和表示数据,易于阅读和编写,也易于程序解析和生成,相比于XML,它占用更少存储空间,解析速度更快。JSON数据交换和RESTful应用JSON有两种数据结构:对象结构:以“{”开始,以“}”结束,中间是key:value形式的数据。期中,key必须为字符串,value可以是任意类型。多个key-value之间使用逗号(,)分割数组结构:以“[”开始,以“]”结束,中间是值的列表,用逗号分割,元素可以是多种类型。需要注意的是,如果用JSON存储单个数据,要使用数组结构,不能使用对象结构,因为对象结构要有keyJSON数据交换和RESTful应用序列化/反序列化工具:Jackson库JSON数据交换和RESTful应用处理器返回JSON方法一:使用ResponseEntity<>类处理器返回ResponseBody<>类的对象时,不再进行视图渲染,而是直接将ResponseBody<>类对象中封装的数据写入响应体中。如果我们在返回ResponseBody<>类对象时,直接将实体对象封装进去,SpringMVC就会调用相应的序列化方法,将实体对象序列化为JSON,并写入响应体内,这样就实现了处理器返回JSON。JSON数据交换和RESTful应用处理器代码JSON数据交换和RESTful应用处理器返回JSON方法二:使用@ResponseBody注解@ResponseBody注解使用在处理器方法上,使用@ResponseBody标记的处理器方法可以直接返回一个实体对象,SpringMVC会使用合适的序列化方法将其序列化后直接写入响应体。要使用@ResponseBody注解,需要在Spring配置文件中配置SpringMVC的注解驱动。JSON数据交换和RESTful应用处理器代码JSON数据交换和RESTful应用还可以在控制器类上使用@RestController注解,可以方便地使一个控制器类中的所有处理器返回JSON。JSON数据交换和RESTful应用处理器解析JSON方法一:使用RequestEntity<>类RequestEntity<>封装了整个请求,可以通过它的getBody()方法获取请求体数据,这个过程中SpringMVC会调用反序列化工具对请求体中的数据进行反序列化。JSON数据交换和RESTful应用处理器解析JSON方法二:使用@RequestBody注解@RequestBody注解用于标记处理器入参,它的作用是从请求体中读取数据,并通过适当的HttpMessageConverter进行转换后注入到其标记的实体对象内。JSON数据交换和RESTful应用REST(REpresentationalStateTransfer,表现层状态转移)的概念是一种Web应用设计风格,它描述的是在网络中客户端和服务器的一种交互形式。它的核心思想是使用URI定位资源,使用HTTP动词描述操作。如果一个架构符合REST原则,就称它为RESTful架构,相应的应用就称为RESTful应用。JSON数据交换和RESTful应用构造RESTful应用LeonardRichardson分析了百余种不同的Web服务,并根据它们与REST的兼容程度将它们分为四个等级,称为Richardson成熟度模型,它可以用于识别一个Web服务的成熟度级别,也为构建RESTfulWeb服务提供了切实可行的参考依据。JSON数据交换和RESTful应用Richardson成熟度模型Level0:POX(PlainOldXML)。除了使用XML作为数据交换,其余跟传统Web应用没有区别。Level1:资源。使用URL表示资源的位置,没有使用正确的HTTP动词。Level2:动词。正确使用了HTTP动词和HTTP状态码。Level3:超媒体。超媒体作为应用程序的状态引擎(HATEOAS,HypermediaAsTheEngineOfApplicationState)。包含了一些可发现性的自包含文档,是REST的最理想形态。JSON数据交换和RESTful应用构造RESTful应用第一步:在URL中使用资源地址,使用HTTP动词表示对资源的操作Bad:/getProducts/deleteOrder?orderId=1/getItemsByOrder?orderId=1Good:GET/products:willreturnthelistofallproductsPOST/products:willaddaproducttothecollectionGET/products/4:willretrieveproduct#4GET/orders/4/items:willretrievethelistofallitemsoforder#4GET/orders/4/items/1:willretrieveitem#1oforder#4PUT/products/4:willupdateproduct#4PATCH/products/4:willpartiallyupdateproduct#4JSON数据交换和RESTful应用构造RESTful应用第二步:正确使用HTTP状态码方法一:使用@ResponseStatus注解JSON数据交换和RESTful应用构造RESTful应用第二步:正确使用HTTP状态码方法二:使用ResponseEntity<>类JSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力Bad:JSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力Good:JSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力使用Spring

HATEOASJSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力使用Spring

HATEOAS实体类继承RepresentationModel<>类:JSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力使用Spring

HATEOAS向一个资源(一个实体对象)添加链接:JSON数据交换和RESTful应用构造RESTful应用第三步:使服务具有自描述能力使用Spring

HATEOAS处理器代码:Q&A

Time软件架构设计实战——基于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属性用于指定数据源类型,

温馨提示

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

评论

0/150

提交评论