Ja 企业应用基础及开发- 10_第1页
Ja 企业应用基础及开发- 10_第2页
Ja 企业应用基础及开发- 10_第3页
Ja 企业应用基础及开发- 10_第4页
Ja 企业应用基础及开发- 10_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

任务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.ou

温馨提示

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

评论

0/150

提交评论