现在有这么一个需求:
当查询这个学生信息的时候, 接着把这个学生对应的老师的信息查询出来.
这就需要一对一进行查询.
一: 准备工作
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 中写入对应的查询语句, 接着进行一些配置.
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]]
本篇博文的源代码点击 下载.