现在有这么一个需求:
当查询这个学生信息的时候, 接着把这个学生对应的老师的信息查询出来.
这就需要一对一进行查询.
一: 准备工作
1. 建立数据表CREATE TABLE teacher(
t_id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
t_name VARCHAR(255)
);
CREATE TABLE student(
s_id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
s_name VARCHAR(255),
t_id INT(11),
FOREIGN KEY(t_id) REFERENCES teacher(t_id)
)
INSERT INTO teacher(t_name) VALUES('Tom');
INSERT INTO student(s_name,t_id) VALUES('Stu1', 1);
INSERT INTO student(s_name,t_id) VALUES('Stu2', 1);
INSERT INTO student(s_name,t_id) VALUES('Stu3', 1);
2. 建立对应的实体类package com.mybatis.entities;
public class Teacher {
private Integer id;
private String name;
// 写好 getter/ setter方法
// 写好 toString 方法, 便于测试
}
====================================
package com.mybatis.entities;
public class Student {
private Integer id;
private String name;
private Teacher teacher;
// 写好 getter/ setter方法
// 写好 toString 方法, 便于测试
}
3. 定义对应的映射文件, 并在 conf.xml 文件中注册
由于我们只查询学生的信息, 所以, 这里指定义 Student类的映射文件 StudentMapper.xml. 如下:
二: 测试
1. 在 StudentMapper.xml 中写入对应的查询语句, 接着进行一些配置.<?xml version="1.0" encoding="UTF-8"?>
mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
SELECT t.t_id, t.t_name, s.s_id, s.s_name, s.t_id
FROM teacher t, student s
WHERE t.`t_id`=s.`t_id` AND s.`s_id`=#{id}
SELECT s_id, s_name, t_id FROM student WHERE s_id=#{s_id}
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{t_id}
2. 测试代码package com.mybatis.test;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.entities.Student;
import com.mybatis.util.MyBatisUtil;
public class TestStudent {
@Test
public void testGetStudent1() {
SqlSession session = MyBatisUtil.getSqlSession();
String statement = "com.mybatis.entities.StudentMapper.getStudent1";
Student student = session.selectOne(statement, 1);
System.out.println(student);
}
@Test
public void testGetStudent2() {
SqlSession session = MyBatisUtil.getSqlSession();
String statement = "com.mybatis.entities.StudentMapper.getStudent2";
Student student = session.selectOne(statement, 2);
System.out.println(student);
}
}
// 执行结果
//Student [id=2, name=Stu2, teacher=Teacher [id=1, name=Tom]]