MyBatis使用注解查询主要有两种方式:
一、查询两遍,再进行关联整合,不使用联表查询语句。
1、Mapper文件:
1 @Select("SELECT stu.id, stu.stu_key, stu.stu_no, stu.stu_name, stu.tel, stu.email_add, stu.birthdate, stu.gender, stu.school_id, stu.college_id, stu.major_id, stu.class_id, stu.description, stu.remark, stu.create_date, stu.update_date FROM stu_info stu WHERE stu.stu_key = #{stuKey}") 2 @Results({ 3 4 @Result( 5 //重要:column:关联的外键 property:实体类属性,不是字段,StuInfo里面的 6 column = "school_id",property = "schoolInfo", 7 one = @One(select = "com.ahu.mapper.StuInfoMapper.getSchoolInfo") 8 ) 9 }) 10 StuInfo showCompInfoByStuKey(String stuKey); 11 12 @Select("SELECT school_info.id, school_info.school_id, school_info.school_name, school_info.create_time, school_info.update_time, school_info.remark FROM school_info WHERE school_info.school_id= #{school_info.school_id}") 13 SchoolInfo getSchoolInfo();
2、StuInfo实体类
1 @Data 2 public class StuInfo implements Serializable { 3 4 //@TableId(type = IdType.AUTO) //主键自增 数据库中需要设置主键自增 5 private Integer id; 6 //stuKey作为主键使用,不进行更新操作,所以使用该策略 7 @TableField(updateStrategy = FieldStrategy.NEVER) 8 private String stuKey; 9 private String stuNo; 10 private String stuName; 11 private String password; 12 private String tel; 13 private String emailAdd; 14 /** 15 * @Description: 注解@JsonFormat主要是后台到前台的时间格式的转换 16 * 注解@DataFormAT主要是前后到后台的时间格式的转换 17 */ 18 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") 19 @DateTimeFormat(pattern = "yyyy-MM-dd") 20 private Date birthdate; 21 private String gender; 22 private String schoolId; 23 private String collegeId; 24 private String majorId; 25 private String classId; 26 private String description; 27 private String remark; 28 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 29 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 30 private Date createDate; 31 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 32 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 33 private Date updateDate; 34 35 //数据库中不存在该字段,使用@TableField注解处理,联表查询使用 36 @TableField(exist = false) 37 private ClassInfo classInfo; 38 @TableField(exist = false) 39 private CollegeInfo collegeInfo; 40 @TableField(exist = false) 41 private MajorInfo majorInfo; 42 @TableField(exist = false) 43 private SchoolInfo schoolInfo; 44 }
二、查询一遍,使用联表查询语句。
1 @Select("SELECT stu.id, stu.stu_key, stu.stu_no, stu.stu_name, stu.tel, stu.email_add, stu.birthdate, stu.gender, stu.school_id, sch.school_name, stu.college_id, col.college_name, stu.major_id, maj.major_name, stu.class_id, cla.class_name, stu.description, stu.remark, stu.create_date, stu.update_date FROM stu_info stu LEFT JOIN school_info sch ON stu.school_id = sch.school_id LEFT JOIN college_info col ON stu.college_id = col.college_id LEFT JOIN major_info maj ON stu.major_id = maj.major_id LEFT JOIN class_info cla ON stu.class_id = cla.class_id WHERE stu.stu_key = #{stuKey}") 2 @Results({ 3 //@Result(column="school_id",property="schoolId"), 4 @Result( 5 //重要:column:关联的外键 property:实体类属性,不是字段,StuInfo stuInfo里面的 6 column = "school_id",property = "schoolInfo.schoolId"), 7 @Result( 8 //主表也要做映射,不然为空null 9 column = "school_id",property = "schoolId"), 10 @Result(column = "school_name",property = "schoolInfo.schoolName"), 11 @Result(column = "college_id",property = "collegeInfo.collegeId"), 12 @Result(column = "college_id",property = "collegeId"), 13 @Result(column = "college_name",property = "collegeInfo.collegeName"), 14 @Result(column = "major_id",property = "majorInfo.majorId"), 15 @Result(column = "major_id",property = "majorId"), 16 @Result(column = "major_name",property = "majorInfo.majorName"), 17 @Result(column = "class_id",property = "classInfo.classId"), 18 @Result(column = "class_id",property = "classId"), 19 @Result(column = "class_name",property = "classInfo.className"), 20 }) 21 StuInfo showCompInfoByStuKey(String stuKey);
参考:
1、https://blog.csdn.net/qq_36228916/article/details/93881786