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屬性指定集合中元素的對象類型。

相關文章
相關標籤/搜索