多对一关系
下面设计了两张表,根据学生来查询
表的设计
利用Navicat for mysql建表,然后在查看菜单点击ER图表(概念模型) 如下:
设计好的表ER图表
上述表 student tid设置外键参考teacher的id,所以建好表后两者都为空要先添加teacher的数据。
多个学生对于一个老师
实体类
Teacher
public class Teacher {
private int id;
private String name;
//省略set/get方法
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}
Student
public class Student {
private int id;
private String name;
private Teacher teacher;
//省略set/get方法
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", teacher=" + teacher
+ "]";
}
}
编写映射文件
按结果嵌套处理
<mapper namespace="cn.sxt.entity.student.mapper">
<!-- 多对一处理有两种方式
1 .按结果嵌套处理
2 .按查询嵌套处理
-->
<!--按结果嵌套处理 -->
<select id="getStudents" resultMap="StudentTeacher">
select s.id sid,s.name sname,s.tid stid ,t.id tid,t.name tname from student s,teacher t where s.tid=t.id
</select>
<resultMap type="Student" id="StudentTeacher">
<id column="sid" property ="id"></id>
<result column="sname" property="name"></result>
<!-- 关联对象 property 关联对象在Student实体类的属性 javaType property对于属性的类型-->
<association property="teacher" javaType="Teacher">
<id column="tid" property="id"></id>
<result column="tname" property="name"></result>
</association>
</resultMap>
</mapper>
按查询结果嵌套处理
<!--按查询嵌套处理 -->
<select id="getStudents" resultMap="StudentTeacher">
select * from student
</select>
<resultMap type="Student" id="StudentTeacher">
<association property="teacher" column="tid" javaType="Teacher" select="cn.sxt.entity.teacher.mapper.getTeacher"></association>
</resultMap>
teacher.mapper.xml中
<mapper namespace="cn.sxt.entity.teacher.mapper">
<select id="getTeacher" resultType="Teacher">
select * from teacher where id=#{id}
</select>
</mapper>
测试
public static void main(String[] args) throws IOException {
StudentDao studentDao=new StudentDao();
List<Student> list=studentDao.getAll();
for(Student stu:list){
System.out.println("student name"+stu.getName()+" student's teacher name="+stu.getTeacher().getName());
}
}