Java EE企业级应用项目开发-课件全套 王强 任务1-10_第1页
Java EE企业级应用项目开发-课件全套 王强 任务1-10_第2页
Java EE企业级应用项目开发-课件全套 王强 任务1-10_第3页
Java EE企业级应用项目开发-课件全套 王强 任务1-10_第4页
Java EE企业级应用项目开发-课件全套 王强 任务1-10_第5页
已阅读5页,还剩646页未读 继续免费阅读

下载本文档

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

文档简介

任务1.1初识框架掌握框架的定义;当前主流的框架及各自的特性1本节任务框架是为复用和快速开发特定软件系统设计的软件架构;包含一系列类、接口、模块和组件,它们之间有明确的关系和协作方式,共同构成可扩展、可定制的体系结构;减少重复编码,还规范开发流程和方法,便于团队协作和项目维护;开发者可根据需求扩展和定制框架,添加特定功能和模块。1什么是框架?

当前主流的框架主要有Spring、SpringMVC、MyBatis、SpringBoot、SpringCloud、SpringData等。Spring框架:

IoC/DI:容器管理对象创建与依赖注入,通过注解(如@Autowired)降低耦合。

AOP:分离事务、日志等横切逻辑,用@Aspect定义切面,@Before/@After控制通知。

事务管理:支持声明式事务(@Transactional),统一管理事务生命周期。

优势:提升代码可维护性、测试性及扩展性,生态完善,适用于企业级应用。2主流的框架SpringMVC:MVC模式:分离控制器、模型与视图,控制器处理请求并调度视图。

注解驱动:通过@Controller、@RequestMapping等注解简化请求处理与数据绑定。

视图解析:支持JSP、Thymeleaf等多视图技术。

优势:简化Web开发,适合RESTfulAPI及复杂页面构建。MyBatis:ORM:映射数据库表与Java对象,支持XML或注解编写SQL。

参数/结果映射:数据库数据与对象属性双向绑定。

缓存机制:一级/二级缓存优化性能。

优势:精确控制SQL,灵活处理复杂查询,与Spring集成便捷。2主流的框架SpringBoot:

自动配置:基于依赖自动配置容器(如Tomcat)及组件(如SpringMVC)。

起步依赖:打包常用依赖(如spring-boot-starter-web),加速开发。

嵌入式服务器:内置服务器,无需独立部署。

微服务支持:与SpringCloud无缝集成,构建微服务架构。

优势:减少配置,提升开发效率,适合快速迭代与微服务场景。SpringCloud:

服务发现:Eureka实现服务注册与发现。

配置管理:Config集中管理微服务配置,支持动态更新。2主流的框架

负载均衡:Ribbon客户端分发请求。

熔断器:Hystrix防止服务雪崩。

网关:Zuul统一路由与安全控制。

优势:提供微服务治理全解决方案,解决分布式系统核心问题。SpringData:

统一抽象:支持关系型(JPA)与NoSQL(MongoDB)等多类型数据访问。

代码简化:通过接口与方法命名约定自动生成CRUD方法(如findById)。

自定义查询:使用@Query或方法名定义复杂查询。

优势:减少数据层代码,支持跨存储统一开发模式,提升效率。2主流的框架

我们重点掌握了:框架的定义:复用性、组件化、规范化、可扩展的软件架构,是开发的“脚手架”;主流框架的核心功能:Spring:IoC/DI、AOP、事务管理,企业级开发基石;SpringMVC:MVC模式、注解驱动,Web层开发工具;MyBatis:ORM映射、灵活SQL,持久层(数据库交互)框架;SpringBoot:自动配置、起步依赖,快速开发工具;SpringCloud:服务发现、配置管理、熔断,微服务治理框架;SpringData:统一数据访问、自动生成CRUD,多数据源操作框架。3章节小结感谢大家的聆听!任务1.2MyBatis入门程序理解什么是数据持久化?什么是ORM对象关系映射?MyBatis框架的核心特征?MyBatis环境搭建及MyBatis入门程序实现;MyBatis工作原理及应用场景。1本节任务

数据持久化是将应用数据保存到非易失性存储介质(如磁盘、数据库)的过程,确保数据在程序终止或系统故障后仍可恢复,因此内存数据易失性的特点决定了持久化的必要性。

ORM(对象关系映射)将数据库表与Java对象关联,允许通过对象操作数据库。其优势如下:

简化开发:抽象SQL操作,支持面向对象编程。

提高维护性:分离数据访问与业务逻辑。

数据库无关性:通过配置实现跨数据库兼容。

MyBatis框架核心特征:

灵活SQL控制:支持XML或注解编写SQL,适配复杂业务逻辑。

缓存机制:一级(会话级)与二级(全局)缓存优化性能。

动态SQL:通过<if>、<foreach>等标签实现条件化SQL生成。

与Spring集成:无缝结合Spring的依赖注入与事务管理。2知识支撑

步骤如下:

创建Maven项目:选择webapp模板,配置JDK17;

引入依赖:添加MyBatis(3.5.9)、MySQL驱动及连接池;

创建数据库:利用Navicat可视化界面;

配置核心文件(mybatis-config.xml):

定义数据源(数据库连接信息);

配置事务管理(JDBC模式);

指定Mapper映射文件路径;

