一对多关联查询
首先创建实体bean
public class Classes {
private int id;
private String name;
private List<Student> students;
public Classes() {
super();
}
public Classes(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Classes [id=" + id + ", name=" + name + ", students=" + students + "]";
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
public class Student{
private int id;
private String name;
public Student(){
super();
}
public Student(int id,String name){
super();
this.id = id;
this.name = name;
}
@Override
public String toString(){
return "Student [id=" + id + ", name=" + name + "]";
}
public void setId(int id){
this.id = id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
创建接口
public interface IClassesDao2 {
/**
* 使用表连接查询
* @param id
* @return
*/
public Classes selectClasses3(int id);
/**
* 使用子查询
* @param id
* @return
*/
public Classes selectClasses4(int id);
}
编写配置文件
<mapper namespace="com.han.mybatis.dao.IClassesDao2">
<!-- 注意连接查询中列名不能重复,若重复则需要重命名列名 -->
<select id="selectClasses3" resultMap="ClassResultMap3">
select c.id,c.name,s.id sid,s.name sname
from Classes c ,student s where s.classid=c.id and c.id = #{id}
</select>
<resultMap type="Classes" id="ClassResultMap3">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="students" ofType="student">
<id column="sid" property="id"/>
<result column="sname" property="name"/>
</collection>
</resultMap>
<!-- 正常查询,resultMap设置为定义的resultMap -->
<select id="selectClasses4" resultMap="ClassResultMap4">
select * from classes where id=#{id}
</select>
<resultMap type="Classes" id="ClassResultMap4">
<id column="id" property="id"/>
<result column="name" property="name"/>
<collection property="students" column="id" ofType="student" select="getStudents"></collection>
</resultMap>
<select id="getStudents" parameterType="int" resultType="student">
select * from student where classid = #{id}
</select>
测试结果
public class ClassesDao2Test {
@Test
public void selectClasses3Test(){
SqlSession sqlSession = MyBatisUtil.openSqlSession();
IClassesDao2 classesDao = sqlSession.getMapper(IClassesDao2.class);
Classes cs = classesDao.selectClasses3(1);
System.out.println(cs);
}
@Test
public void selectClasses4Test(){
SqlSession sqlSession = MyBatisUtil.openSqlSession();
IClassesDao2 classesDao = sqlSession.getMapper(IClassesDao2.class);
Classes cs = classesDao.selectClasses4(1);
System.out.println(cs);
}
}