软件架构设计实践- 基于SSM框架 课件 第11章 多表关联映射_第1页
软件架构设计实践- 基于SSM框架 课件 第11章 多表关联映射_第2页
软件架构设计实践- 基于SSM框架 课件 第11章 多表关联映射_第3页
软件架构设计实践- 基于SSM框架 课件 第11章 多表关联映射_第4页
软件架构设计实践- 基于SSM框架 课件 第11章 多表关联映射_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

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

Architecture

Design

Practice

Based

on

SSM

Framework第11章多表关联映射123关联关系基础一对一关联操作一对多关联操作4多对多关联操作5使用MyBatis注解关联关系基础表与表的关系主要包括一对一、一对多、多对多等,在数据库建表的时候,也会通过主键与外键约束建立表之间的关联关系。1一对一关联操作在一对一的多表关联操作中,需要在结果映射resultMap元素中添加association子元素,其配置代码如下所示。2一对一关联操作association元素提供了一系列属性用户维护数据表关系,如表所示2一对一关联操作接下来以“驾校学员信息管理系统”中学员与练车卡之间的一对一关联,进行相应操作的讲解。2一对一关联操作1.数据准备在数据库driverschooldb中添加数据表t_stu_carcard,用于存储学员的练车卡信息,其SQL语句如下所示。2一对一关联操作2.创建POJO类在工程项目ORMdemo1的包com.hrbust.po中新建实体类StuCarCard用于学员卡信息的管理.2一对一关联操作3.创建接口类在工程的com.example.ssm.dao包中新建接口IStuCarCardDao,其中声明查询练车卡信息的方法findStuCarCardById,查询参数card_id,具体代码如下所示。2一对一关联操作4.创建映射文件在工程项目的com.example.ssm.mapper包中新建StuCarCardMapper.xml文件,主要定义学员练车卡信息相关操作的语句.2一对一关联操作5.创建测试方法并运行在MybatisTest测试类中,添加新方法findStuCarCardByCardId,在这里使用前面定义好的工具类MyBatisUtil,并采用getMapper的方式进行接口映射,代码如下所示。2一对一关联操作2/***根据card_id查询练车卡信息,并通过一对一关联查询出学员信息*/@TestpublicvoidfindStuCarCardByCardId(){//1、通过工具类获得SqlSession对象SqlSessionsession=MyBatisUtil.getSession();//通过getMapper方法,进行接口映射IStuCarCardDaostuCarCardDao=session.getMapper(IStuCarCardDao.class);//调用接口中的方法,返回查询结果StuCarCardstuCarCard=stuCarCardDao.findStuCarCardById(2);//打印查询结果System.out.println(stuCarCard);}一对一关联操作在这里采用嵌套结果的方式,在查询练车卡信息的时候,查询出了学员的相关信息,其实这里也可以采用嵌套查询的方式,在StuCarCardMapper.xml文件中添加如下代码。2一对多关联操作单向一对多操作单向多对一操作33.1单向一对多操作与一对一关联关系相比,在项目开发中使用更多的是一对多的关联关系,而且在现实生活中很多实体之间的关联也都是一对多的。通常情况下,使用MyBatis来处理一对多关系的时候,需要在映射结果集resultMap元素中添加collection子元素。collection子元素的属性大部分与association子元素相同,但是它还包含了一个特殊属性——ofType。ofType属性与javaType属性对应,它用于指定实体对象中集合类属性所包含的元素类型。3.1单向一对多操作collection元素的使用也比较简单,可以采用嵌套查询和嵌套结果的方式进行,代码示例如下所示。3.1单向一对多操作

1.数据准备在数据库mybatis中添加数据表t_car_coach,用于存储教练的相关信息,其SQL语句如下所示。3.1单向一对多操作在本案例中由于教练与学员之间是一对多的关联关系,教练是“一”,学员是“多”,因此要在学员的数据表中添加教练数据表的主键作为外键进行约束。给t_student数据表添加外键的SQL语句如下所示。3.1单向一对多操作2.创建POJO类在包com.example.ssm.pojo中新建实体类Coach(教练),其代码如下所示。3.1单向一对多操作3.创建接口类在工程项目的src目录下com.example.ssm.dao包中新建接口ICoachDao,声明根据教练coach_id查询教练信息的方法findCoachById,查询参数coach_id,具体代码如下所示。3.1单向一对多操作4.创建映射文件在工程项目的src目录下的包com.example.ssm.mapper中新建CoachMapper.xml文件,用于映射教练信息的相关操作,代码如下所示。3.1单向一对多操作5.编写测试方法并运行在MybatisTest测试类中,添加新方法findCoachByCoachId,代码如下所示。3.2单向多对一操作在“驾校学员信息管理系统”中,学员与教练之间是多对一的关联关系,即:多名学员可以关联一位教练,更严格的讲,就是一名学员只能关联一位教练。所以在一对多的关联关系中,站在“一”端看是一对多的关系,但是站在“多”端看,其实又是一对一的关系。3.2单向多对一操作在本案例中,从学员端来看,就是一名学员只能够关联一位教练。下面结合该案例来深入讲解多对一单向关联操作的具体步骤。首先,注销POJO类Coach中的属性List<Student>stus,取消从教练到学员的导航性,在POJO类Student添加属性Coachcoach,增加从学员到教练的导航性。3.2单向多对一操作然后,在映射文件CoachMapper.xml文件增加查询教练的方法findCoachByCoachId1,代码如下所示。3.2单向多对一操作在映射文件StudentMapper.xml文件中,增加查询学员信息的方法findStudentAndCoachByStuId,代码如下所示。3.2单向多对一操作最后在测试类MybatisTest中增加测试方法findStudentAndCoachByStuId,其代码如下所示。多对多关联操作在实际项目开发中,多对多的关联关系也是非常常见的,以“驾校学员管理信息系统”为例,就存在学员与教练车之间的多对多关系。通常情况下,多对多的关联关系都转化为一对多的形式进行处理,在数据库中需要建立关联表。以学员与教练车为例,可以这样理解,站在“学员”端看,一名学员可以使用多辆教练车,那么学员与教练车之间是一对多的对应关系;站在“教练车”端看,一辆教练车可以供多名学员学习使用,那么教练车与学员之间也是一对多的对应关系。因此,在MyBatis框架的实现中,就是把多对多的关联关系转化为两个一对多的对应关系进行处理的。4多对多关联操作1.数据准备在项目数据库mybatis中新建数据表t_coachcar,用于存储教练车信息,SQL语句如下所示。4多对多关联操作向教练车数据表中插入3条记录,以便项目后面的程序测试使用,其SQL语句如下所示。4多对多关联操作建立学员与教练车之间多对多关联关系的数据表t_coachcar_stu,用于存储学员与教练车之间对应关系,其SQL语句如下所示。4多对多关联操作向关联关系数据表t_coachcar_stu中插入数据,建立学员与教练车之间的联系,共插入6条数据,其SQL语句如下所示。4多对多关联操作2.创建POJO实体类在工程项目的src目录的com.example.ssm.pojo包中,新建实体类CoachCar,对应教练车的相关信息,代码如下所示。4多对多关联操作3.创建映射接口在工程项目src目录com.example.ssm.dao包中,新建接口ICoachCarDao,用于自动实现映射文件中定义的查询方法(SQL查询语句),这里声明查询方法findCoachCarById,查询参数为car_id,具体代码如下所示。4多对多关联操作4.创建映射文件在com.example.ssm.mapper包中创建映射文件CoachCarMapper.xml文件,用于定于对教练车对象CoachCar的各种操作,在这里定义根据car_id查询教练车信息的SQL语句,其代码如下所示。4多对多关联操作4多对多关联操作5.编写测试方法在MybatisTest测试类中,添加方法findCoachCarByCarId,用于根据car_id查询教练车信息和关联的学员信息,代码如下所示。4课程思政实体之间多对多的关联关系,在映射的时候,能不能不转化为两个一对多的关系,而是直接进行映射呢?答案其实可以的,在ORM框架Hibernate中,就采用了<set>元素和<many-to-many>进行多对多关联关系的直接映射,但是这是付出巨大代价的。而在MyBatis框架中就采用化繁为简、曲线求解的方式,把多对多的关联关系转化为了两个一对多的关联关系,这样问题就简化了,求解就方便了。因此,在生活、学习、工作中,要学会辩证的看待问题,不要一味地追求某一性能,而要综合考虑,学会利用最小的代价去解决问题,同时在分析问题的时候,要遵守马列主义的基本原则,采用唯物辩证法,客观公正的看待问题、解决问题。使用MyBatis注解在MyBatis框架中,除了XML的映射方式,还支持通过注解实现POJO对象和数据表之间的关系映射。使用注解的时候,一般将SQL语句直接写在接口上。与Spring框架一样,使用注解的方式比XML的映射方式更加简洁,能够减少程序员的代码量。55.1SQL语句映射注解MyBatis提供的SQL语句映射注解主要为了方便SQL语句的编写,等同于XML文件中的insert、select、update以及delete元素,减少程序员编写XML文件的代码量。下面以“驾校学员信息管理系统”中学员信息的管理为例,介绍SQL语句映射注解的使用。5.1SQL语句映射注解1.@Insert注解使用@Insert注解实现在数据表t_student中新增学员信息的代码如下所示。@Insert("insertintot_studen(stu_name,age,sex,email)values(#{stuName},#{age},#{sex},#{email})")publicintinsert(Studentstudent);5.1SQL语句映射注解2.@Select注解使用@Select注解查询数据表t_student中所有学员信息的代码如下所示。@Select("Select*fromt_student")publicList<Student>queryAllStudent();5.1SQL语句映射注解3.@Update注解使用@Update注解更新数据表t_student中学员信息的代码如下所示。@Update("updatet_studentsetstu_name=#{stuName},age=#{age},sex=#{sex},email=#{email}wherestu_id=#{stuId}")publicintupdateStudentById(Studentstudent);5.1SQL语句映射注解4.@Delete注解使用@Delete注解删除数据表t_student中一名学员信息的代码如下所示。@Delete("deletefromt_studentwherestu_id=#{id}")publicintdeleteStudentById(Integerid);5.1SQL语句映射注解5.@Param注解使用@Param注解可以映射多个查询参数,例如根据学员的性别和年龄查询学员信息,其代码如下所示。@Select("Select*fromt_studentwheresex=#{sex}andage=#{age}")publicList<Student>queryStudentBySexAndAge(@Param(value=”sex”)Stringsex,@Param(”age”)Integerage);5.2结果集映射注解结果集映射使用到的主要元素有@Result、@Results、@ResultMap,其中@Results注解主要用来定义一个结果集映射,与@Result注解配合使用;@ResultMap主要用来引用一个定义好的结果集映射。这里以查询所有学员信息为例,其代码如下所示。.5.3关系映射注解1.

@one注解@one注解用于映射实体之间的一对一关联关系,例如,在“驾校学员信息管理系统”中学员与练车卡之间,根据练车卡信息能够关联查询到学员信息,其代码如下所示。.5.3关系映射注解2.@many注解@ma

温馨提示

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

评论

0/150

提交评论