MyBatis(二)——多对一、一对多
生活随笔
收集整理的這篇文章主要介紹了
MyBatis(二)——多对一、一对多
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 多對一
- 1.1 在MySQL中創建student表、teacher表
- 1.2 編寫實體類
- 1.3 編寫接口
- 1.4 編寫接口對應的配置文件
- 1.5 確定兩個xml文件都綁定到了mybatis-config.xml的核心配置文件中
- 1.6 編寫測試類
- 2. 一對多
1. 多對一
多個學生都關聯同一個老師,以多個學生為中心
1.1 在MySQL中創建student表、teacher表
CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老師'); CREATE TABLE `student` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,`student``student``user``teacher``tid` INT(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `fktid` (`tid`),CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小紅', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小張', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
1.2 編寫實體類
Teacher類:
package com.zz.pojo;import lombok.Data;@Data public class Teacher {private int id;private String name; }Student類:
package com.zz.pojo;import lombok.Data;@Data public class Student {private int id;private String name;//學生關聯老師private Teacher teacher; }1.3 編寫接口
TeacherMapper 接口為空:
package com.zz.mapper;public interface TeacherMapper {}StudentMapper 接口:
有得到student列表的方法
1.4 編寫接口對應的配置文件
TeacherMapper.xml 為空:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zz.mapper.TeacherMapper"></mapper>StudentMapper.xml 配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zz.mapper.StudentMapper"><!--獲取所有學生及學生對應老師的信息:1. 獲取所有學生的信息2. 獲取所有學生的tid,然后再去老師表中查詢這個id所對應的老師--><resultMap id="StudentTeacher" type="Student"><id property="id" column="sid"/><result property="name" column="sname"/><!--數據庫中的tid是一個字段,而teacher是一個對象,所以不能使用result標簽這是多對一的情況,采用association標簽(關聯) student表關聯teacher表,且這個teacher對象是Teacher類型--><association property="teacher" javaType="Teacher"><id property="id" column="tid"/><result property="name" column="tname"/></association></resultMap><select id="getStudents" resultMap="StudentTeacher">select s.id sid,s.name sname,t.name tname,t.id tidFrom student s,teacher tWHERE s.tid=t.id</select> </mapper>1.5 確定兩個xml文件都綁定到了mybatis-config.xml的核心配置文件中
采用掃描包的方法來綁定,就不用一個個分別綁定
<mappers><!--通過掃描包來綁定--><package name="com.zz.mapper"/></mappers>1.6 編寫測試類
因為是多對一,采用學生綁定老師,所以編寫學生對應的測試類
編寫StudentMapperTest測試類
運行結果:
2. 一對多
通過老師獲取學生,以老師為中心
步驟與上相同,在此只寫與上面不同之處
(1)編寫實體類
(2)編寫接口
package com.zz.mapper;import com.zz.pojo.Teacher;public interface TeacherMapper {//獲取這個老師下的所有學生public Teacher getTeacher(int id);}(3)編寫接口的配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zz.mapper.TeacherMapper"><resultMap id="TeacherStudent" type="Teacher"><id property="id" column="tid"/><result property="name" column="tname"/><!--如果是集合(包含關系)--><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><!--學生的tid就是老師的id--><result property="tid" column="tid"/></collection></resultMap><!--Teacher里有個list集合,所以不能使用resultType,采用resultMap--><select id="getTeacher" resultMap="TeacherStudent">select s.id sid,s.name sname,t.name tname,t.id tidFrom student s,teacher tWHERE s.tid=t.id and t.id=#{id}</select></mapper>(4)編寫測試類
package com.zz.mapper;import com.zz.pojo.Teacher; import com.zz.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test;public class TeacherMapperTest {@Testpublic void testGetTeacher(){SqlSession session = MyBatisUtils.getSession();TeacherMapper mapper = session.getMapper(TeacherMapper.class);Teacher teacher = mapper.getTeacher(1);System.out.println(teacher);} }運行結果:
總結:
- 關聯 - association 【多對一】
- 集合 - collection 【一對多】
- javaType & ofType
javaType 用來指定實體類中屬性的類型
ofType 用來指定映射到List或者集合中的 pojo類型,泛型中的約束類型!
總結
以上是生活随笔為你收集整理的MyBatis(二)——多对一、一对多的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis(一)——基本架构、CUR
- 下一篇: MyBatis(三)——动态SQL