例如这样的场景:学生和班级是多对一的关系,我们在查询学生(Student)的时候,(t_student表有一个clazz_id会对应到t_clazz表的ID),希望自动带出这个学生所属的班级(Clazz)
多方(Student)的Mapper.xml:
注意这里使用了association来表明Student下面的有对应一的属性:clazz(这个学生所属班级)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.StudentMapper">
<resultMap id="BaseResultMap" type="com.test.Student">
<!--@mbg.generated-->
<!--@Table t_lab-->
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/>
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<association property="clazz" javaType="com.test.Clazz">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="name" jdbcType="VARCHAR" property="name" />
</association>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_date, update_date, `name`
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.StudentMapper">
<resultMap id="BaseResultMap" type="com.test.Student">
<!--@mbg.generated-->
<!--@Table t_lab-->
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/>
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<association property="clazz" javaType="com.test.Clazz">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="name" jdbcType="VARCHAR" property="name" />
</association>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_date, update_date, `name`
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.mapper.StudentMapper"> <resultMap id="BaseResultMap" type="com.test.Student"> <!--@mbg.generated--> <!--@Table t_lab--> <id column="id" jdbcType="INTEGER" property="id"/> <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> <result column="name" jdbcType="VARCHAR" property="name"/> <association property="clazz" javaType="com.test.Clazz"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> <result column="name" jdbcType="VARCHAR" property="name" /> </association> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, create_date, update_date, `name` </sql> </mapper>
一方(Clazz)的mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.ClazzMapper">
<resultMap id="BaseResultMap" type="com.test.entity.Clazz">
<!--@mbg.generated-->
<!--@Table t_department-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_date, update_date, `name`
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.ClazzMapper">
<resultMap id="BaseResultMap" type="com.test.entity.Clazz">
<!--@mbg.generated-->
<!--@Table t_department-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_date, update_date, `name`
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.mapper.ClazzMapper"> <resultMap id="BaseResultMap" type="com.test.entity.Clazz"> <!--@mbg.generated--> <!--@Table t_department--> <id column="id" jdbcType="INTEGER" property="id" /> <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> <result column="name" jdbcType="VARCHAR" property="name" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, create_date, update_date, `name` </sql> </mapper>
来看下实体类 Student.java,里面有一个clazz属性
@TableName(value = "t_student", resultMap = "BaseResultMap")
public class Lab implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "create_date")
private Date createDate;
@TableField(value = "update_date")
private Date updateDate;
@TableField(value = "`name`")
private String name; // 学生姓名
private Clazz clazz; // 学生所属班级
}
@TableName(value = "t_student", resultMap = "BaseResultMap")
public class Lab implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "create_date")
private Date createDate;
@TableField(value = "update_date")
private Date updateDate;
@TableField(value = "`name`")
private String name; // 学生姓名
private Clazz clazz; // 学生所属班级
}
@TableName(value = "t_student", resultMap = "BaseResultMap") public class Lab implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField(value = "create_date") private Date createDate; @TableField(value = "update_date") private Date updateDate; @TableField(value = "`name`") private String name; // 学生姓名 private Clazz clazz; // 学生所属班级 }
Clazz.java 就比较简单,常规属性
@TableName(value = "t_clazz", resultMap = "BaseResultMap")
public class Lab implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "create_date")
private Date createDate;
@TableField(value = "update_date")
private Date updateDate;
@TableField(value = "`name`")
private String name; // 班级名称
}
@TableName(value = "t_clazz", resultMap = "BaseResultMap")
public class Lab implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "create_date")
private Date createDate;
@TableField(value = "update_date")
private Date updateDate;
@TableField(value = "`name`")
private String name; // 班级名称
}
@TableName(value = "t_clazz", resultMap = "BaseResultMap") public class Lab implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField(value = "create_date") private Date createDate; @TableField(value = "update_date") private Date updateDate; @TableField(value = "`name`") private String name; // 班级名称 }
在接下来的关于Student查询中,MyBatisPlus会自动做连表查询,把clazz带入进去:
LambdaQueryWrapper<Student> labLambdaQueryWrapper = new LambdaQueryWrapper<>();
List<Student> students = studentMapper.selectList(labLambdaQueryWrapper);
students.forEach(student -> student.getClazz()); // 查询student下的clazz已经自动有值了
Student student1 = studentMapper.selectById(1);// 根据ID查student
student1.getClazz(); // 也是自动赋值了
LambdaQueryWrapper<Student> labLambdaQueryWrapper = new LambdaQueryWrapper<>();
List<Student> students = studentMapper.selectList(labLambdaQueryWrapper);
students.forEach(student -> student.getClazz()); // 查询student下的clazz已经自动有值了
Student student1 = studentMapper.selectById(1);// 根据ID查student
student1.getClazz(); // 也是自动赋值了
LambdaQueryWrapper<Student> labLambdaQueryWrapper = new LambdaQueryWrapper<>(); List<Student> students = studentMapper.selectList(labLambdaQueryWrapper); students.forEach(student -> student.getClazz()); // 查询student下的clazz已经自动有值了 Student student1 = studentMapper.selectById(1);// 根据ID查student student1.getClazz(); // 也是自动赋值了
文章评论