软件架构设计实践- 基于SSM框架 课件 第10章 单表的CRUD操作_第1页
软件架构设计实践- 基于SSM框架 课件 第10章 单表的CRUD操作_第2页
软件架构设计实践- 基于SSM框架 课件 第10章 单表的CRUD操作_第3页
软件架构设计实践- 基于SSM框架 课件 第10章 单表的CRUD操作_第4页
软件架构设计实践- 基于SSM框架 课件 第10章 单表的CRUD操作_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

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

Architecture

Design

Practice

Based

on

SSM

Framework第10章单表的CRUD操作123数据查询操作使用insert元素添加数据使用delete元素删除数据4使用update元素修改数据5使用getMapper和工具类简化代码编写数据查询操作查询数据库中的数据并交由面向对象的程序设计语言进行处理是数据库操作中最为常见的操作。在第9章的“第一个MyBatis应用程序”中存在Student对象的两个属性没有封装成功的问题,在本章中将进行详细讲解。11.1结果映射resultMap所谓结果映射就是让数据表的字段名称与Java实体类的属性名称进行一一关联匹配的机制,以便于MyBatis查完数据库后能够将关系数据库的查询结果正确地封装为Java对象。1.1结果映射resultMapresultMap元素是对象关系映射文件<mapper>的子元素,主要完成对象属性与数据表字段之间的关系对应,方便数据查询使用。1.1结果映射resultMap1.1结果映射resultMap1.1结果映射resultMap针对第9章的“第一个MyBatis应用程序”中Student的属性stuId和stuName没有封装成功的问题,修改StudentMapper.xml文件,在其中加入如下代码:<!--定义结果集映射,Student类属性与数据表t_student字段--><resultMapid="studentResultMap"type="com.example.ssm.pojo.Student"><idproperty="stuId"column="stu_id"/><resultproperty="stuName"column="stu_name"/><resultproperty="age"column="age"/><resultproperty="sex"column="sex"/><resultproperty="email"column="email"/></resultMap>1.2使用selectList方法查询使用selectOne查询方法,能够从数据库中获取一条数据并封装成为一个POJO对象。但是实际项目开发中,很多时候通过查询语句返回的是一个结果集(二维表),MyBatis框架提供了selectList查询方法,其完整描述形式有三种:<E>List<E>selectList(Stringstatement)<E>List<E>selectList(Stringstatement,Objectparameter)<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds)1.2使用selectList方法查询其中,参数statement是在配置文件中定义的<select.../>元素的id,parameter是查询所需的参数,通常是对象或者Map,rowBounds对象用于分页,它的两个属性:offset指查询的当前页数;limit指当前页显示多少条数据。返回执行SQL语句查询结果的泛型对象的集合。1.2使用selectList方法查询下面以只包含一个参数的selectList方法为例,结合新的需求“查询用户名中含字母‘a’的学员信息”,进一步完善“第一个MyBatis应用程序”。在StudentMapper.xml文件中添加如下代码。1.3多参数查询在“第一个MyBatis应用程序”中,使用selectOne方法,传入了一个整数型参数100,在使用selectList方法中,没有传入参数,那么在多条件查询中,需要传入多个参数,该如何处理呢?这就需要使用到查询方法中的第二参数Objectparameter,在这里的Object可以使用Map类型,添加多个键-值对,完成多参数的传递。1.3多参数查询这里添加新的需求“查询年龄大于19岁的男学员”,来完成多参数查询的实例讲解。在StudentMapper.xml文件中添加如下代码。1.4动态查询查询条件的多变性在很多系统中都有所体现,例如购物网站中的商品筛选,筛选条件有很多,每个人选的条件也都不一样,那么最后拼接生成的SQL查询语句也不相同,在传统的JDBC或其它类似的开发框架中,开发人员通常需要手动拼接SQL语句,在拼接时要确保添加了必要的空格、关键字等,还要注意去掉列表最后一个列名的逗号等诸多需要考虑的细节问题。1.4动态查询MyBatis提供了强大的动态SQL功能,能够根据传递的参数不同,灵活的生成SQL语句,完成不同条件组合的查询任务。动态SQL大大减少了编写代码的工作量,更体现了MyBatis的灵活性、高度可配置性和可维护性。1.4动态查询1.if元素MyBatis框架中提供的if元素类似于Java程序设计中的if语句,是MyBatis动态SQL中最常用的判断语句。使用if元素可以节省许多拼接SQL的工作,而把主要精力集中在Java代码的编写和XML配置文件的维护上。1.4动态查询2.where元素在if元素的例子当中,读者不难发现,在where的后面需要手动加入“1=1”的子句,原因就是为了避免当if查询条件都不成立时,出现SQL语句错误的问题。其实在MyBatis中提供了where元素,就是为了避免在多条件判断的时候,出现关键字的冗余、缺失等情况。where元素主要用来简化SQL语句中的条件判断,可以自动处理AND/OR条件,语法如下所示。1.4动态查询3.choose元素与if元素的功能类似,choose元素同样用于条件判断,但不同的是choose元素适用于多个判断条件的场景,类似于Java程序设计中的switch语言。在choose元素中包含when和otherwise两个子元素,一个choose元素中至少包含一个when子元素,0个或1个otherwise子元素,与Java语言中的switch-case-default语句相同,都进行“多选一”的条件判断。当应用程序中业务关系比较复杂的时候,MyBatis可通过choose元素来动态控制SQL语言的生成。1.4动态查询动态语句choose-when-otherwise语法如下所示。1.4动态查询4.trim元素trim元素用于删除拼接SQL语句中多余的关键字,它可以直接实现where元素的功能,在前面的SQL查询语句中“where1=1”就是为了避免与后面的语句中“and”直接拼接。通过trim元素能够在SQL语句拼接的过程中根据参数的传递情况自动删除或者增加某些关键字。trim元素包含4个属性1.4动态查询5.foreach元素在前面已经介绍了Mybatis框架提供的if、where、trim、choose等元素,来处理动态查询语句中的一些简单操作。对于一些SQL查询语句中含有in条件,需要迭代条件集合来生成的情况,则可以使用foreach元素来实现SQL条件的迭代。1.4动态查询foreach元素用于循环语句,它很好的支持了集合操作,如List、Set、Map接口的数据集合ArrayList、HashSet、LinkedHashMap等,并对其提供遍历的功能,语法格式如下所示。1.4动态查询foreach元素的各个属性具体含义1.4动态查询6.bind元素在实际应用开发当中,由于不同的数据库支持的SQL语法略有不同,例如:字符串连接在MySQL数据库中采用concat函数、而Oracle数据库中采用符号“||”等。如果需要更换数据库,那么程序中的相应SQL语句就需要重写,这就给项目的维护带来了不便性,项目的可移植性也会大打折扣。此时,可以通过bind元素来解决此类数据库之间的兼容性问题。1.4动态查询bind元素将OGNL表达式的值绑定到一个变量中,通过bind元素对变量进行赋值,屏蔽各种数据库之间的差异,让SQL语句的引用变得更加简单。bind元素有两个属性。name:给对应参数取的别名。value:对应传入实体类的某个字段,可以进行字符串拼接等特殊处理。使用insert元素添加数据在上一节中介绍了MyBatis提供的各种数据查询操作,在本节中将介绍insert元素的使用方法,在MyBatis中通过insert能够定义插入语句,执行数据插入操作,其返回值为成功插入数据库记录的行数。21.4动态查询1.4动态查询使用insert元素向数据表插入数据时,一般都需要往数据表的多个字段同时插入数据,在这里就需要使用到集合数据类型,如Map、List、JavaBean等。在向数据表插入数据的时候,数据表的主键既可以自增长也可以是非自增长,在使用insert元素的时候,需要进行相应的设置,下面对这两种情况进行分别进行介绍。2.1主键由数据库自增长在项目开发中,有很多数据库都支持数据表主键的自增长,例如MySQL、SQLServer等数据库表可以采用自动递增的字段作为其主键,当向这样的数据库表插入数据时,即使不指定自增主键的值,数据库也会根据自增规则自动生成主键并插入到表中。2.2主键非自增长在项目开发中,如果没有设置数据表主键的自增长,或者数据库不支持主键的自增长(例如Oracle),就需要在项目开发中使用insert元素的子元素selectKey,手动进行主键的增长设置,selectKey元素的语法格式如下所示。2.2主键非自增长selectKey元素中属性说明如下:keyProperty:用于指定主键值对应的POJO类的属性。resultType:表示SQL查询语句所返回值的数据类型,这是用的Java语言中的数据库类型,例如:Integer、String等。order:该属性取值可以为BEFORE或AFTER。BEFORE表示先执行selectKey元素内的语句,再执行插入语句;AFTER表示先执行插入语句再执行selectKey元素内的语句。2.2主键非自增长在上述代码先通过selectKey元素,从数据表t_student中查询出stu_id的最大值并加1,作为传入参数student中stuId的属性值,然后再生成insert语句,并插入主键值。使用delete元素删除数据MyBatis框架用delete元素来定义delete语句,执行删除操作。当MyBatis执行完一条删除语句后,会返回一个整数,表示受影响的数据库记录的行数。3使用delete元素删除数据3使用delete元素删除数据在使用delete元素定义删除语句的时候,使用属性parameterType传入所需参数,可以是基本数据类型,也可以是集合类型,例如:List、Set、Map等,也可以是JavaBean。如果是单个参数,一般采用基本数据传递参数即可;如果是多个参数但是不超过5个,一般采用Map的集合类型即可;如果参数多个5个,使用Map进行参数传入,就会导致程序的可读性差、代码难以理解等诸多问题,此时一般采用JavaBean的方式进行参数传递。3使用delete元素删除数据这里以“删除驾校学员信息管理系统中的email地址含有‘org’、年龄为20岁的男性学员”为例,采用Map集合类型传入查询参数,来定义SQL语句。在StudentMapper.xml文件中添加删除数据的delete语句deleteStudentByMap,代码如下所示。3使用update元素修改数据MyBatis映射文件通过update元素定义更新语句,执行修改操作。当执行完update元素定义的更新语句之后,也会返回一个整数,表示修改数据库记录的行数。update元素的属性与delete元素类似、传递的参数的使用方法也是一样的。4使用update元素修改数据这里采用JavaBean的方式进行参数传递,完成“修改驾校学员信息管理系统中的编号为100的学员信息,姓名修改为Bob,年龄修改为25,电子邮箱修改为bob@126.com”。在StudentMapper.xml文件中添加修改数据的update语句updateStudentByJavaBean,代码如下所示。4使用update元素修改数据采用JavaBean的方式进行数据传递具有较好的灵活性,JavaBean的所有属性都可以当中参数传递到映射文件定义的SQL语句内,例如上例中updateStudentByJavaBean语句就是用了Student对象中的4个参数(stuId作为条件,其余stuName、age、email作为修改参数)。4使用getMapper和工具类简化代码编写在MybatisTest测试类中,读者不难发现findStudentById、findStudentByNamea等方法中很多代码是相同的,主要用来完成读取配置文件、构建SqlSessionFactory、关闭SqlSession等操作,根据代码复用原则,可以把这些重复的代码提取到一个公共的类中,建立一个工具类(MyBatisUtil),由工具类来完成这些公共的操作。5使用getMapper和工具类简化代码编写工具类MyBatisUtil的代入如下所示。5使用getMapper和工具类简化代码编写该工具类几乎可以应用于所有使用MyBatis框架的项目,具有较好的通用性,读者在项目开发中可以直接复用该类,简化项目代码的编写。5使用getMapper和工具类简化代码编写在MyBatis框架中,也提供了在DAO层面向接口的编程,在这里只需要定义接口以及接口所对应的映射文件,其实现类可以由MyBatis框架通过代理模式自动来生成,进一步降低了项目开发的复杂度,减少了代码的编写。5使用getMapper和工具类简化代码编写在工程项目中com.example.ssm.dao包中新建一个接口IStudentDao,声明一个查询方法findStudentById,代码如下所示。packagecom.example.ssm.dao;importcom.example.ssm.pojo.Student;publicinterfaceIStudentDao{

温馨提示

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

评论

0/150

提交评论