现在有两张表,学生表跟教师表,一个教师对应多个学生
教师表:
CREATE TABLE `teacher` (
`id` int(11) ,
`name` varchar(20) ,
`age` int(11) ,
`address` varchar(100) ,
PRIMARY KEY (`id`)
)
学生表:
CREATE TABLE `student` (
`id` int(11) ,
`ter_id` int(10) ,
`name` varchar(255) ,
`phone` varchar(255) ,
`address` varchar(255) ,
`birthDay` date ,
PRIMARY KEY (`id`)
)
1.直接写多表联合查询sql,mapper文件对应好相应的实体类即可。
需要注意的两个点:
A.用分页插件pageHelper的时候,该种方式会导致查询错乱。
B.如果几个表有字段名相同的情况,字段赋值可能被覆盖。我们可以给字段取别名的方式来解决,如下:
SELECT
tea.id,
tea.NAME,
tea.age,
tea.address,
stu.id stu_id,
stu.ter_id stu_ter_id,
stu.NAME stu_name,
stu.phone stu_phone,
stu.address stu_address,
stu.birthday stu_birthday
FROM
teacher tea,
student stu
WHERE
tea.id = stu.ter_id
2.具体实现代码:
实体类Teacher.java 和 Student.java:
package com.shushan.entity;
import java.util.List;
public class Teacher {
private Integer id;
private String name; //姓名
private Integer age; //年龄
private String address; //地址
private List stuList; //学生集合
setter方法...
getter方法...
}
package com.shushan.entity;
import java.util.Date;
public class Student {
private Integer id;
private Integer terId; //教师id
private String name; //姓名
private String phone; //电话
private String address; //地址
private Date birthDay; //生日
setter方法...
getter方法...
}
mapper.xml文件
dao层代码:
package com.shushan.dao;
import com.shushan.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMultipleDao {
/**
* 一对多查询:方式一
* @param teacher
* @return
*/
public List getTeacherList(Teacher teacher);
}
1.采用子查询的方式。mapper.xml中对应好主表跟次表查询关系。
2.代码实现
实体类Teacher.java 和 Student.java:
详细见方式一
mapper.xml
dao层代码:
package com.shushan.dao;
import com.shushan.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMultipleTwoDao {
/**
* 一对多查询:方式二
* @param teacher
* @return
*/
public List getTeacherTwoList(Teacher teacher);
}