1. 程式人生 > >Mybatis學習總結(三)

Mybatis學習總結(三)

mybatis的級聯查詢

一.準備環境

1.1建立班級,學生,老師表。其中班級和老師是一對一關係,班級和學生是一對多關係。sql語句如下:
CREATE TABLE teacher(t_id INT(10),t_name VARCHAR(32),t_age INT(10));
CREATE TABLE class(c_id INT(10),c_name VARCHAR(32),teacher_id INT(10));
CREATE TABLE student(s_id INT(10) PRIMARY KEY AUTO_INCREMENT ,s_name VARCHAR(32),s_age INT
(10),class_id INT(10));
INSERT INTO class(c_id,c_name,teacher_id)VALUES (1,'classOne',1),(2,'classTwo',2); INSERT INTO teacher(t_id,t_name,t_age)VALUES (1,'zhangsan',31),(2,'lisi',43); INSERT INTO student(s_id,s_name,class_id)VALUES (1,'zhaoliu',16,1),(2,'wangwu',17,1),(3,'qianqi',15,2); ALTER TABLE class ADD
CONSTRAINT fk_class FOREIGN KEY class(teacher_id) REFERENCES teacher(t_id);
ALTER TABLE student ADD CONSTRAINT fk_student FOREIGN KEY student(class_id) REFERENCES class(c_id);
1.2建立實體類,class類:
import java.util.List;

public class Class {

    private int id;
    private String name;
    private Teacher teacher;
    private
List<Student> students; }
student類:
public class Student {

    private int id;
    private String name;
    private int age;
   }
teacher類:
public class Teacher {

    private int id;
    private String name;
    private int age;
    }

二.開始開發

2.1mybatis的配置檔案conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <environments default="mybatisDemo">
        <environment id="mybatisDemo">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="username" value="root" />
                <property name="password" value="" />
                <property name="url" value="jdbc:mysql:///test" />
            </dataSource>
        </environment>
    </environments>
    <!-- 註冊classMapper.xml檔案 -->
    <mappers>
        <mapper resource="mapper/classMapper.xml" />
    </mappers>
</configuration>
2.2.mabatis的實體類和表的對映檔案classMapper.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="mapper.classMapper">

   <!--通過<resultMap>對映實體類屬性名和表的欄位名對應關係 -->
    <resultMap type="entity.Class" id="classResultMap">
        <id property="id" column="c_id" />
        <result property="name" column="c_name" />
        <!-- association標籤解決一對一對映關係 -->
        <association property="teacher" column="teacher_id"
            javaType="entity.Teacher">
            <id property="id" column="t_id" />
            <result property="name" column="t_name" />
            <result property="age" column="t_age" />
        </association>
        <!-- collection標籤解決一對多對映關係,ofType指定students集合中的物件型別 -->
        <collection property="students" ofType="entity.Student">
            <id property="id" column="s_id" />
            <result property="name" column="s_name" />
            <result property="age" column="s_age" />
        </collection>
    </resultMap>

    <!-- 根據班級id查詢班級,班級老師,和班級學生 -->
    <select id="selectClass" parameterType="int" resultMap="classResultMap">
        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_id=#{id}
    </select>
</mapper>

三.測試

package test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import entity.User;
public class MybatisTest {
    @Test
    public void selectClass() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        entity.Class class1 = sqlSession.selectOne("mapper.classMapper.selectClass", 1);
        sqlSession.close();
        System.out.println(class1);
    }
}

四.查詢結果

這裡寫圖片描述