具体操作见视频

实操1.1MyBatis环境搭建3MyBatis环境搭建

在MyBatsi环境搭建的基础上,通过模拟学生信息管理入门程序中的部分表来演示MyBatis框架的具体使用。【任务描述】使用Mybatis框架向学生表(student)插入一条学生记录(4,"赵六",19)。

步骤如下:

创建数据库表student;

创建实体类Student;

创建DAO层接口StudentDao;

创建DAO层接口实现类StudentDaoImp;

创建MyBatis映射文件StudentMapper.xml;

修改MyBatis核心配置文件;

测试验证。

具体操作见视频

实操1.2MyBatis入门程序

4MyBatis入门程序实现

MyBatis框架工作原理

5MyBatis框架工作原理及应用场景图1.2.1MyBatis工作流程图MyBatis操作数据库其工作流程主要从配置加载开始,历经多个关键步骤,最终完成对数据库的操作。工作流程图如图1.2.1所示。核心流程如下:配置加载:读取mybatis-config.xml和Mapper.xml;会话创建:通过SqlSessionFactory构建SqlSession,并作为执行SQL的核心对象;执行器处理:Executor封装SQL语句(通过MappedStatement绑定参数),执行数据库操作;结果映射:将查询结果按Mapper.xml规则映射为Java对象。

核心应用场景

5MyBatis框架工作原理及应用场景

传统企业级应用:支持复杂SQL(多表关联、条件筛选),适配多数据库(Oracle/MySQL);

数据迁移整合:灵活处理ETL流程,动态SQL满足多样化数据转换需求;

小型项目开发:配置简单、学习成本低,直接编写SQL提升开发效率;

高性能系统:精准优化SQL,结合缓存机制减少数据库访问,提升响应速度。

我们重点掌握了:三个核心概念:数据持久化(保存数据到非易失介质)、ORM(对象-表映射)、MyBatis核心特征(灵活SQL、缓存、动态SQL、Spring集成);两个实操流程:MyBatis环境搭建(Maven项目+依赖+核心配置)、入门程序实现(插入学生记录,从表创建到测试验证);一个工作原理:配置加载→会话创建→执行器处理→结果映射的完整流程;四类应用场景:传统企业应用、数据迁移、小型项目、高性能系统。3章节小结感谢大家的观看与聆听!任务1.3MyBatis核心对象了解MyBatis的三大核心对象核心对象的实例化方法三大核心对象之间的关系1本节任务

三大核心对象:SQLSessionFactoryBuilder、SqlSessionFactory和SqlSession。

1.SqlSessionFactoryBuilder

SqlSessionFactory是创建SqlSession的工厂,而SqlSessionFactory的创建则依赖于SqlSessionFactoryBuilder。

SqlSessionFactoryBuilder是MyBatis中用于构建SqlSessionFactory的构建器。图1.3.1为SqlSessionFactoryBuilder类的build()重载方法。

2知识支撑图1.3.1SqlSessionFactoryBuilder类的build()重载方法以字节流的方式传入1build(InputStreaminputStream,Stringenvironment,Propertiesproperties)以字符流的方式传入1build(Readerreader,Stringenvironment,Propertiesproperties)以配置类(Configuration)的方式传入1build(Configurationconfig)

此处以字节流的方式为例,其核心代码如下:2知识支撑1//读取mybatis-config.xml核心配置文件2InputStreaminputStream=Resources.getResourceAsStream("核心配置文件的位置信息");3//构造SqlSessionFactory工厂实例4SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);由于SqlSessionFactory是线程安全的,因此一经创建,其在整个应用程序执行期间都会存在。如果多次创建同一个数据库的SqlSessionFactory,那么将造成资源浪费和性能下降。因此,通常一个数据库只创建一个SqlSessionFactory,并采用单例模式对其进行管理。

2.SqlSessionFactory

SqlSessionFactory是MyBatis框架中的一个核心接口,主要用于创建SqlSession。SqlSessionFactory

在被SqlSessionFactoryBuilder构造完成后,就可以通过调用openSession()重载方法来创建SqlSession,且不同的openSession()重载方法创建的SqlSession具有不同的特性。表1.3.1所示为不同openSession()重载方法的比较。

2知识支撑方法名称描述SqlSessionopenSession()用于开启一个事务SqlSessionopenSession(BooleanautoCommit)参数autoCommit可设置是否开启事务。若传传入参数数为true,则表示关闭事务控制,自动提交;若传传入参数数为false,则表示开启事务控制SqlSessionopenSession(Connectionconnection)参数connection可提供自定义连接SqlSessionopenSession(TransactionIsolationLevellevel)参数level可设置隔离级别SqlSessionopenSession(ExecutorTypeexecType)参数execType为执行器类型,有以下3个可选值。ExecutorType.SIMPLE:表示为每条语句创建一条新的预处理语句;ExecutorType.REUSE:表示会复用预处理语句;ExecutorType.BATCH:表示会批量执行所有更新语句SqlSessionopenSession(ExecutorTypeexecType,BooleanautoCommit)参数execType为执行器的类型,参数autoCommit为设置是否开启事务SqlSessionopenSession(ExecutorTypeexecType,Connectionconnection)参数execType为执行器的类型,参数connection可提供自定义连接表1.3.1不同openSession()重载方法的比较

