首页 > 其他分享 >Mybatis关联映射

Mybatis关联映射

时间:2023-03-08 12:44:51浏览次数:32  
标签:return String 映射 cid class 关联 stu Mybatis public

1. 一对一

stu拥有一个stu_card

1.1 student实体类

将外键代表的实体放在属性

public class Student {
    private Integer sid;

    private String sname;

    private StuCard stuCard;

    private String phone;

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public StuCard getStuCard() {
        return stuCard;
    }

    public void setStuCard(StuCard stuCard) {
        this.stuCard = stuCard;
    }

    @Override
    public String toString() {
        return sid + " " + sname + " " + phone + " " + stuCard;
    }
}

1.2 StudentMapper.xml

<resultMap id="StudentMap" type="entity.Student">
    <id column="sid" property="sid"></id>
    <result column="sname" property="sname"></result>
    <!--        一对一关联 外键-->
    <association property="stuCard" javaType="entity.StuCard">
        <id column="cid" property="cid"></id>
        <result column="balance" property="balance"></result>
    </association>
</resultMap>

<select id="getStudentBySid" parameterType="Integer" resultMap="StudentMap">
    select *
    from stu s left join stu_card sc on s.cid = sc.cid
    where s.sid = #{sid}
</select>

2.一对多

stu_class有多个stu

2.1 stuClass实体类

public class StuClass {
    private Integer cid;

    private String cname;

    private List<Student> students;

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    @Override
    public String toString() {
        return cid + " " + cname + " " + students;
    }
}

2.2 StuClassMapper.xml

<resultMap id="StuClassMap" type="entity.StuClass">
    <!--        主键-->
    <id column="cid" property="cid"></id>
    <!--        列的映射关系-->
    <result column="cname" property="cname"></result>
<!--        ofType指定的这个List所存放的javaBean的类型-->
<!--        javaType指定的当前这个配置的标签所对应的属性,比如我们这里的collection配置的是一个List,就可以配置成javaType=“java.util.ArrayList”-->
    <collection property="students" ofType="entity.Student">
        <id column="sid" property="sid"></id>
        <!--        列的映射关系-->
        <result column="sname" property="sname"></result>
    </collection>
</resultMap>

<select id="getStuClassByClassId" parameterType="Integer" resultMap="StuClassMap">
    select *
    from stu_class sc left join stu s on s.class_id = sc.cid
    where sc.cid = #{cid}
</select>

3.多对多

通过俩个实体的主键中间表转化为一对多
teacher和stu_class 建立class_teacher表

3.1 teacher实体类

public class Teacher {
    private Integer tid;
    private String tname;

    private List<StuClass> classes;

    public Integer getTid() {
        return tid;
    }

