栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis多对一、多对一处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis多对一、多对一处理

10.多对一、多对一处理
  • 一个班级有多个学生
  • 学生角度:(关联)多个学生关联一个班级
  • 班级角度:(集合)一个班级集合了多个学生
10.1 环境搭建
  • 数据库建表
CREATE TABLE `teacher` (
  `id` INT(10) NOT NULL,
  `name` VARCHAr(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO teacher(`id`, `name`) VALUES (1, '王老师'); 

CREATE TABLE `students` (
  `id` INT(10) NOT NULL,
  `name` VARCHAr(30) DEFAULT NULL,
  `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 `students` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); 
INSERT INTO `students` (`id`, `name`, `tid`) VALUES ('2', '小红', '1'); 
INSERT INTO `students` (`id`, `name`, `tid`) VALUES ('3', '小张', '1'); 
INSERT INTO `students` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); 
INSERT INTO `students` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
  • 建实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
    private int id;
    private String name;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Students {
    private  int id;
    private   String   name;
    //多个学生对应一个老师
    private Teacher teacher;
}
  • 建Mapper接口和mapper.xml
  • 可以将mapper.xml放到项目的resources下同包目录下,dao包中只保留Mapper接口,编译后同包目录下的文件都输出到target文件中
  • 在核心配置文件中注册mapper接口
  • 测试查询是否成功
10.2 多对一实现方式
  • 按照查询进行嵌套处理:子查询
  • 题目:查询所有的学生消息(附带老师信息)




    
    
        
        
        
        
        
    
    
        select * from students ;
    
    
    SELECT s.id sid,s.name sname ,t.id tid,t.name tname FROM students s,teacher t WHERe s.tid = t.id


    
    
    
        
        
    

10.3 一对多实现方式
  • 题目:查询一个老师代课的学生消息

  • 实体类修改

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Students {
    private  int id;
    private   String   name;
    private int tid;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
    private int id;
    private String name;
    //一个老师关联多个学生
    private List students;
}
  • 按查询进行嵌套处理,子查询方式
 
    
        select * from students where tid = #{id}
    
  • 按结果进行嵌套处理,关联查询


    


    
        
        
        
        
            
            
        
    
  

  • 测试
@Test
public void test03(){
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.getTeacherListByIds02(1);
    System.out.println(teacher.toString());
    sqlSession.close();
    
}
  • 小结

collection:一对多

association:多对一

javaType=“”;指定实体类中属性的类型
ofType=“”;指定映射到集合中的实体类型,集合中的泛型属性

  • 注意

sql的可读性

一对多和多对一,属性和字段的映射关系

可以使用日志来排错

本专栏下一篇:MyBatis动态sql
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984891.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号