3.SqlSession

SqlSession是MyBatis框架中一个非常重要的类。每个SqlSession实例都包含执行SQL语句所需的所有信息,可以通过执行映射文件中定义的SQL语句,完成对数据库的增删改查操作。表1.3.2所示为SqlSession的常用方法。

2知识支撑方法名称描述<T>TselectOne(Stringstatement)查询方法,参数statement是在配置文件中定义的<select>元素的id,查询结果为一个泛型对象<T>TselectOne(Stringstatement,Objectparameter)查询方法,parameter是查询语句所需的参数,查询结果为一个泛型对象<E>List<E>selectList(Stringstatement)查询方法,参数statement是在配置文件中定义的<select>元素的id,查询结果为泛型对象的集合<E>List<E>selectList(Stringstatement,Objectparameter)查询方法,parameter是查询语句所需的参数,查询结果为泛型对象的集合<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds)查询方法,rowBounds是用于分页的参数对象,查询结果为泛型对象的集合voidselect(Stringstatement,Objectparameter,ResultHandlerhandler)查询方法,handler用于处理查询语句返回的复杂结果集,该方法常用于多表查询intinsert(Stringstatement)插入方法,参数statement是在配置文件中定义的<insert>元素的id表1.3.2SqlSession的常用方法方法名称描述intinsert(Stringstatement,Objectparameter)插入方法,parameter是插入语句所需的参数intupdate(Stringstatement)更新方法,参数statement是在配置文件中定义的<update>元素的idintupdate(Stringstatement,Objectparameter)更新方法,parameter是更新语句所需的参数intdelete(Stringstatement)删除方法,参数statement是在配置文件中定义的<delete>元素的idintdelete(Stringstatement,Objectparameter)删除方法,parameter是删除语句所需的参数voidcommit()提交事务的方法voidrollback()回滚事务的方法voidclose()关闭SqlSession<T>TgetMapper(Class<T>type)该方法会返回Mapper接口的代理对象,参数type是Mapper的接口类型ConnectiongetConnection()获取JDBC数据库连接对象的方法

SqlSession不是线程安全的,因此不能在多个线程之间共享同一个SqlSession实例。通常情况下,一个SqlSession实例对应一次数据库会话,在完成数据库操作后,应及时关闭SqlSession,以释放资源,关闭SqlSession的操作通常被放在finally代码块中。

2知识支撑

