这次是三张表连查,第一次写,若有需要改进的地方还请大家多多指点
一、三张表
教师基本信息表(teacher_info)
教师考勤表(leave)(注:教师一个月的出勤情况对应一条考勤)
教师工资明细表(teacher_salary)
在给表起名字的时候,注意有些是关键字,例如‘leave’在后续的代码中可能会造成一些错误,大家注意,不要像我的这个
表与表之间的关系:
一名教师有多条考勤,所以teacher_info 和leave之间是一对多的关系 1:n 因此在teacher_info对应的实体类中,添加了leaveTeacher 一个属性
一条考勤对应一条工资明细, leave 和 teacher_salary 是一对一的关系 1:1 因此在leave对应的实体类中,添加了teacherSalary 一个属性
通过mybatis-generator生成对应的实体类是这样的:
教师基本信息表(teacher_info):
public class TeacherInfo {
private Integer tnum;
private String name;
private String sex;
private Date birth;
private String tel;
private String grade;
private String school;
private String college;
private String office;
private String profess;
private String state;
private Date createtime;
private Date changetime;
// 三表联查 一名教师有多条考勤,所以用List
private List<LeaveTeacher> leaveTeacher;
}
教师考勤表(leave)
public class LeaveTeacher {
private Integer leaveId;
private Integer tnum;
private String teacherName;
private Date startTime;
private Float workDay;
private Float sickRelax;
private Float thingRelax;
private String approvePerson;
private String yearMonth;
private Float fullAttendance;
private Date createtime;
private Date changetime;
//关联的字段 考勤表和教师基本信息进行关联 考勤俩表联查
private String name;
//考勤表和工资表进行关联 一条考勤对应一条工资 三表联查
private TeacherSalary teacherSalary;
教师工资明细表(teacher_salary)
public class TeacherSalary { private Integer salTeacherId; private Integer leaveTeacherId; private Integer tnum; private String name; private String tMonth; private Float basicWage; private Float trafficWage; private Float fullReward; private Float totalWage; private Float kaoqinReduce; private Float secureReduce; private Float taxReduce; private Float totalReduce; private Float realWage; private Date createtime; private Date changetime;
二、mapper.xml文件
<resultMap id="BaseResultMap" type="com.aim.graduation.dao.entity.TeacherInfo"> <id column="tnum" jdbcType="INTEGER" property="tnum" /> <result column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="VARCHAR" property="sex" /> <result column="birth" jdbcType="DATE" property="birth" /> <result column="tel" jdbcType="VARCHAR" property="tel" /> <result column="grade" jdbcType="VARCHAR" property="grade" /> <result column="school" jdbcType="VARCHAR" property="school" /> <result column="college" jdbcType="VARCHAR" property="college" /> <result column="office" jdbcType="VARCHAR" property="office" /> <result column="profess" jdbcType="VARCHAR" property="profess" /> <result column="state" jdbcType="VARCHAR" property="state" /> <!--<result column="basic_wage" jdbcType="REAL" property="basicWage" />--> <result column="createtime" jdbcType="TIMESTAMP" property="createtime" /> <result column="changetime" jdbcType="TIMESTAMP" property="changetime" /> <!--assocication可以指定联合的JavaBean对象 基本信息表 property="role"指定哪个属性是联合的对象 javaType:指定这个属性对象的类型 --> <collection property="leaveTeacher" ofType="com.aim.graduation.dao.entity.LeaveTeacher"> <id column="leave_id" jdbcType="INTEGER" property="leaveId" /> <result column="tnum" jdbcType="INTEGER" property="tnum" /> <!--<result column="teacher_name" jdbcType="VARCHAR" property="teacherName" />--> <result column="start_time" jdbcType="DATE" property="startTime" /> <result column="work_day" jdbcType="FLOAT" property="workDay" /> <result column="sick_relax" jdbcType="FLOAT" property="sickRelax" /> <result column="thing_relax" jdbcType="FLOAT" property="thingRelax" /> <result column="approve_person" jdbcType="VARCHAR" property="approvePerson" /> <result column="year_month" jdbcType="VARCHAR" property="yearMonth" /> <result column="full_attendance" jdbcType="FLOAT" property="fullAttendance" /> <association property="teacherSalary" javaType="com.aim.graduation.dao.entity.TeacherSalary"> <id column="sal_teacher_id" jdbcType="INTEGER" property="salTeacherId" /> <result column="basic_wage" jdbcType="REAL" property="basicWage" /> <result column="traffic_wage" jdbcType="REAL" property="trafficWage" /> <result column="full_reward" jdbcType="REAL" property="fullReward" /> <result column="secure_reduce" jdbcType="REAL" property="secureReduce" /> <result column="tax_reduce" jdbcType="REAL" property="taxReduce" /> </association> </collection> </resultMap><association>通常用来映射一对一的关系
<collection >通常用来映射一对多的关系
三、sql语句
我写的很简单,能查出来就行
<!--三表联查--> <select id="selectInfoLeaveSalary" resultMap="BaseResultMap"> SELECT * FROM teacher_info, `leave`, teacher_salary WHERE teacher_info.tnum = `leave`.tnum AND teacher_salary.leave_teacher_id = `leave`.leave_id </select>
我写的很简单,若有什么需要改进的地方希望大家多多指教!