前言
利用mybatis框架,使用簡單的xml配置映射成數據庫中的記錄
多表聯查
- 數據庫建表
//建立兩張表,教師表,班級表
//先建立教師表,因爲教師和班級有關聯,教師id是班級表的外鍵
CREATE TABLE teacher{
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
};
CREATE TABLE class{
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT
}
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREING KEY(teacher_id)REFERENCES
目錄結構
- 建立實體類
public class Teacher {
private int id;
private String name;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
public class Classes {
private int id;
private String name;
private Teacher teacher;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Teacher getTeacher() {return teacher;}
public void setTeacher(Teacher teacher) {this.teacher = teacher;}
}
- 建立ClassMapper.xml文件
//方法一:
//使用嵌套結果封裝聯表查詢的數據
<select id="getClass" parameterType="int" resultMap="getClassMap">
SELECT * FROM class c, teacher t WHERE c.teacher_id=t.tc_id AND c.c_id=#{id]
</select>
<resultMap type="Classes" id="getClassMap">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<!--association關聯的意思,關聯到teacher-->
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
方法二:
//利用上個sql語句的結果作爲下次查詢的條件
<select id="getClass2" parameterType="int" resultMap="getClass2Map">
SELECT * FROM class WHERE c_id=#{id}
</select>
<select id="getTeacher" parameterType="int" resultMap="Teacher">
SELECT t_id id,t_name name From teacher WHERE t_id=#{id}
</select>
<resultMap type="Classes" id="getClass2Map">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
- 在配置文件註冊
<mapper resource="com/atguigu/day03_mybatis/Test5/ClassMapper.xml"/>
- 測試
public class test5 {
@Test
public void testSelect(){
SqlSessionFactory factory = MybatisUtils.getFactory();
SqlSession session = factory.openSession();
String statement = "com.atguigu.day03_mybatis.Test5.ClassMapper.getClass";
Classes c = session.selectOne(statement,2);
System.out.println(c);
session.close();
}
}
//方法二在測試類裏面調用 String statement = "com.atguigu.day03_mybatis.Test5.ClassMapper.getClass2";
- 結果