创建SqlSession的常用代码如下。1 SqlSessionsqlSession=SqlSessionFactory.openSession();2 try{3 …//此处执行持久化操作4 sqlSmit();//提交事务5 }catch(IOExceptione){6 …//此处为捕获异常后操作7 }finally{8 sqlSession.close();//关闭SqlSession,释放资源9 }

三大核心对象之间的关系

三者按固定顺序协作,流程不可逆,具体步骤如下:

用SqlSessionFactoryBuilder读取配置文件,调用build()方法生成SqlSessionFactory;

用SqlSessionFactory调用openSession()方法,创建SqlSession(可指定是否自动提交事务);

用SqlSession执行SQL(直接调用API或获取Mapper接口),完成数据CRUD;

操作结束后,调用SqlSession的commit()/rollback()处理事务,再调用close()关闭会话。2知识支撑

我们重点掌握了:三大核心对象的定位:SqlSessionFactoryBuilder是“临时构建器”,SqlSessionFactory是“线程安全的工厂”,SqlSession是“非线程安全的执行者”;实例化方法:SqlSessionFactoryBuilder通过build()读配置生成SqlSessionFactory,SqlSessionFactory通过openSession()生成SqlSession,SqlSession通过API或Mapper执行SQL;协作关系:按“构建工厂→创建会话→执行SQL→关闭会话”的固定流程协作,形成完整的数据库操作链路。3章节小结感谢大家的观看与聆听!任务1.4MyBatis核心配置文件了解MyBatis核心配置文件的结构结构中主要元素的使用方法掌握配置文件模板的制作流程1本节任务

MyBatis核心配置文件(通常被命名为mybatis-config.xml)是MyBatis框架的重要组成部分,用于配置MyBatis的各种全局设置和环境信息,为数据库操作提供必要的基础配置。该文件的根元素是<configuration>,该元素下包含多个子元素,每个子元素都有特定的配置功能。其整体元素结构如图1.4.1所示。

2知识支撑图1.4.1MyBatis核心配置文件的元素结构

MyBatis核心配置文件中的主要元素介绍。1.<properties>元素<properties>元素用于引入外部属性文件,以便管理数据库连接信息等配置。

假设当前在resources目录下有一个属性文件perties,该文件定义了数据库驱动、URL、用户名和密码等信息。使用<properties>元素可以在核心配置文件mybatis-config.xml中引用该属性文件,示例代码如下。2知识支撑1<propertiesresource="perties"/>

2.<settings>元素<settings>元素用于配置MyBatis的各种全局设置,如是否开启缓存、是否开启自动驼峰命名映射等。设置在控制台打印SQL相关信息的示例代码如右所示。1<settings>2<settingname="logImpl"value="STDOUT_LOGGING"/>3</settings>

3.<typeAliases>元素

<typeAliases>元素用于定义类型别名,以便在配置文件中使用别名代替全限定类名,进而简化配置。既可以为单个类定义别名,也可以通过指定包名来批量定义别名。示例代码如下。2知识支撑1<typeAliases>2<!--为单个类定义别名-->3<typeAliasalias="Student"type="com.bigdata.pojo.Student"/>4<!--批量定义别名,会为该包下的所有类自动生成别名,别名默认为类名-->5 <packagename="com.bigdata.pojo"/>6</typeAliases>

4.<enviroments>元素<environments>元素用于配置多个数据库环境,每个环境可以有不同的事务管理和数据源配置,通过default属性可指定默认使用的环境。示例代码如下。2知识支撑1<environmentsdefault="development">2 <environmentid="development">3 <transactionManagertype="JDBC"/>4 <!--引用数据库连接配置信息,即perties文件的内容-->5 <dataSourcetype="POOLED">6 <propertyname="driver"value="${mysql.driver}"/>7 <propertyname="url"value="${mysql.url}"/>8 <propertyname="username"value="${mysql.username}"/>9 <propertyname="password"value="${mysql.password}"/>10 </dataSource>11 </environment>12</environments>

5.<mappers>元素<mappers>元素用于注册映射器,告诉MyBatis去哪里查找SQL映射文件或映射器接口。可以通过多种方式注册映射器。示例代码如下。2知识支撑1<mappers>2 <!—使用类路径注册映射文件-->3 <mapperresource="mappers/StudentMapper.xml"/>4 <!—使用接口类引入-->5 <mapperclass="com.bigdata.mapper.StudentMapper"/>6 <!--批量注册指定包下的所有映射器接口-->7 <packagename="com.bigdata.mapper"/>8</mappers>2知识支撑1<?xmlversion="1.0"encoding="UTF-8"?>2<!DOCTYPEconfiguration3PUBLIC"-////DTDConfig3.0//EN"4"mybatis官网/dtd/mybatis-3-config.dtd">5<configuration>6<!--配置属性-->7<propertiesresource="perties"/>8<!--配置类型别名-->9<typeAliases>10 <packagename="com.bigdata.pojo"/>11</typeAliases>12<!--配置环境-->13<environmentsdefault="development">14 <environmentid="development">15 <transactionManagertype="JDBC"/>

以下是一个基本的MyBatis核心配置文件的结构示例。代码如下。16 <!--数据库连接相关配置,即perties文件内容-->17 <dataSourcetype="POOLED">18 <propertyname="driver"value="${mysql.driver}"/>19 <propertyname="url"value="${mysql.url}"/>20 <propertyname="username"value="${mysql.username}"/>21 <propertyname="password"value="${mysql.password}"/>22 </dataSource>23 </environment>24 </environments>25 <!--创建与mapper接口的映射关系-->26 <mappers>27 <mapperresource="mappers/StudentMapper.xml"/>28 </mappers>29 </configuration>

由于后期项目中经常需要创建MyBatis核心配置文件及Mapper.xml映射文件,因此可以将这两个文件制作成模板文件,既保证了内容准确性又提高了开发效率。具体操作见视频

实操1.3制作配置文件模版

我们重点学习了:核心配置文件的整体结构(根元素<configuration>,固定的元素顺序);五大关键元素的作用和配置方法:<properties>(引入外部属性)、<settings>(配置全局参数)、<typeAliases>(定义类型别名)、<environments>(配置数据库环境)、<mappers>(注册映射器);配置文件模板的制作意义和流程(提升开发效率、保证配置规范)。3章节小结感谢大家的观看与聆听!任务2.1条件查询掌握MyBatis映射文件及常用元素的基本作用能够进行条件查询操作,包括单条件查询和多条件查询会使用<resultMap>进行自定义结果集映射了解<sql>元素的作用及使用方法1本节任务

MyBatis映射文件是MyBatis框架的关键部分,其将SQL语句从Java代码中分离出来并集中进行管理,所有的SQL语句都可以在该文件中,即使数据库表结构发生变化或SQL语句需要被优化,也只需修改该文件,而不需要对Java代码进行调整。以下是一个基本的MyBatis映射文件的结构示例。

2知识支撑1<?xmlversion="1.0"encoding="UTF-8"?>2<!DOCTYPEmapper3PUBLIC"-////DTDMapper3.0//EN"4"mybatis官网/dtd/mybatis-3-mapper.dtd">5<mappernamespace="com.bigdata.dao.StudentDao">6<!--结果映射-->7 <resultMapid="studentMap"type="com.bigdata.pojo.Student">8 <idcolumn="sno"property="sno"/>9 <resultcolumn="sname"property="sname"/>10 <resultcolumn="sage"property="sage"/>11 <!--其他字段映射-->12 …13 </resultMap>14 <!--SQL片段-->15 <sqlid="selectSomething">16 sno,sname,sage17 </sql>18 <!--查询操作-->19 <selectid="selectStudentBySno"resultMap="studentMap">20 SELECT<includerefid="selectSomething"/>21 FROMstudent22 WHEREsno=#{sno}23 </select>24 <!--插入操作-->25 <insertid="方法名">26 <!--SQL语句-->27 </insert>28 <!--更新操作-->29 <updateid="方法名">30 <!--SQL语句-->31 </update>32 <!--删除操作-->33 <deleteid="方法名">34 <!--SQL语句-->35 </delete>36</mapper><mapper>元素是MyBatis映射文件的根元素,其他元素都是该元素的子元素。MyBatis映射文件的常用元素如表2.1.1所示。

2知识支撑元素名称说明<mapper>根元素,该元素只有一个namespace属性,且该属性的值需要全局唯一<cache>配置给定命名空间的缓存<cache-ref>从其他命名空间引用缓存配置<select>用于映射查询语句<insert>用于映射添加语句<update>用于映射更新语句<delete>用于映射删除语句<sql>可以重用的SQL块,也可以被其他语句使用<resultMap>描述数据库结果集和对象的对应关系

表2.1.1MyBatis映射文件的常用元素

条件查询:根据某个或者某些条件进行查询的操作。在MyBatis框架中<select>元素用于映射查询语句,使用该元素可以从数据库表中查询数据并返回结果。其常用属性如表2.1.2所示。

2知识支撑属性名称说明id表示命名空间中<select>元素的唯一标识,通过该标识可以调用这条查询语句parameterType是一个可选属性,用于指定SQL语句所需参数类的全限定名或别名,默认值是unsetresultType用于指定执行这条SQL语句返回的全限定类名或别名resultMap表示外部resultMap的命名引用,resultMap和resultType不能同时使用flushCache用于指定是否需要MyBatis清空本地缓存和二级缓存useCache用于控制二级缓存的开启和关闭timeout用于设置超时时间,单位为秒fetchSize获取记录的总条数设定,默认值是unsetstatementType用于设置MyBatis预处理类resultSetType表示结果集的类型,默认值是unset

表2.1.2<select>元素的常用属性说明

1.单条件查询按主键查询:根据主键唯一性原则,其查询结果将返回一个对象。下面通过【任务2-1】进行具体的讲解和演示。

【任务2-1】查询学生表(student)中学号(sno)为2的学生的信息。当前student表的数据记录情况如表2.1.3所示。2知识支撑snosnamesage1张三182李四203王五194赵六19表2.1.3

当前student表的数据记录情况具体操作见视频

实操2.1条件查询(一)操作要点编写实体类在接口中编写功能方法(抽象);重写接口中抽象方法并实现业务功能;在映射文件中编写SQL语句;测试运行查看结果。按非主键查询:由于查询条件为非主键,因此得到的数据记录可能有多条,即查询结果集为一个泛型类集合。下面通过【任务2-2】进行具体的讲解和演示。

【任务2-2】查询学生表(student)中年龄(sage)为19的学生的信息。数据库表student如表2.1.3所示。(操作要点同上)具体操作见视频

实操2.2条件查询(二)

2.多条件查询

在日常生活中用的更为广泛的不是单条件查询而是多条件查询,多条件查询的处理思想是将查询条件参数封装到POJO类对象或集合中,之后以对象或集合的方式进行整体传递。接下来通过【任务2-3】演示通过POJO类封装多条件的<select>查询操作。【任务2-3】查询学生表(student)中年龄(sage)为19且姓名(sname)为“王五”的学生的信息。((操作要点同上))

具体操作见视频

实操2.3条件查询(三)2知识支撑

自定义查询结果映射<resultMap>

MyBatis默认会将查询结果集中的列名与Java对象的属性名进行自动映射,但当两者不一致或需执行更复杂的映射逻辑(如将多个列合并到一个属性中)时,自动映射就会失效。<resultMap>可以手动指定这种映射关系,确保查询结果被正确地填充到Java对象中。其基本语法如下。

接下来通过一个任务演示<resultMap>元素的具体使用方法。2知识支撑1<resultMapid="唯一标识符"type="Java类型全限定名或别名">2 <!--主键字段映射-->3 <idproperty="Java对象属性名"column="数据库表列名"/>4 <!--普通字段映射-->5 <resultproperty="Java对象属性名"column="数据库表列名"/>6 <!--其他映射元素,如关联映射等-->7</resultMap>【任务2-4】查询学生表(student)中所有学生的信息。数据库表student如表3.1.3所示。(操作要点同上)

具体操作见视频

实操2.4使用<resultMap>实现自定义映射<sql>元素<sql>元素可以将一些常用的SQL片段提取出来进行复用,从而提高代码的可维护性和复用性。基本用法是:使用<sql>元素定义一个可复用的SQL片段,在需要使用该片段的地方,通过<include>元素将其引入。下面通过一个任务讲解和演示<sql>元素的具体使用方法。【任务2-5】使用<sql>元素将sno、sname、sgae定义为可复用片段,实现对学生姓名(sname)为三个字的学生的全查询操作。当前student表的数据记录情况如图2.1.4所示。((操作要点同上))

具体操作见视频

实操2.5使用<sql>元素实现SQL片段复用2知识支撑图2.1.4

当前student表的数据记录情况

我们重点学习了四个核心知识点:MyBatis映射文件的结构和常用元素,理解了<mapper>作为根元素的作用,以及<select>、<resultMap>、<sql>等元素的职责;单条件(按主键/非主键)和多条件查询的实现方法,掌握了“接口方法定义-映射文件SQL编写-参数传递”的完整流程;用<resultMap>解决字段名与属性名不一致的问题,确保查询结果正确填充;用<sql>元素提取重复SQL片段,提升代码复用性和可维护性。3章节小结感谢大家的观看与聆听!任务2.2增删改操作掌握<insert>、<delete>、<update>元素的基本作用及属性的用法能运用这些元素编写程序对数据库进行增、删、改操作1本节任务添加操作:在MyBatis框架中,<insert>元素用于实现SQL映射添加操作,其可以为数据库添加记录并返回结果信息。示例代码如下。其常用属性如表2.2.1所示。

2知识支撑属性名称说明id表示命名空间中<insert>元素的唯一标识,通过该标识可以调用这条插入语句parameterType用于指定SQL语句中所需参数的数据类型flushCache用于指定是否需要MyBatis清空本地缓存或二级缓存,默认值为falsetimeout用于设置超时时间,单位为秒,超时将抛出异常statementType用于设置MyBatis预处理类,其有三个值,分别为STATEMENT、PREPARED(默认值)和CALLABLE,分别对应JDBC中的Statement、PreparedStatement和CallableStatementkeyProperties(仅对<insert>元素和<update>元素有用)将插入或更新操作的返回值赋值给POJO类的某个属性,若需要设置联合主键,则在多个值之间使用逗号隔开keyColumn(仅对<insert>元素和<update>元素有用)用于设置第几列为主键,当需要设置联合主键时,在多个值之间使用逗号隔开useGeneratedKeys(仅对<insert>元素和<update>元素有用)用于设置数据库中自动增长的字段,默认值为false表2.2.1

<insert>元素的常用属性说明

1<insertid="insertStudent"parameterType="com.bigdata.pojo.Student">2insertintostudent(sno,sname,sage)values(#{sno},#{sname},#{sage})3</insert>id的值为接口中的方法名;parameterType的值表示传入的参数类型为Student类类型;resultType的值为返回值的数据类型,表示查询结果集为一个Student类型的对象;“#{参数}”表示创建一个预处理参数。【多学一招】如果使用的数据库(如Oracle)不支持主键自增长的情况,此时可以使用MyBatis提供的<selectKey>元素自定义主键。示例代码如下。

2知识支撑1<insertid="insertStudent"parameterType="com.bigdata.pojo.Student">2<selectKeykeyProperty="sno"resultType="Integer"order="BEFORE">3 selectif(max(sno)isnull,1,max(sno)+1)asnewIdfromstudent4</selectKey>5 insertintostudent(sno,sname,sage)values(#{sno},#{sname},#{sage})6</insert>【任务2-6】向学生表(student)中添加一条学生信息(null,李雷,20)。当前student数据库表的数据记录情况如图2.2.1所示。图2.2.1

当前student表的数据记录情况操作要点编写接口方法(抽象);

重写接口抽象方法并实现业务功能;编写映射文件;

测试运行查看结果。具体操作见视频

实操2.6添加操作

删除操作:在MyBatis框架中,在MyBatis框架中,<delete>元素用于实现SQL映射删除操作,其可以为数据库删除记录并返回结果信息。示例代码如下。其常用属性如表2.2.2所示。

2知识支撑属性名称说明id表示命名空间中<delete>元素的唯一标识,通过该标识可以调用这条删除语句parameterType用于指定SQL语句中所需参数类的全限定名或别名,默认值是unsetflushCache用于指定是否需要MyBatis清空本地缓存和二级缓存timeout用于设置超时时间,单位为秒statementType用于设置MyBatis预处理类表2.2.2

<delete>元素的常用属性说明

1<deleteid="deleteStudent"parameterType="Integer">2 deletefromstudentwheresno=#{sno}3</delete>id属性的值为接口中的方法名;parameterType的值表传入参数的数据类型,如果要清空整个数据库中的数据记录,那么该属性可省略;参数符号“#{参数}”表示创建一个预处理参数【任务2-7】删除学生表(student)中年龄(sage)为20的学生的信息。当前student数据库表的数据记录情况如图2.2.2所示。(操作要点同上)图2.2.2

当前student表的数据记录情况具体操作见视频

实操2.7删除操作

修改操作:在MyBatis框架中,<update>元素用于实现SQL映射修改操作,其可以为数据库修改记录并返回结果信息。示例代码如下。其常用属性如表2.2.2所示。

2知识支撑1<updateid="updateStudent"parameterType="com.bigdata.pojo.Student">2 updatestudentsetsage=#{sage}wheresno=#{sno}3</update>【任务2-8】将学生表(student)中学号(sno)为1的学生的姓名修改为“张大”。当前student数据库表中的数据记录情况如图2.2.3所示。(操作要点同上)图2.2.3

当前student数据库表中的数据记录情况具体操作见视频

实操2.8修改操作

我们重点学习了<insert>、<delete>、<update>三个元素的作用、常用属性以及实际应用示例,还了解了特殊场景下(如数据库不支持自增主键)的解决方案。大家课后一定要结合实操视频,自己动手编写代码,把这些知识点真正消化吸收,只有多练才能熟练掌握,为后续的学习和项目开发做好准备。3章节小结感谢大家的观看与聆听!任务2.3关联映射了解表与表的三种映射关系;能够通过Java对象描述数据之间的关系;理解<association>、<collection>等元素的相关属性与嵌套方法;会使用<association>、<collection>等元素进行一对一、一对多、多对多关联查询操作。1本节任务

虽然MyBatis框架提供了自动映射机制,使得数据库表的字段可以与Java对象的属性自动映射,但在实际开发过程中,数据库表的字段名与Java对象的属性名之间往往存在差异。当两者不一致时,自动映射会失效。<resultMap>元素可以手动指定字段与属性的映射关系,确保查询结果被正确填充。

关联映射:表与表之间一般存在3种关系:一对一、一对多和多对多。如图2.3.1所示一对一:指一个数据库表中的一条记录最多可以和另一个数据库表中的一条记录相关;一对多:指一个数据库表中的一条记录在关联字段上可以对应另一个数据库表中的多条记录。多对多:指两个数据库表之间的多条记录可以互相对应。为实现多对多关联映射,通常需要借助第三个关联表来存储两个表之间的关联关系。

2知识支撑图2.3.1

表与表之间的关系

数据库表之间的关系实质上反映的是数据与数据之间的关系,因此除了数据库表,在Java中还可以通过对象描述数据之间的关系。图2.3.2所示为通过Java对象描述数据与数据之间的关系。

2知识支撑图2.3.2

通过Java对象描述数据与数据之间的关系一对一:在本类中定义与之关联的类的对象,并以此作为属性;一对多:一个A类对象对应多个B类对象;多对多:若有两个相互关联的类,则可以在任意一个类中定义多个对方类的对象。

一对一关系查询:<association>元素用于处理一对一关系查询,该元素是<resultMap>元素的子元素,提供了一系列用于维护数据表之间的关系的属性,具体如表2.3.1所示。

2知识支撑属性名称说明property用于指定映射到的实体类对象的属性,与表字段一一对应column用于指定表中对应的字段javaType用于指定映射到实体对象的属性的类型jdbcType用于指定数据表中对应字段的类型fetchType用于指定在关联查询时是否启用延迟加载,有lazy和eager两个属性值可供选择,默认值为lazyselect用于指定引入嵌套查询的子SQL语句autoMapping用于指定是否自动映射typeHandler用于指定一个类型处理器

表2.3.1<association>元素的常用属性说明

可以通过以下两种方式配置<association>元素。示例代码如下:嵌套查询方式:通过执行另外一条SQL映射语句来返回预期的复杂类型。嵌套结果查询方式:使用嵌套结果映射来处理重复的联合结果的子集。

2知识支撑1<associationproperty="sc_no"column="sc_no"javaType="com.bigdata.pojo.StudentCredit"2select="com.bigdata.dao.StudentCreditDao.findStudentCreditNoById"/>1<associationproperty="sc_no"javaType="com.bigdata.pojo.StudentCredit">2<idproperty="id"column="sc_no"/>3<resultproperty="sc_no"column="sc_no"/>4</association>【任务2-9】一人一档案。要求查询用户“花花”的档案信息。操作要点数据准备;

编写实体类;创建DAO接口并定义接口方法(抽象);

重写接口抽象方法并向数据库中插入数据;创建并编写MyBatis映射文件;

修改MyBatis核心配置文件;测试运行查看结果。具体操作见视频

实操2.9一对一关系映射

一对多关系查询:在MyBatis中,<collection>元素用于处理一对多关系查询,其大部分属性与<association>元素的相同,但包含一个特殊属性ofType。ofType属性与javaType属性对应,用于指定实体类对象中集合类属性所包含的元素的类型。可以将查询结果中的多条记录映射到一个Java对象的集合属性中,从而实现一对多关系的数据封装。可以通过以下两种方式配置该元素。嵌套查询方式:通过执行另外一条SQL映射语句来返回预期的复杂类型,示例代码如下。嵌套结果查询方式:使用嵌套结果映射来处理重复的联合结果的子集,示例代码如下。2知识支撑1<collectionproperty="ordersList"column="id"ofType="com.bigdata.pojo.Orders"2select="com.bigdata.dao.OrdersDao.selectOrders/>1<associationproperty="sc_no"column="sc_no"javaType="com.bigdata.pojo.StudentCredit"2select="com.bigdata.dao.StudentCreditDao.findStudentCreditNoById"/>【任务2-10】一个用户可以购买多个商品。要求查询uid为4的用户购买的所有商品的信息。(操作要点同上)具体操作见视频

实操2.10一对多关联映射

多对多关系查询:在MyBatis中,也使用<collection>元素进行多对多关系查询。【任务2-11】一个学生可以选修多门课程,一门课程可以被多个学生选修。查询选修了课程“高等数学”的学生。(操作要点同上)2知识支撑具体操作见视频

实操2.11多对多关联映射

我们重点学习了表与表的三种关联关系(一对一、一对多、多对多),以及如何用Java对象描述这些关系;掌握了MyBatis中实现关联查询的核心元素——处理一对一的<association>和处理一对多、多对多的<collection>,包括它们的属性和两种配置方式(嵌套查询、嵌套结果查询);最后还通过三个实际任务,明确了关联查询的操作步骤。3章节小结感谢大家的观看与聆听!任务2.4配置resultMap自动映射级别和MyBatis缓存机制了解MyBatis的3种自动映射级别类型以及自动映射级别的配置方法;理解一级缓存、二级缓存的定义及原理;会启动一级缓存和二级缓存。1本节任务

resultMap自动映射级别result自动映射级别的类型及适用场景MyBatis提供了3种自动映射级别类型,其可在核心配置文件mybatis-config.xml的<settings>标签中通过autoMappingBehavior设置项进行配置。NONE:禁用自动映射,只有在<resultMap>中明确指定的映射才会生效。适用于希望对映射关系进行精确控制,但不想依赖自动映射的场景。PARTIAL:默认的自动映射级别,会自动映射除嵌套结果映射(也就是含有<association>或<collection>标签)之外的结果集。在大多数情况下,默认使用PARTIAL自动映射级别就足够了。FULL:会自动映射所有结果集,包含嵌套结果映射。

适用于当数据库表的字段名和Java对象的属性名基本一致,且结果集包含嵌套结构时,可以使用FULL自动映射级别,减少手动配置的工作量。2知识支撑自动映射级别的配置方法在MyBatis核心配置文件mybatis-config.xml里,使用<settings>标签来配置自动映射的级别。示例代码如下。2知识支撑1<configuration>2<settings>3<!--设置自动映射级别为FULL-->4 <settingname="autoMappingBehavior"value="FULL"/>5</settings>6 <!--其他配置-->7</configuration>如果使用Java代码配置MyBatis,那么也可以通过Configuration对象来设置自动映射级别。示例代码如下。1Configurationconfiguration=newConfiguration();2//设置自动映射级别为FULL3configuration.setAutoMappingBehavior(4 org.apache.ibatis.session.AutoMappingBehavior.FULL);5//其他配置6…MyBatis缓存机制:MyBatis提供了两级缓存机制,分别是一级缓存和二级缓存,合理使用缓存可以显著提升数据库操作的性能,减少对数据库的访问次数。

一级缓存

:一级缓存又称本地缓存,可以理解为SqlSession的缓存。换句话说,在同一个SqlSession里执行相同的查询操作时,MyBatis会优先从一级缓存中查找结果。若一级缓存中存在所需的数据,就直接返回该数据,而不会再次执行数据库查询。

原理:当开启一个SqlSession后,MyBatis会为这个SqlSession创建一个缓存区域。在执行查询操作时,MyBatis会把查询的SQL语句及相应的参数作为键,查询结果作为值,存放到这个缓存区域中。如果之后在同一个SqlSession里执行相同的查询操作(SQL语句和参数都相同),那么MyBatis会先检查缓存中是否有对应的结果。如果有,就直接使用缓存中的结果;如果没有,才会去数据库中执行查询,并把查询结果存入缓存。示例代码如下。运行后结果如图2.4.1所示。

2知识支撑2知识支撑1SqlSessionsqlSession=MyBatisUtils.getSqlSession();2//第一次:执行查询操作3Studentstudent=(Student)sqlSession.selectOne("findStudentBySno",2);4//第二次:执行查询操作5Studentstudent1=(Student)sqlSession.selectOne("findStudentBySno",2);6//此处省略提交事务、释放资源代码7...8System.out.println("第一次查询结果:"+student);9System.out.println("第二次查询结果:"+student1);10System.out.println(student==student1?11"两次的查询结果是同一对象":"两次的查询结果不是同一对象");缓存失效的情况SqlSession关闭:当SqlSession关闭时,它所对应的一级缓存也会被清空。执行增删改操作:在同一个SqlSession中执行插入、更新或删除操作后,为了保证数据的一致性,MyBatis会清空一级缓存。图2.4.1

开启一级缓存调用后的执行结果MyBatis缓存机制:MyBatis提供了两级缓存机制,分别是一级缓存和二级缓存,合理使用缓存可以显著提升数据库操作的性能,减少对数据库的访问次数。

二级缓存

:二级缓存是Mapper级别(namespace级别)的缓存,其可以在多个SqlSession之间共享数据。这意味着,不同的SqlSession只要操作的是同一个Mapper中的查询语句,就可以共享二级缓存中的数据。

配置步骤:全局开启二级缓存:在MyBatis核心配置文件mybatis-config.xml中,设置<settings>元素里的cacheEnabled属性为true。示例代码如下。

2知识支撑1<settings>2<settingname="cacheEnabled"value="true"/>3</settings>在Mapper文件中开启二级缓存:虽然上述配置会启用MyBatis的二级缓存功能,但仍需要单独开启每个Mapper,因此在对应的Mapper.xml文件中添加<cache>标签及其中的内容。示例代码如下。

2知识支撑1<mappernamespace="com.example.mapper.UserMapper">2<!--开启二级缓存-->3<cacheeviction="LRU"flushInterval="60000"size="512"readOnly="true"/>4<!--SQL语句-->5 …6</mapper>在Dao接口实现类中调用并测试运行。运行结果如图2.4.2所示。图2.4.2

开启二级缓存调用后的执行结果

第一是resultMap的自动映射级别,包括NONE(禁用自动映射)、PARTIAL(默认,不映射嵌套结果)、FULL(全量映射,包括嵌套结果)三种级别,以及XML和Java代码两种配置方式。

第二是MyBatis的两级缓存,一级缓存是SqlSession级别的本地缓存,默认开启,缓存只在当前SqlSession有效,增删改或关闭SqlSession

温馨提示

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

评论

0/150

提交评论