日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis(二)——多对一、一对多

發(fā)布時(shí)間:2025/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis(二)——多对一、一对多 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1. 多對一
    • 1.1 在MySQL中創(chuàng)建student表、teacher表
    • 1.2 編寫實(shí)體類
    • 1.3 編寫接口
    • 1.4 編寫接口對應(yīng)的配置文件
    • 1.5 確定兩個(gè)xml文件都綁定到了mybatis-config.xml的核心配置文件中
    • 1.6 編寫測試類
  • 2. 一對多

1. 多對一

多個(gè)學(xué)生都關(guān)聯(lián)同一個(gè)老師,以多個(gè)學(xué)生為中心

1.1 在MySQL中創(chuàng)建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 編寫實(shí)體類

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;//學(xué)生關(guān)聯(lián)老師private Teacher teacher; }

1.3 編寫接口

TeacherMapper 接口為空:

package com.zz.mapper;public interface TeacherMapper {}

StudentMapper 接口:
有得到student列表的方法

package com.zz.mapper;import com.zz.pojo.Student;import java.util.List;public interface StudentMapper {//獲取所有學(xué)生及學(xué)生對應(yīng)老師的信息List<Student> getStudents(); }

1.4 編寫接口對應(yīng)的配置文件

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"><!--獲取所有學(xué)生及學(xué)生對應(yīng)老師的信息:1. 獲取所有學(xué)生的信息2. 獲取所有學(xué)生的tid,然后再去老師表中查詢這個(gè)id所對應(yīng)的老師--><resultMap id="StudentTeacher" type="Student"><id property="id" column="sid"/><result property="name" column="sname"/><!--數(shù)據(jù)庫中的tid是一個(gè)字段,而teacher是一個(gè)對象,所以不能使用result標(biāo)簽這是多對一的情況,采用association標(biāo)簽(關(guān)聯(lián)) student表關(guān)聯(lián)teacher表,且這個(gè)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 確定兩個(gè)xml文件都綁定到了mybatis-config.xml的核心配置文件中

采用掃描包的方法來綁定,就不用一個(gè)個(gè)分別綁定

<mappers><!--通過掃描包來綁定--><package name="com.zz.mapper"/></mappers>

1.6 編寫測試類

因?yàn)槭嵌鄬σ?#xff0c;采用學(xué)生綁定老師,所以編寫學(xué)生對應(yīng)的測試類
編寫StudentMapperTest測試類

package com.zz.mapper;import com.zz.pojo.Student;import com.zz.utils.MyBatisUtils;import org.junit.Test;import java.util.List;public class StudentMapperTest {@Testpublic void testGetStudents(){StudentMapper mapper = MyBatisUtils.getSession().getMapper(StudentMapper.class);List<Student> students = mapper.getStudents();for (Student student : students) {System.out.println(student);}} }

運(yùn)行結(jié)果:

2. 一對多

通過老師獲取學(xué)生,以老師為中心
步驟與上相同,在此只寫與上面不同之處
(1)編寫實(shí)體類

package com.zz.pojo;import lombok.Data;import java.util.List;@Data public class Teacher {private int id;private String name;//老師對應(yīng)多個(gè)學(xué)生 (包含:集合)private List<Student> students; } package com.zz.pojo;import lombok.Data;@Data public class Student {private int id;private String name;private int tid; }

(2)編寫接口

package com.zz.mapper;import com.zz.pojo.Teacher;public interface TeacherMapper {//獲取這個(gè)老師下的所有學(xué)生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"/><!--如果是集合(包含關(guān)系)--><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><!--學(xué)生的tid就是老師的id--><result property="tid" column="tid"/></collection></resultMap><!--Teacher里有個(gè)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);} }

運(yùn)行結(jié)果:

總結(jié):

  • 關(guān)聯(lián) - association 【多對一】
  • 集合 - collection 【一對多】
  • javaType & ofType
    javaType 用來指定實(shí)體類中屬性的類型
    ofType 用來指定映射到List或者集合中的 pojo類型,泛型中的約束類型!
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的MyBatis(二)——多对一、一对多的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。