天天看点

六、注解方式实现关联查询

六、注解方式实现关联查询

1.创建表集添加数据参考上一章

2.定义实体类

前两步参考上一章

3.编写对应的dao

ClassesDao.java

package com.mybatis.dao;

import java.util.List;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.mybatis.entity.Classes;
import com.mybatis.entity.Teacher;

public interface ClassesDao {

	//一次性查找
	@Select("select c.c_id cid,c.c_name cname,c.teacher_id teacher_id,t.t_id tid,t.t_name tname from class c,teacher t where c.teacher_id=t.t_id")
	@Results(value={@Result(id=true,column="cid",property="c_id"),
			@Result(column="cname",property="c_name"),
			@Result(column="tid",property="teacher.t_id"),
			@Result(column="tname",property="teacher.t_name")
	})
	public List<Classes> getAllClasses();
	
	//多次查找
	@Select("select * from class")
	@Results(value={@Result(id=true,column="c_id",property="c_id"),
			@Result(column="c_name",property="c_name"),
			@Result([email protected](select="com.mybatis.dao.TeacherDao.getTeacherById"),
					column="teacher_id",property="teacher")
			})
	public List<Classes> getAllClasses2();
	
	@Select("select * from class")
	@Results(value={@Result(id=true,column="c_id",property="c_id"),
			@Result(column="c_name",property="c_name"),
			@Result([email protected](select="com.mybatis.dao.TeacherDao.getTeacherById"),
					column="teacher_id",property="teacher"),
			@Result([email protected](select="com.mybatis.dao.StudentDao.getStudentByClassId"),
					column="c_id",property="students")
			})
	public List<Classes> getAllClasses4();
}
           

TeacherDao.java

package com.mybatis.dao;

import org.apache.ibatis.annotations.Select;

import com.mybatis.entity.Teacher;

public interface TeacherDao {

	@Select("select * from teacher where t_id = #{t_id}")
	public Teacher getTeacherById(int t_id);
}
           

StudentDao.java

package com.mybatis.dao;

import java.util.List;

import org.apache.ibatis.annotations.Select;

import com.mybatis.entity.Student;

public interface StudentDao {

	@Select("select * from student where s_id = #{s_id}")
	public Student getStudentById(int id);
	@Select("select * from student where class_id = #{c_id}")
	public List<Student> getStudentByClassId(int c_id);
}
           

4.在conf.xml文件中注册

<mappers>
		<mapper class="com.mybatis.dao.ClassesDao" />
		<mapper class="com.mybatis.dao.TeacherDao" />
		<mapper class="com.mybatis.dao.StudentDao" />
		<mapper class="com.mybatis.dao.EmployeeDao" />
	</mappers>
           

5.测试

package com.mybatis.test;


import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.mybatis.dao.ClassesDao;
import com.mybatis.dao.StudentDao;
import com.mybatis.dao.TeacherDao;
import com.mybatis.util.DbUtil;

public class ClassesTest {

	SqlSession session = DbUtil.getSession();
	ClassesDao classesDao = session.getMapper(ClassesDao.class);
	@Test
	public void selectAllClasses() {
		System.out.println(classesDao.getAllClasses());
		System.out.println(classesDao.getAllClasses2());
		System.out.println(classesDao.getAllClasses4());
	}

}