Mybatis學習總結(三)
阿新 • • 發佈:2019-01-08
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);
}
}