[基于项目中的分页查询基本常用情况都是最低2个表关联查询,所以建议MP增加分页方法的join查询,我已经进行了扩展,现提供下扩展思路供参考
1,实体类中添加@TableAlias自定义注解用于获取别名
2,QueryWrapper 中添加protected List
/ * 连接查询对象 */ public class JoinBean implements Serializable { / * 连接表 / private String joinTableName; / * 连接类型(默认左连接) / private SqlBuilder.Join joinType = SqlBuilder.Join.LEFT; / * 连接表字段 */ private String joinField; / * 主表连接字段 / private String mainField; / * 左表连接别名 / private String joinAlias; /* * 主表连接别名 / private String mainAlias;
public JoinBean(Class mainCls, Class joinCls) {
TableName joinTable = AnnotationUtils.getAnnotation(joinCls, TableName.class);
TableAlias mainTableAlias = AnnotationUtils.getAnnotation(mainCls, TableAlias.class);
TableAlias joinTableAlias = AnnotationUtils.getAnnotation(joinCls, TableAlias.class);
this.mainAlias = mainTableAlias.value();
this.joinTableName = joinTable.value();
this.joinAlias = joinTableAlias.value();
this.joinField = ReflectionUtils.getTableField(joinCls);
this.mainField = ReflectionUtils.getTableField(mainCls);
this.joinType = SqlBuilder.Join.LEFT;
}
public JoinBean(Class mainCls, Class joinCls, String joinField) {
TableName joinTable = AnnotationUtils.getAnnotation(joinCls, TableName.class);
TableAlias mainTableAlias = AnnotationUtils.getAnnotation(mainCls, TableAlias.class);
TableAlias joinTableAlias = AnnotationUtils.getAnnotation(joinCls, TableAlias.class);
this.mainAlias = mainTableAlias.value();
this.joinTableName = joinTable.value();
this.joinAlias = joinTableAlias.value();
this.joinField = joinField;
this.mainField = ReflectionUtils.getTableField(mainCls);
}
public JoinBean(Class mainCls, Class joinCls, String joinAlias, String joinField) {
TableName joinTable = AnnotationUtils.getAnnotation(joinCls, TableName.class);
TableAlias mainTableAlias = AnnotationUtils.getAnnotation(mainCls, TableAlias.class);
this.mainAlias = mainTableAlias.value();
this.joinTableName = joinTable.value();
this.joinAlias = joinAlias;
this.joinField = joinField;
this.mainField = ReflectionUtils.getTableField(mainCls);
}
public String getJoinTableName() {
return joinTableName;
}
public JoinBean setJoinTableName(String joinTableName) {
this.joinTableName = joinTableName;
return this;
}
public SqlBuilder.Join getJoinType() {
return joinType;
}
public JoinBean setJoinType(SqlBuilder.Join joinType) {
this.joinType = joinType;
return this;
}
public String getJoinField() {
return joinField;
}
public JoinBean setJoinField(String joinField) {
this.joinField = joinField;
return this;
}
public String getMainField() {
return mainField;
}
public JoinBean setMainField(String mainField) {
this.mainField = mainField;
return this;
}
public String getJoinAlias() {
return joinAlias;
}
public JoinBean setJoinAlias(String joinAlias) {
this.joinAlias = joinAlias;
return this;
}
public String getMainAlias() {
return mainAlias;
}
public JoinBean setMainAlias(String mainAlias) {
this.mainAlias = mainAlias;
return this;
}
public JoinBean right() {
this.joinType = SqlBuilder.Join.RIGHT;
return this;
}
public JoinBean inner() {
this.joinType = SqlBuilder.Join.INNER;
return this;
}
public JoinBean full() {
this.joinType = SqlBuilder.Join.FULL;
return this;
}
}
4, QueryWrapper 添加createJoin方法]
/**
* 创建连接查询
*
* @param joinCls 要连接查询的表对象
*/
public JoinBean createJoin(Class joinCls) {
ApiAssert.isNotEmpty("请调用CriteriaQuery(PageListModel pageListModel, Class cls)方法", cls);
JoinBean joinBean = new JoinBean(cls, joinCls);
this.joinSqList.add(joinBean);
return joinBean;
}
/**
* 创建连接查询
*
* @param joinCls 要连接查询的表对象
* @param joinField 设置连接字段
*/
public JoinBean createJoin(Class joinCls, String joinField) {
ApiAssert.isNotEmpty("请调用CriteriaQuery(PageListModel pageListModel, Class cls)方法", cls);
JoinBean joinBean = new JoinBean(cls, joinCls, joinField);
this.joinSqList.add(joinBean);
return joinBean;
}
/**
* 创建连接查询
*
* @param joinCls 要连接查询的表对象
* @param joinAlias 重新链接表别名
* @param joinField 设置连接字段
*/
public JoinBean createJoin(Class joinCls, String joinAlias, String joinField) {
ApiAssert.isNotEmpty("请调用CriteriaQuery(PageListModel pageListModel, Class cls)方法", cls);
JoinBean joinBean = new JoinBean(cls, joinCls, joinAlias, joinField);
this.joinSqList.add(joinBean);
return joinBean;
}
4 使用方法,CriteriaQuery是我的自定义对象继承了QueryWrapper
CriteriaQuery
Comment From: miemieYaho
mp永远不支持join,只推荐xml
Comment From: remember-5
@miemieYaho 为什么呢?
Comment From: qmdx
@miemieYaho 为什么呢?
继续支持下去就是 hibernate 用 mp 还有什么意义?
Comment From: yifanyou
mybatis 的 example 支持join