    public void setTid(Integer tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public List<StuClass> getClasses() {
        return classes;
    }

    public void setClasses(List<StuClass> classes) {
        this.classes = classes;
    }

    @Override
    public String toString() {
        return tid + " " + tname + classes;
    }
}

3.2 TeacherMapper.xml

<resultMap id="TeacherMap" type="entity.Teacher">
    <!--        主键-->
    <id column="tid" property="tid"></id>
    <!--        列的映射关系-->
    <result column="tname" property="tname"></result>
    <!--        ofType指定的这个List所存放的javaBean的类型-->
    <!--        javaType指定的当前这个配置的标签所对应的属性,比如我们这里的collection配置的是一个List,就可以配置成javaType=“java.util.ArrayList”-->
    <collection property="classes" ofType="entity.StuClass">
        <id column="cid" property="cid"></id>
        <!--        列的映射关系-->
        <result column="cname" property="cname"></result>
    </collection>
</resultMap>

<select id="getTeacherByTid" parameterType="Integer" resultMap="TeacherMap">
    select *
    from class_teacher ct left join teacher t on ct.tid = t.tid
                            left join stu_class sc on ct.cid = sc.cid
    where t.tid = #{tid}
</select>

4.主键映射

4.1 StuClassMapper.xml

俩种写法

<insert id="insertStuClass" parameterType="entity.StuClass" useGeneratedKeys="true" keyProperty="cid">
    insert into stu_class(cid, cname)
    values (#{cid}, #{cname})
</insert>
<!--    不支持主键递增时-->
<insert id="insertStuClass1" parameterType="entity.StuClass">
    insert into stu_class(cid, cname)
    values (#{cid}, #{cname})
    <selectKey keyColumn="cid" keyProperty="cid" resultType="Integer" order="AFTER">
        select LAST_INSERT_ID()
    </selectKey>
</insert>

4.2 StuClassService

public int insertStuClass(){
    String resource = "config.xml";
    StuClass stuClass = new StuClass();
    stuClass.setCname("20-13");

    int result = -1;
    try{
        InputStream in = Resources.getResourceAsStream(resource);

        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
        SqlSessionFactory ssf = ssfb.build(in);
        SqlSession sqlSession=ssf.openSession();

        String statement="mapper.StuClassMapper.insertStuClass1";
        
        //插入的数据数量
        result = sqlSession.insert(statement,stuClass);
        System.out.println(result);
        //获取自增的主键
        System.out.println(stuClass.getCid());
        sqlSession.commit();
        sqlSession.close();
    }catch (Exception e){
        e.printStackTrace();
    }
    return result;
}

标签:return,String,映射,cid,class,关联,stu,Mybatis,public
From: https://www.cnblogs.com/lwx11111/p/17191637.html

相关文章

  • mybatis异常 java.lang.ClassCastException: com.sun.proxy.$Proxy445
    此类异常处理:java.lang.ClassCastException:com.sun.proxy.$Proxy445cannotbecasttocom.xxx.**MapperBridgeApplication启动类的注解没有扫描到对应的Mapper文......
  • Spring Boot + MybatisX = 王炸!!
    1.什么是MybatisX?MybatisX是一款基于IDEA的快速开发插件,方便在使用mybatis以及mybatis-plus开始时简化繁琐的重复操作,提高开发速率。2.使用MybatisX的好处节省大量......
  • mybatis 源码简单探究
    一、初始化环境中文网:https://mybatis.net.cn前提maven环境jdk1.8mysql8.0pom.xml<dependencies><dependency><groupId>mysql</grou......
  • MybatisPlus的逻辑删除
    在这里简述一下什么是逻辑删除,对于我们数据库表的设计,其中许多表会有一个status字段(就是标记当条数据是否显示在前端,也有叫做deleteflag),当他标记为0或者1即为删除,此仅仅表......
  • 手牵手入门Spring6整合Mybatis3.5
    方式一Object类get和set,无参构造+有参构造Pom.xml引入依赖<!--打包方式jar--><packaging>jar</packaging><!--配置多个仓库--><repositories><!--Spring6-->......
  • 业务日志关联调用链的TraceId信息Arms
     您可以在应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位分析、解决问题。 背景信息ARMS在业务......
  • 【Mybatis】数据库动态查询
    在工作目录中新建文件夹idea中file→new→project→Maven      pom.xml中dependencies之内的是依靠<?xmlversion="1.0"encoding="UTF-8"?><projectxm......
  • 跟老杜从零入门MyBatis到架构思维(二)MyBatis入门程序
    MyBatis入门程序只要你会JDBC,MyBatis就可以学。2.1版本软件版本:●IntelliJIDEA:2022.1.4●NavicatforMySQL:16.0.14●MySQL数据库:8.0.30组件版本:●MySQL驱......
  • 跟老杜从零入门MyBatis到架构思维(一)MyBatis概述
    今天这篇文章带大家详细了解MyBatis框架配合视频教程观看,更易学习理解,课程讲解从Mybatis的一些核心要点与实战中的运用,一直过渡到MyBaits源码,由表及里的代入架构思维。一......
  • MyBatis 动态SQL标签汇总
    if标签<selectid="getEmpByCondition"resultType="com.xy.mybatis.dynamic.pojo.Emp">select*fromempwhere1=1<iftest="name!=''andname!=......