美文网首页
多对一关联

多对一关联

作者: 雪燃归来 | 来源:发表于2022-04-28 22:45 被阅读0次

一、创建数据库

create table students(
    sid char(5) primary key,
    sname varchar(20) not null,
    sage int not null,
    scid int not null
);

create table classes(
    cid int primary key AUTO_INCREMENT,
    cname varchar(30) not null unique,
    cdesc varchar(100)
)

二、创建实体类

Student1.java

package com.qfedu.pojo.moreToOne;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student1 {
    private String stuId;
    private String stuName;
    private int stuAge;
    private Clazz1 clazz1; // 学生所在班级
}

Clazz1.java

package com.qfedu.pojo.moreToOne;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Clazz1 {
    private int classId;
    private String className;
    private String classDesc;
}

三、创建持久层

Student1DAO.java

package com.qfedu.dao.moreToOne;

import com.qfedu.pojo.moreToOne.Student1;

public interface Student1DAO {
    public Student1 queryStudentBySid(String sid);
}

四、多对一查询(关联查询)

4.1、创建映射层

Student1Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.dao.moreToOne.Student1DAO">

    <resultMap id="student1Map" type="Student1">
        <id column="sid" property="stuId" />
        <result column="sname" property="stuName" />
        <result column="sage" property="stuAge" />
        <result column="cid" property="clazz1.classId" />
        <result column="cname" property="clazz1.className" />
        <result column="cdesc" property="clazz1.classDesc" />
    </resultMap>
    <select id="queryStudentBySid" resultMap="student1Map">
        select sid,sname,sage,scid,cid,cname,cdesc
        from students s INNER JOIN classes c
        ON s.scid = c.cid
        where s.sid=#{sid}
    </select>
</mapper>

4.2、测试

    @Test
    public void testQueryStudentBySid(){
        Student1DAO student1DAO = MyBatisUtil.getMapper(Student1DAO.class);
        Student1 student1 = student1DAO.queryStudentBySid("10004");
        System.out.println(student1);
    }

五、多对一查询(子查询)

5.1 持久层

Clazz1.java

package com.qfedu.dao.moreToOne;
import com.qfedu.pojo.moreToOne.Clazz1;

public interface Class1DAO {
    /**
     * 根据班级编号 查询班级信息
     */
    public Clazz1 queryClass(int classId);
}

5.2 映射层

Class1Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.dao.moreToOne.Class1DAO">

    <resultMap id="class1Map" type="Clazz1">
        <id column="cid" property="classId" />
        <result column="cname" property="className" />
        <result column="cdesc" property="classDesc" />
    </resultMap>
    <select id="queryClass" resultMap="class1Map">
        select cid, cname, cdesc
        from classes
        where cid=#{cid}
    </select>
</mapper>

Student1Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qfedu.dao.moreToOne.Student1DAO">

    <resultMap id="student1Map" type="Student1">
        <id column="sid" property="stuId" />
        <result column="sname" property="stuName" />
        <result column="sage" property="stuAge" />
        <association property="clazz1" select="com.qfedu.dao.moreToOne.Class1DAO.queryClass" column="scid"/>
    </resultMap>
    <select id="queryStudentBySid" resultMap="student1Map">
        select sid,sname,sage,scid
        from students where sid=#{sid}
    </select>
</mapper>

相关文章

  • Flask里面使用mysql数据库关系四大模板

    一对多 多对多 自关联一对多 自关联多对多

  • hibernate笔记-关联关系

    hibernate 关联关系主要有一对一,一对多,多对多 一对一关联 一对一关联包括: 主键关联 唯一外键关联 主...

  • laravel 模型关联

    laravel 模型关联 1、 一对一 2、 定义反向关联(可用户一对多的反向关联) 3、 一对多 4、 多对多 ...

  • 二、JPA 入门

    关联映射 一对多(多对一) 双向关联 多对多的双向关联 JPA 二级缓存的使用 (使用的 ehcache) 环境搭...

  • 多对一关联

    一、创建数据库 二、创建实体类 Student1.java Clazz1.java 三、创建持久层 Student...

  • hibernate双向关联(一对多,多对一)

    hibernate默认配置双向关联时,删除一这边的时候,不会删除多那边,而是把多的那边的关联字段设置为null,刚...

  • Hibernate映射(一对多)

    Hibernate映射关系其实有很多种,包含一对一,一对多,多对一,多对多。其中,还有包含单向关联,多想关联。但是...

  • Mongoose基于MongoDB建模并设置关联

    一、模型关联 1、一对多/多对多 在一中关联多中的字段,type为mongoose.Schema.Types.Ob...

  • 外键

    关联对象参考class RelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。...

  • 关联模型一对多

    模型名称不能用下划线 namespace app\admin\model; use think\Model; cl...

网友评论

      本文标题:多对一关联

      本文链接:https://www.haomeiwen.com/subject/byxryrtx.html