1、多对一
1、1环境搭建
数据库
| CREATE TABLE teacher ( |
| id INT(10) NOT NULL, |
| NAME VARCHAR(64) DEFAULT NULL, |
| |
| PRIMARY KEY (id), |
| )ENGINE=INNODB DEFAULT CHARSET=utf8; |
| INSERT INTO teacher (id ,NAME) VALUES (1,'罗老师'); |
| |
| CREATE TABLE student ( |
| id INT(10) NOT NULL, |
| NAME VARCHAR(64) DEFAULT NULL, |
| tid INT(10) DEFAULT NULL, |
| PRIMARY KEY (id), |
| KEY fktid (tid), |
| CONSTRAINT fktid FOREIGN KEY (tid) REFERENCES teacher (id) |
| ) |
| ALTER TABLE student ENGINE=INNODB DEFAULT CHARSET=utf8; |
| |
| INSERT 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 (5,'小罗',1); |
MyBatis.xml配置
| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE configuration |
| PUBLIC "-//mybatis.org//DTD Config 3.0//EN" |
| "http://mybatis.org/dtd/mybatis-3-config.dtd"> |
| <configuration> |
| <settings> |
| <setting name="logImpl" value="STDOUT_LOGGING"/> |
| </settings> |
| <typeAliases> |
| <package name="com.Google.pojo"/> |
| </typeAliases> |
| |
| |
| |
| <environments default="development"> |
| <environment id="development"> |
| <transactionManager type="JDBC"/> |
| <dataSource type="POOLED"> |
| <property name="driver" value="com.mysql.jdbc.Driver"/> |
| <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/> |
| <property name="username" value="root"/> |
| <property name="password" value="root"/> |
| </dataSource> |
| </environment> |
| </environments> |
| |
| <mappers> |
| <mapper resource="com/Google/Dao/StudentMapper.xml"/> |
| <mapper resource="com/Google/Dao/TeacherMapper.xml"/> |
| </mappers> |
| </configuration> |
1、2编写实体类、
学生·
| @Data |
| public class Student { |
| private int id; |
| private String name; |
| private Teacher teacher; |
| } |
老师·
| @Data |
| public class Teacher { |
| private int id; |
| private String name; |
| } |
1、3编写接口方法
| public interface StudentMapper { |
| List<Student> getStudentList(); |
| List<Student> getStudentList1(); |
| } |
1.4编写Mapper
| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE mapper |
| PUBLIC "-//mybatis.org//DTD Config 3.0//EN" |
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| <mapper namespace="com.Google.Dao.StudentMapper"> |
| |
| <select id="getStudentList" resultMap="StudentMap"> |
| select * from student |
| </select> |
| <resultMap id="StudentMap" type="Student" > |
| <result property="id" column="id"/> |
| <result property="name" column="name"/> |
| <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> |
| </resultMap> |
| <select id="getTeacher" resultType="Teacher"> |
| select * from teacher |
| </select> |
| |
| <select id="getStudentList1" resultMap="StudentMap1"> |
| select s.id sid,s.name sname,t.name tname |
| from Student s,Teacher t |
| where s.tid=t.id |
| </select> |
| <resultMap id="StudentMap1" type="Student"> |
| <result property="id" column="sid"/> |
| <result property="name" column="sname"/> |
| <association property="teacher" javaType="Teacher" > |
| <result property="name" column="tname"/> |
| </association> |
| </resultMap> |
| </mapper> |
1、5实现
| package com.Google.Dao; |
| |
| import com.Google.pojo.Student; |
| import com.Google.units.sqlSessionFactory; |
| import org.apache.ibatis.session.SqlSession; |
| import org.junit.Test; |
| |
| import java.util.List; |
| |
| public class StudentMapperText { |
| @Test |
| public void getStudent(){ |
| SqlSession sqlSession = sqlSessionFactory.getsqlSession(); |
| StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); |
| List<Student> studentList = mapper.getStudentList(); |
| for (Student student : studentList) { |
| System.out.println(student); |
| } |
| sqlSession.close(); |
| } |
| @Test |
| public void getStudent1(){ |
| SqlSession sqlSession = sqlSessionFactory.getsqlSession(); |
| StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); |
| List<Student> studentList = mapper.getStudentList1(); |
| for (Student student : studentList) { |
| System.out.println(student); |
| } |
| sqlSession.close(); |
| } |
| } |
1、6运行结果
| Student(id=1, name=小明, teacher=Teacher(id=0, name=罗老师)) |
| Student(id=2, name=小红, teacher=Teacher(id=0, name=罗老师)) |
| Student(id=3, name=小张, teacher=Teacher(id=0, name=罗老师)) |
| Student(id=4, name=小王, teacher=Teacher(id=0, name=罗老师)) |
| Student(id=5, name=小罗, teacher=Teacher(id=0, name=罗老师)) |
2、一对多
2、1环境搭建和一对多一样
2、2编写实体类
| @Data |
| public class Student { |
| private int id; |
| private String name; |
| private int tid; |
| } |
| @Data |
| public class Teacher { |
| private int id; |
| private String name; |
| |
| private List<Student> student; |
| } |
2、3编写接口的方法
| public interface TeacherMapper { |
| Teacher getTeacher(@Param("tid") int id); |
| |
| Teacher getTeacher1(@Param("tid") int id); |
| } |
| |
2、4编写Mapper配置
| <?xml version="1.0" encoding="UTF-8" ?> |
| <!DOCTYPE mapper |
| PUBLIC "-//mybatis.org//DTD Config 3.0//EN" |
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| <mapper namespace="com.Google.Dao.TeacherMapper"> |
| |
| |
| <select id="getTeacher" resultMap="TeacherStudent"> |
| select s.id sid, s.name sname, t.id tid, t.name tname |
| from student s, |
| teacher t |
| where s.tid = t.id |
| and t.id = #{tid} |
| </select> |
| <resultMap id="TeacherStudent" type="Teacher"> |
| <result property="id" column="tid"/> |
| <result property="name" column="tname"/> |
| |
| <collection property="student" ofType="Student"> |
| <result property="id" column="sid"/> |
| <result property="name" column="sname"/> |
| <result property="tid" column="tid"/> |
| </collection> |
| </resultMap> |
| |
| <select id="getTeacher1" resultMap="TeacherStudent1"> |
| select * from teacher where id=#{tid} |
| </select> |
| <resultMap id="TeacherStudent1" type="Teacher"> |
| <result property="id" column="id"/> |
| <collection property="student" javaType="ArrayList" ofType="Student" select="getStudetByID" column="id"/> |
| </resultMap> |
| <select id="getStudetByID" resultType="Student"> |
| select * from student where tid=#{tid} |
| </select> |
| </mapper> |
2、5实现
| public class TeacherMapperText { |
| @Test |
| public void getTeacher(){ |
| SqlSession sqlSession = sqlSessionFactory.getsqlSession(); |
| TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); |
| Teacher teacher = mapper.getTeacher(1); |
| System.out.println(teacher); |
| sqlSession.close(); |
| } |
| @Test |
| public void getTeacher1(){ |
| SqlSession sqlSession = sqlSessionFactory.getsqlSession(); |
| TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); |
| Teacher teacher1 = mapper.getTeacher1(1); |
| System.out.println(teacher1); |
| sqlSession.close(); |
| } |
| } |
2.6运行结果
| |
| Teacher(id=1, name=罗老师, student=[Student(id=1, name=小明, tid=1), Student(id=2, name=小红, tid=1), Student(id=3, name=小张, tid=1), Student(id=4, name=小王, tid=1), Student(id=5, name=小罗, tid=1)]) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构