做网站平台多少钱,织梦网站修改使用教程,专业做网站建设公司好吗,莆田做网站公司电话【图书介绍】《SpringSpring MVCMyBatis从零开始学#xff08;视频教学版#xff09;#xff08;第3版#xff09;》-CSDN博客
《SpringSpring MVCMyBatis从零开始学(视频教学版)#xff08;第3版#xff09;》(杨章伟#xff0c;刘祥淼)【摘要 书评 试读】- 京东图书 …【图书介绍】《SpringSpring MVCMyBatis从零开始学视频教学版第3版》-CSDN博客
《SpringSpring MVCMyBatis从零开始学(视频教学版)第3版》(杨章伟刘祥淼)【摘要 书评 试读】- 京东图书
MyBatis入门之一对一关联关系示例-CSDN博客
在实际应用中应用更多的关联关系是一对多或多对一。例如一个班级有多个学生即多个学生属于一个班级。使用MyBatis是怎么处理这种一对多关联关系的呢在本书第7章所讲解的resultMap元素中包含一个collection子元素MyBatis就是通过该元素来处理一对多关联关系的。collection子元素的属性大部分与collection元素相同但其还包含一个特殊属性—ofType。ofType属性与javaType属性对应用于指定实体对象中集合类属性所包含的元素类型。
collection元素可以参考如下两种示例进行配置具体代码如下
!--方式一嵌套查询--
collection propertystudentList columnid ofTypecom.ssm.po.Studentselect com.ssm.mapper.StudentMapper.selectStudent/!--方式二嵌套结果--
collection propertystudentList ofTypecom.ssm.po.Studentid propertyid columnstudent_id/result propertyusername columnusername/
/collection【示例9-2】在了解了MyBatis处理一对多关联关系的元素和方式后接下来以班级和学生之间的这种一对多关联关系为例详细讲解如何在MyBatis中处理一对多关联关系具体步骤如下。 在db_mybatis数据库中创建两个数据表tb_banji和tb_student同时在表中预先插入几条数据执行的SQL语句如下所示
# 创建一个名称为tb_banji的表暂时添加少量字段
CREATE TABLE tb_banji(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32)
);
#插入两条数据
INSERT INTO tb_banji VALUES(1,16软件技术1班);
INSERT INTO tb_banji VALUES(2,16软件技术2班);
# 创建一个名称为tb_student的表暂时添加少量字段
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32),
sex CHAR(1),
banji_id INT ,
FOREIGN KEY (banji_id) REFERENCES tb_banji(id)
);
#插入3条数据
INSERT INTO tb_student VALUES(1,孙淼,m,1);
INSERT INTO tb_student VALUES(2,刘梦奕,f,1);
INSERT INTO tb_student VALUES(3,无为,m,2);在com.ssm.po包中创建持久化类班级类Banji和学生类Student并在两个类中定义相关属性和方法如文件9.7和文件9.8所示。
文件9.7 Banji.java
01 package com.ssm.po;
02 import java.util.List;
03 //班级类
04 public class Banji {
05 private Integer id;
06 private String name;
07 private ListStudent studentList;
08 public Integer getId() {
09 return id;
10 }
11 public void setId(Integer id) {
12 this.id id;
13 }
14 public String getName() {
15 return name;
16 }
17 public void setName(String name) {
18 this.name name;
19 }
20 public ListStudent getStudentList() {
21 return studentList;
22 }
23 public void setStudentList(ListStudent studentList) {
24 this.studentList studentList;
25 }
26 public String toString() {
27 return Banji [id id , name name , studentList studentList ];
28 }
29 }文件9.8 Student.java
01 package com.ssm.po;
02 //学生类
03 public class Student {
04 private Integer id;
05 private String name;
06 private String sex;
07 public Integer getId() {
08 return id;
09 }
10 public void setId(Integer id) {
11 this.id id;
12 }
13 public String getName() {
14 return name;
15 }
16 public void setName(String name) {
17 this.name name;
18 }
19 public String getSex() {
20 return sex;
21 }
22 public void setSex(String sex) {
23 this.sex sex;
24 }
25 public String toString() {
26 return Student [id id , name name , sex sex ];
27 }
28 }在com.ssm.mapper包中创建班级实体映射文件BanjiMapper.xml并在文件中编写一对多关联映射查询的配置如文件9.9所示。
文件9.9 BanjiMapper.xml
01 ?xml version1.0 encodingUTF-8?
02 !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
03 http://mybatis.org/dtd/mybatis-3-mapper.dtd
04 mapper namespacecom.ssm.mapper.BanjiMapper
05 !--一对多查看某一班级及其关联的学生信息
06 注意若关联查询出的列名相同默认使用前者所以需要使用别名区分 --
07 select idfindBanjiWithStudent parameterTypeInteger
08 resultMapBanjiWithStudentResult
09 select b.*,s.id as student_id,s.name as sname,s.sex
10 from tb_banji b,tb_student s
11 where b.ids.banji_id and b.id#{id}
12 /select
13 resultMap typeBanji idBanjiWithStudentResult
14 id propertyid columnid /
15 result propertyname columnname /
16 !--一对多关联映射collection
17 ofType表示属性集合中元素的类型ListStudent属性即Student类--
18 collection propertystudentList ofTypeStudent
19 id propertyid columnstudent_id /
20 result propertyname columnsname /
21 result propertysex columnsex /
22 /collection
23 /resultMap
24 /mapper在文件9.9中使用MyBatis嵌套结果的方式定义了一个根据班级id查询班级及其关联的学生信息的 select语句。因为返回的班级对象中包含Student集合对象属性所以需要手动编写结果映射信息。 将映射文件BanjiMapper.xml的路径配置到核心配置文件mybatis-config.xml中其代码如下所示
mapper resourcecom/ssm/mapper/BanjiMapper.xml / 在测试类MyBatisAssociatedTest中编写测试方法findBanjiTest()。
Test
public void findBanjiTest(){SqlSession sqlSession MybatisUtils.getSession();//查询班级id为1的班级信息及其关联的学生集合信息Banji banji
sqlSession.selectOne(com.ssm.mapper.BanjiMapper.findBanjiWithStudent,1);System.out.println(banji.toString());sqlSession.close();
}执行方法后控制台输出结果如图9.2所示。使用MyBatis嵌套结果的方式查询出了班级及其关联的学生集合信息。这就是MyBatis一对多的关联查询。 图9.2 运行结果
注意上述示例从班级的角度出发班级与学生之间是一对多的关联关系但如果从单个学生的角度出发一个学生只能属于一个班级即一对一的关联关系。