-
项目背景
使用MyBatis-Plus生成模板,进行表关联查询。
-
使用表
文章表+作者表 文章表中有一个author_id 连接 作者表中的id
文章表
作者表
-
实体类
想要使用表关联查询,需要在文章类中添加一个作者对象,两个实体类如下
//文章实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("article")
public class Article extends Model<Article> {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String content;
@TableField(exist = false) //重点:Mybatis-plus中默认操作忽略该字段
private Author author;
@Override
protected Serializable pkVal() {
return this.id;
}
}
//作者实体类
//文章实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("author")
public class Article extends Model<Author> {
private static final long serialVersionUID = 1L;
private String id;
private String name;
@Override
protected Serializable pkVal() {
return this.id;
}
}
重点:Mybatis-plus在使用表关联查询的时候,如果使用了mybatis-plus封装的方法,在实体类中,必须将连接的对象添加注释
@TableField(exist = false)
即该条属性是数据库表中不存在的,但是又是需要使用的属性
若不添加,则使用封装的方法时会报错,找不到该列
-
mapper内语句
//resultMapper
<!-- 通用查询映射结果 -->
<resultMap id="rm" type="com.baizhi.entity.Article">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="author_id" property="authorId" />
<result column="content" property="content" />
<association property="author" javaType="Author">
<id property="id" column="gid"/>
<result column="name" property="name"/>
</association>
</resultMap>
//sql语句
<select id="query" resultMap="rm">
select a.id,a.name,a.author_id,a.content,g.id gid,g.name from article a left join author g on a.author_id = g.id
</select>