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

哪吒Java技能树--MyBaits学习笔记--关联和集合对应着多对一和一对多(“最易懂得MyBatis学习”)

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

哪吒Java技能树--MyBaits学习笔记--关联和集合对应着多对一和一对多(“最易懂得MyBatis学习”)

前 言 : textcolor{blue}{前言:} 前言:
gitee中MyBatis学习源码所用到的代码都可以在这里找到

点一下送你到Gitee

关联和集合对应着多对一和一对多
    • 十、多对一处理
      • 1. 基本环境搭建
        • 1.1 创建数据库表
        • 1.2 导入Lombok
        • 1.3 新建实体类Teacher,Student
        • 1.4 建立Mapper接口
        • 1.5建立Mapper.xml文件
        • 1.6 在核心配置文件中绑定注册我们的Mapper接口或者文件
        • 1.7 测试查询是否能够成功
      • 2. 按照查询嵌套处理
      • 3. 按照查询嵌套处理
    • 十一、一对多处理
      • 1. 环境搭建
      • 2. 按照结果嵌套处理
      • 3. 按照查询嵌套处理
      • 小结
      • 面试高频

十、多对一处理
  • 多个学生对应一个老师

  • 对于学生这边:关联,多个学生关联一个老师【多对一】

  • 对于老师这边:集合,一个老师又很多学生【一对多】

1. 基本环境搭建 1.1 创建数据库表
#数据库里面的`teacher`是键盘Tab上面的,而'王老师'这里的'是回车左边的
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 `student` (
  `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=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 (4, '小李', 1); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (5, '小王', 1);
1.2 导入Lombok

    
        org.projectlombok
        lombok
        1.18.20
    

1.3 新建实体类Teacher,Student
@Data
public class Teacher {
    private int id;
    private String name;
}
@Data
public class Student {
    private int id;
    private String name;
    //学生需要关联一个老师
    private Teacher teacher;
}
1.4 建立Mapper接口
import com.hxl.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

public interface TeacherMapper {

    @Select("select * from teacher where id = #{tid}")
    Teacher getTeacher(@Param("tid")int id);
}
public interface StudentMapper {
}
1.5建立Mapper.xml文件

这个地方创建mapper.xml文件时,需要注意创建的包一定可以展开否则会报错。

查看可以展开包的方式可以阅读这篇文章。













1.6 在核心配置文件中绑定注册我们的Mapper接口或者文件

这里如果使用class就必须让TeacherMapper和TeacherMapper.xml在同一个文件下。


    
    

1.7 测试查询是否能够成功
public class myTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(1);
        System.out.println(teacher);
        sqlSession.close();
    }
}
2. 按照查询嵌套处理

复杂的属性,我们需要单独处理. 对象:association 集合:collection
javaType=""指定属性的类型! 集合中的泛型信息,我们使用ofType获取

public interface StudentMapper {
    //查询所有的学生信息,以及对应的老师的信息
    public List getStudent();
}

    
    
        
        
        
        
    
    
        select * from teacher where id = #{id};
    

3. 按照查询嵌套处理

    select s.id sid, s.name sname,t.name tname,t.id tid from student s,teacher t where t.id = s.tid and t.id = #{tid};



    
    
    
    
    
        
        
        
    

3. 按照查询嵌套处理

    select * from student where tid = #{tid}

小结
  1. 关联-association【多对一】
  2. 集合-collection【一对多】
  3. javaType & ofType
    • javaType用来指定实体类中属性的类型
    • ofType用来指定映射到List或者集合张的pojo类型,泛型中的约束类型

注意点:

  • 保证sql的可读性,尽量保证通俗易懂
  • 注意一对多和多对一中,属性名和字段的问题
  • 如果问题不好排查错误,可以使用日志,建议使用Log4j

结果映射:结果映射

面试高频

M y S Q L 引 擎 ; I n n o D B 底 层 原 理 ; 索 引 ; 索 引 优 化 。 textcolor{red}{ MySQL引擎; InnoDB底层原理; 索引; 索引优化。 } MySQL引擎;InnoDB底层原理;索引;索引优化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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