首页 > 其他分享 >Mybatis_06 _查询语句对应关系

Mybatis_06 _查询语句对应关系

时间:2023-04-13 17:13:49浏览次数:37  
标签:语句 mybatis 06 name teacher tid student Mybatis id

Mybatis_06 对应关系

多对一: 使用关联 association

一对多: 使用集合 collection

创建SQL表:

CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
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');
INSERT INTO `teacher`(`id`,`name`) VALUES('1','赵老师');

表的关系:

image-20230412203139456

测试环境搭建:

1、新建实体类Teacher、Student

2、建立Mapper接口,StudentMapper,TeacherMapper

3、建立Mapper.xml文件

4、在核心配置文件中绑定Mapper接口

5、测试查询是否成功

image-20230412213332389

mapper接口

image-20230412213116525

mapper对应的mapper.xml文件

image-20230412213133530

image-20230412213232970

多对一:

按照查询嵌套处理:

<!--
  思路:
      1、查询所有的学生信息
      2、根据查出来的学生的tid,查询对应的老师!
  -->
<select id="getStudent" resultMap="StudentTeacher">
    select * from mybatis.student;
</select>
<resultMap id="StudentTeacher" type="Student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <!--   复杂的属性需要单独处理
           对象: association
           集合: collection
         -->
    <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>

<select id="getTeacher" resultType="Teacher">
    select * from mybatis.teacher where id=#{tid};
</select>

按照结果嵌套处理:

<select id="getStudent2" resultMap="StudentTeacher2">
    select s.id sid,s.name sname,t.name tname
    from mybatis.student s,mybatis.teacher t
    where s.tid=t.id;
</select>
<resultMap id="StudentTeacher2" type="Student">
    <result property="id" column="sid"/>
    <result property="name" column="sname"/>
    <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
    </association>
</resultMap>

Mysql 多对一查询方式:

  • 子查询
  • 联表查询

一对多:

新建实体类:

Student:

public class Student {
    private int id;
    private String name;
    private int tid;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", tid=" + tid +
                '}';
    }
}

按照结果嵌套处理:

TeacherMapper:

public interface TeacherMapper {

//    List<Teacher> getTeacher();

    //获取指定老师下的所有学生
    Teacher getTeacher(@Param("tid") int id);

    Teacher getTeacher2(@Param("tid") int id);
}
<!-- 按结果嵌套查询 -->
<select id="getTeacher" resultMap="TeacherStudent">
    select s.id sid,s.name sname,t.name tname,t.id tid
    from mybatis.student s,mybatis.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="students" ofType="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="tid" column="tid"/>
    </collection>
</resultMap>

按照查询嵌套处理:

<!--子查询-->
<select id="getTeacher2" resultMap="TeacherStudent2">
    select * from mybatis.teacher where id= #{tid};
</select>
<resultMap id="TeacherStudent2" type="Teacher">
    <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherID" column="id"/>
</resultMap>

<select id="getStudentByTeacherID" resultType="Student">
    select *
    from mybatis.student
    where tid=#{tid};
</select>

测试:

@Test
public void test2(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.getTeacher(1);
    System.out.println(teacher);
    sqlSession.close();
}
@Test
public void test3(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.getTeacher2(1);
    System.out.println(teacher);
    sqlSession.close();
}

总结:

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

标签:语句,mybatis,06,name,teacher,tid,student,Mybatis,id
From: https://www.cnblogs.com/ZLey/p/17315486.html

相关文章

  • springboot学习之四(整和mybatis)
    springboot整和mybatis    1.mapper文件开发 2.纯注解开发    https://www.cnblogs.com/fps2tao/p/13821490.html ......
  • ASEMI代理ADI亚德诺AD8065ARTZ-REEL7车规级芯片
    编辑-ZAD8065ARTZ-REEL7芯片参数:型号:AD8065ARTZ-REEL7−3dB带宽:145MHz0.1dB平坦度的带宽:7MHz输入超速恢复时间:175ns输出恢复时间:170ns斜率:180V/μs三阶拦截:24dBm输入电压噪声:7nV/√Hz输入电流噪声:0.6fA/√Hz输入偏移电压:0.4mV输入偏置电流:2pA输入失调电流:1pAFET输入范围:−5.0to+......
  • 老冯笔记MyBatisPlus&lombok
    1.MyBatis-Plus介绍参考资料官方指南:https://baomidou.com/pages/24112f/#特性官方配置:https://baomidou.com/pages/56bac0/GitHub:https://github.com/baomidou/mybatis-plus特点只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。只需简单配置,即可快速进行......
  • ASEMI代理ADI亚德诺AD8065ARTZ-REEL7车规级芯片
    编辑-ZAD8065ARTZ-REEL7芯片参数:型号:AD8065ARTZ-REEL7−3dB带宽:145MHz0.1dB平坦度的带宽:7MHz输入超速恢复时间:175ns输出恢复时间:170ns斜率:180V/μs三阶拦截:24dBm输入电压噪声:7nV/√Hz输入电流噪声:0.6fA/√Hz输入偏移电压:0.4mV输入偏置电流:2pA输入失调电流:1pAFET输......
  • 在idea运行maven项目 将mybatis的接口与接口对应xml文件放在同一个包下,启动时无法找到
    在项目的在pom文件中引入如下<resources><resource><directory>src/main/java</directory><excludes><exclude>**/*.java</exclude></excludes></resource>......
  • mybatis的坑-foreach
    往MyBatis中批量插入数据,我们常常这么干<insertid="batchInsert"parameterType="java.util.List">insertintoUSER(id,name)values<foreachcollection="list"item="model"index="index"separator=&qu......
  • mysql主从1062主键冲突跳过错误
    1062错误——主键冲突,出现这种情况就是从库出现插入操作,主库又插入相同的数据,iothread没问题,sqlthread出错处理此种错误一般有两种思路:1、直接跳过错误执行语句2、找到错误执行语句,修复主库2数据https://www.cndba.cn/leo1990/article/2957https://www.cndba.cn/leo1990/articl......
  • mybatisPlus-增删改查
    引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.or......
  • Mybatis-Plus如何自定义SQL注入器?
    有关Mybatis-Plus常用功能之前有做过一篇总结:MyBatisPlus常用功能总结!(附项目示例)一、什么是SQL注入器我们在使用Mybatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法,BaseMapper中每一个方法其实就是一个SQL注入器在Mybatis-Plus的核心(core......
  • Mybatis-关联关系映射
    1.一对多 1.1.导入数据表--一对多--客户表(主表)createtablet_customer(customer_idintprimarykeynotnullauto_increment,customer_namevarchar(50)notnull);--多对一--订单表(从表)createtablet_order(order_idintprimarykeynotnull......