MyBatis(三)-----对应关系

1、一对一java

一、sql语句 建表 插入数据sql

CREATE TABLE teacher(
      t_id  VARCHAR(255) PRIMARY KEY, 
      t_name VARCHAR(255)
  );

CREATE TABLE class(
      c_id VARCHAR(255) PRIMARY KEY, 
      c_name VARCHAR(255), 
      teacher_id VARCHAR(255)
  );

ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(t_id)

INSERT INTO teacher(t_id,t_name) VALUES('t11111','teacher1');
INSERT INTO teacher(t_id,t_name) VALUES('t22222','teacher2');

INSERT INTO class(c_id,c_name, teacher_id) VALUES('c1111','class_a', 't11111');
INSERT INTO class(c_id,c_name, teacher_id) VALUES('c2222','class_b', 't22222');

对应关系mybatis

二、class teacher实体类app

package com.test.model;

public class Classes {

    private String c_id;

    private String c_name;

    private Teacher teacher;

    public String getC_id() {
        return c_id;
    }

    public void setC_id(String c_id) {
        this.c_id = c_id;
    }

    public String getC_name() {
        return c_name;
    }

    public void setC_name(String c_name) {
        this.c_name = c_name;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
}

 

package com.test.model;

public class Teacher {
    private String teacher_id;

    private String teacher_name;


    public String getTeacher_id() {
        return teacher_id;
    }

    public void setTeacher_id(String teacher_id) {
        this.teacher_id = teacher_id;
    }

    public String getTeacher_name() {
        return teacher_name;
    }

    public void setTeacher_name(String teacher_name) {
        this.teacher_name = teacher_name;
    }
}

dao层接口 servicec层 controller层省略测试

<?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.test.dao.IClassesDao"><!-- 对应dao层接口的名字 -->


    <resultMap id="classesMap" type="com.test.model.Classes">
        <id property="c_id" column="c_id" javaType="java.lang.String"></id>
        <result property="c_name" column="c_name" javaType="java.lang.String"></result>
<!--自定义结果集-->
        <association property="teacher" javaType="com.test.model.Teacher">
            <id property="teacher_id" column="t_id"/>
            <result property="teacher_name" column="t_name"/>
        </association>
    </resultMap>


<select id="selClass" resultMap="classesMap" parameterType="java.lang.String">
    SELECT * from class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_name=#{c_name}
</select>



</mapper>

测试结果:this

 

2、一对多spa

sqlcode

CREATE TABLE student(
    s_id VARCHAR(20) PRIMARY KEY, 
    s_name VARCHAR(20), 
    class_id VARCHAR(20)
);

INSERT INTO student(s_id,s_name, class_id) VALUES('s1','student_A','c1111');
INSERT INTO student(s_id,s_name, class_id) VALUES('s2','student_B','c1111');
INSERT INTO student(s_id,s_name, class_id) VALUES('s3','student_C','c1111');
INSERT INTO student(s_id,s_name, class_id) VALUES('s4','student_D','c1111');
INSERT INTO student(s_id,s_name, class_id) VALUES('s5','student_E','c1111');
INSERT INTO student(s_id,s_name, class_id) VALUES('s6','student_F','c1111');

实体类studentxml

package com.test.model;

public class Student {

    private String s_id;
    private String s_name;

    public String getS_id() {
        return s_id;
    }

    public void setS_id(String s_id) {
        this.s_id = s_id;
    }

    public String getS_name() {
        return s_name;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }
}

class类中添加一个list<Student>对象

mapper

<?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.test.dao.IClassesDao"><!-- 对应dao层接口的名字 -->

    <!--自定义结果集-->
    <resultMap id="classesMap" type="com.test.model.Classes">
        <id property="c_id" column="c_id" javaType="java.lang.String"></id>
        <result property="c_name" column="c_name" javaType="java.lang.String"></result>
        <!--teacher表-->
        <association property="teacher" javaType="com.test.model.Teacher">
            <id property="teacher_id" column="t_id"/>
            <result property="teacher_name" column="t_name"/>
        </association>
    </resultMap>
    
    

    


<select id="selClass" resultMap="classesMap" parameterType="java.lang.String">
    SELECT * from class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_name=#{c_name}
</select>



    <resultMap id="ClaStudent" type="com.test.model.Classes">
        <id property="c_id" column="c_id" javaType="java.lang.String"></id>
        <result property="c_name" column="c_name" javaType="java.lang.String"></result>
        <!--teacher表-->
        <association property="teacher" javaType="com.test.model.Teacher">
            <id property="teacher_id" column="t_id"/>
            <result property="teacher_name" column="t_name"/>
        </association>
        <!-- ofType指定students集合中的对象类型 -->
        <collection property="students" ofType="com.test.model.Student">
            <id property="s_id" column="s_id"/>
            <result property="s_name" column="s_name"/>
        </collection>


    </resultMap>
 
    <select id="getCLaStudent" resultMap="ClaStudent" parameterType="java.lang.String">
    select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and  c.c_name=#{c_name}
   </select>

</mapper>

其余省略

查询成功

MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。

相关文章
相关标签/搜索