mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
简化代码
This commit is contained in:
parent
2ee265c213
commit
ac635a91db
@ -21,8 +21,9 @@ import java.lang.annotation.Target;
|
||||
* 支持Ognl语法字段说明<br/>
|
||||
* Ognl上下文
|
||||
* <ul>
|
||||
* <li>classInfo {@link com.github.yulichang.apt.OgnlRoot.ClassInfo}</li>
|
||||
* <li>stringHelper {@link com.github.yulichang.apt.OgnlRoot.StringHelper}</li>
|
||||
* <li>className 类名</li>
|
||||
* <li>classPackage 包名</li>
|
||||
* <li>util 工具类 stringHelper {@link com.github.yulichang.apt.OgnlRoot.StringHelper}</li>
|
||||
* </ul>
|
||||
* 指定开头 Ognl# 这不是ognl语法,这是MPJ规定的 用于区分 ognl还是String.format
|
||||
* <p>
|
||||
@ -55,7 +56,7 @@ public @interface Table {
|
||||
* <p>
|
||||
* 支持Ognl 默认使用String.format()
|
||||
*/
|
||||
String packageName() default "%s.apt";
|
||||
String classPackage() default "%s.apt";
|
||||
|
||||
/**
|
||||
* 是否在Tables中生成对应的类字段
|
||||
@ -67,13 +68,13 @@ public @interface Table {
|
||||
* <p>
|
||||
* 支持Ognl 默认使用String.format()
|
||||
*/
|
||||
String tablesPackageName() default "%s.tables";
|
||||
String tablesClassPackage() default "%s.tables";
|
||||
|
||||
/**
|
||||
* Tables中的字段名 默认大写的类名
|
||||
* <p>
|
||||
* 支持Ognl 默认使用String.format()
|
||||
*/
|
||||
String tablesName() default "%S";
|
||||
String tablesClassName() default "%S";
|
||||
|
||||
}
|
@ -1,20 +1,31 @@
|
||||
package com.github.yulichang.apt;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
/**
|
||||
* @author yulichang
|
||||
* @since 1.5.0
|
||||
*/
|
||||
@Getter
|
||||
public class Column implements Serializable {
|
||||
|
||||
private BaseColumn<?> root;
|
||||
private final BaseColumn<?> root;
|
||||
|
||||
private Class<?> clazz;
|
||||
private final String property;
|
||||
|
||||
private String property;
|
||||
|
||||
private Supplier<String> alias;
|
||||
public Column(BaseColumn<?> root, String property) {
|
||||
this.root = root;
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
public Class<?> getClazz() {
|
||||
return root.getColumnClass();
|
||||
}
|
||||
|
||||
public Supplier<String> getAlias() {
|
||||
return root::getAlias;
|
||||
}
|
||||
}
|
@ -13,31 +13,15 @@ import java.util.Objects;
|
||||
@Getter
|
||||
public class OgnlRoot {
|
||||
|
||||
private final ClassInfo classInfo;
|
||||
private final String className;
|
||||
|
||||
private final StringHelper stringHelper;
|
||||
private final String classPackage;
|
||||
|
||||
public OgnlRoot(String className, String packageName) {
|
||||
this.classInfo = new ClassInfo(className, packageName);
|
||||
this.stringHelper = new StringHelper();
|
||||
}
|
||||
private final StringHelper util = new StringHelper();
|
||||
|
||||
@Getter
|
||||
public static class ClassInfo {
|
||||
/**
|
||||
* 类名
|
||||
*/
|
||||
public final String className;
|
||||
/**
|
||||
* 包名
|
||||
*/
|
||||
public final String packageName;
|
||||
|
||||
|
||||
public ClassInfo(String className, String packageName) {
|
||||
public OgnlRoot(String className, String classPackage) {
|
||||
this.className = className;
|
||||
this.packageName = packageName;
|
||||
}
|
||||
this.classPackage = classPackage;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
@ -29,6 +29,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.github.yulichang.test.join.entity.tables.Tables.*;
|
||||
|
||||
/**
|
||||
* 连表测试类
|
||||
* <p>
|
||||
@ -64,7 +66,7 @@ class AptWrapperTest {
|
||||
void testSelectSort() {
|
||||
ThreadLocalUtils.set("SELECT t.id, t.user_id, t.tenant_id FROM user_tenant t WHERE t.tenant_id = 1");
|
||||
|
||||
UserTenantDOCol ut = new UserTenantDOCol();
|
||||
UserTenantDOCol ut = USERTENANTDO;
|
||||
|
||||
AptQueryWrapper<UserTenantDO> lambda = JoinWrappers.apt(ut)
|
||||
.selectAsClass(ut, UserTenantDTO.class);
|
||||
@ -81,7 +83,7 @@ class AptWrapperTest {
|
||||
|
||||
@Test
|
||||
void testSimple() {
|
||||
UserTenantDOCol ut = new UserTenantDOCol();
|
||||
UserTenantDOCol ut = USERTENANTDO;
|
||||
AptQueryWrapper<UserTenantDO> lambda = JoinWrappers.apt(ut);
|
||||
lambda.selectAs(ut.idea, UserTenantDO::getIdea);
|
||||
List<UserTenantDO> list = userTenantMapper.selectList(lambda);
|
||||
@ -124,9 +126,9 @@ class AptWrapperTest {
|
||||
" AND (t.id <= ?)\n" +
|
||||
"ORDER BY t.id DESC");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
AddressDOCol addr = new AddressDOCol();
|
||||
AreaDOCol ar = new AreaDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
AddressDOCol addr = ADDRESSDO;
|
||||
AreaDOCol ar = AREADO;
|
||||
|
||||
AptQueryWrapper<UserDO> wrapper = new AptQueryWrapper<>(u)
|
||||
.selectAll()
|
||||
@ -170,9 +172,9 @@ class AptWrapperTest {
|
||||
" AND (t.id <= ?)\n" +
|
||||
"ORDER BY t.id DESC");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
AddressDOCol addr = new AddressDOCol();
|
||||
AreaDOCol ar = new AreaDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
AddressDOCol addr = ADDRESSDO;
|
||||
AreaDOCol ar = AREADO;
|
||||
|
||||
AptQueryWrapper<UserDO> wrapper = new AptQueryWrapper<>(u)
|
||||
.selectAll()
|
||||
@ -222,9 +224,9 @@ class AptWrapperTest {
|
||||
" AND t2.del = false\n" +
|
||||
"ORDER BY t.id DESC");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
AddressDOCol addr = new AddressDOCol();
|
||||
AreaDOCol ar = new AreaDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
AddressDOCol addr = ADDRESSDO;
|
||||
AreaDOCol ar = AREADO;
|
||||
|
||||
AptQueryWrapper<UserDO> wrapper = new AptQueryWrapper<>(u)
|
||||
.selectAll()
|
||||
@ -252,9 +254,9 @@ class AptWrapperTest {
|
||||
" AND t1.del = false\n" +
|
||||
" AND t2.del = false");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
AddressDOCol addr = new AddressDOCol();
|
||||
AreaDOCol ar = new AreaDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
AddressDOCol addr = ADDRESSDO;
|
||||
AreaDOCol ar = AREADO;
|
||||
|
||||
//基本数据类型 和 String
|
||||
AptQueryWrapper<UserDO> wrapper = new AptQueryWrapper<>(u)
|
||||
@ -306,9 +308,9 @@ class AptWrapperTest {
|
||||
" AND (t.id <= ?)\n" +
|
||||
"ORDER BY t.id ASC, t.`name` ASC");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
AddressDOCol addr = new AddressDOCol();
|
||||
AreaDOCol ar = new AreaDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
AddressDOCol addr = ADDRESSDO;
|
||||
AreaDOCol ar = AREADO;
|
||||
|
||||
UserDO userDO = new UserDO();
|
||||
userDO.setId(1);
|
||||
@ -438,7 +440,7 @@ class AptWrapperTest {
|
||||
"WHERE t.del = false\n" +
|
||||
" AND (t.id > ?)");
|
||||
|
||||
UserDOCol u = new UserDOCol();
|
||||
UserDOCol u = USERDO;
|
||||
UserDOCol ua = new UserDOCol();
|
||||
|
||||
//自连接
|
||||
|
@ -115,7 +115,7 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
tableInfo.setFields(fieldInfos);
|
||||
|
||||
StringBuilderHelper content = new StringBuilderHelper()
|
||||
.addPackage(tableInfo.getTagPackage())
|
||||
.addPackage(tableInfo.getTagClassPackage())
|
||||
.newLine()
|
||||
.addImport(BaseColumn.class.getName())
|
||||
.addImport(Column.class.getName())
|
||||
@ -124,12 +124,12 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
.addClass(tableInfo.getClassComment(), tableInfo.getTagClassName(),
|
||||
BaseColumn.class.getSimpleName() + "<" + tableInfo.getSimpleClassName() + ">",
|
||||
c -> c
|
||||
.addDefaultField(tableInfo.getSimpleClassName())
|
||||
.addDefaultField()
|
||||
.addConstructor(tableInfo)
|
||||
.addFields(tableInfo)
|
||||
.addMethod(tableInfo)
|
||||
);
|
||||
writerFile(tableInfo.getTagPackage() + "." + tableInfo.getTagClassName(), content.getContent());
|
||||
writerFile(tableInfo.getTagClassPackage() + "." + tableInfo.getTagClassName(), content.getContent());
|
||||
return tableInfo;
|
||||
}
|
||||
|
||||
@ -142,7 +142,7 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
content.addPackage(tagPackage);
|
||||
content.newLine();
|
||||
// import
|
||||
tableInfos.forEach(tableInfo -> content.addImport(tableInfo.getTagPackage() + "." + tableInfo.getTagClassName()));
|
||||
tableInfos.forEach(tableInfo -> content.addImport(tableInfo.getTagClassPackage() + "." + tableInfo.getTagClassName()));
|
||||
content.newLine();
|
||||
// class
|
||||
String tables = "Tables";
|
||||
@ -220,8 +220,8 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
public StringBuilderHelper addFields(TableInfo tableInfo) {
|
||||
tableInfo.getFields().forEach(fieldInfo -> {
|
||||
addComment("\t", fieldInfo.getComment());
|
||||
sb.append(String.format("\tpublic final Column %s = new Column(this, %s.class, \"%s\", () -> this._alias_q2Gv$);\n",
|
||||
fieldInfo.getProperty(), tableInfo.getSimpleClassName(), fieldInfo.getProperty()));
|
||||
sb.append(String.format("\tpublic final Column %s = new Column(this, \"%s\");\n",
|
||||
fieldInfo.getProperty(), fieldInfo.getProperty()));
|
||||
newLine();
|
||||
});
|
||||
return this;
|
||||
@ -239,9 +239,7 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
return this;
|
||||
}
|
||||
|
||||
public StringBuilderHelper addDefaultField(String simpleClassName) {
|
||||
newLine();
|
||||
sb.append("\tprivate static final Class<").append(simpleClassName).append("> _class_e76G$ = ").append(simpleClassName).append(".class;\n");
|
||||
public StringBuilderHelper addDefaultField() {
|
||||
newLine();
|
||||
sb.append("\tprivate String _alias_q2Gv$;\n");
|
||||
newLine();
|
||||
@ -251,7 +249,7 @@ public class EntityProcessor extends AbstractProcessor {
|
||||
public StringBuilderHelper addMethod(TableInfo tableInfo) {
|
||||
sb.append("\t@Override\n" +
|
||||
"\tpublic Class<").append(tableInfo.getSimpleClassName()).append("> getColumnClass() {\n")
|
||||
.append("\t\treturn this._class_e76G$;\n")
|
||||
.append("\t\treturn ").append(tableInfo.getSimpleClassName()).append(".class;\n")
|
||||
.append("\t}\n");
|
||||
newLine();
|
||||
sb.append("\t@Override\n" +
|
||||
|
@ -18,19 +18,19 @@ import java.util.function.Function;
|
||||
public class Conf {
|
||||
|
||||
private String className = "%sCol";
|
||||
private String packageName = "%s.apt";
|
||||
private String classPackage = "%s.apt";
|
||||
private boolean genTables = true;
|
||||
private String tablasPackageName = "%s.tables";
|
||||
private String tablesName = "%S";
|
||||
private String tablasClassPackage = "%s.tables";
|
||||
private String tablesClassName = "%S";
|
||||
|
||||
private boolean initFlag = false;
|
||||
|
||||
private Conf(Conf conf) {
|
||||
this.className = conf.className;
|
||||
this.packageName = conf.packageName;
|
||||
this.classPackage = conf.classPackage;
|
||||
this.genTables = conf.genTables;
|
||||
this.tablasPackageName = conf.tablasPackageName;
|
||||
this.tablesName = conf.tablesName;
|
||||
this.tablasClassPackage = conf.tablasClassPackage;
|
||||
this.tablesClassName = conf.tablesClassName;
|
||||
this.initFlag = conf.initFlag;
|
||||
}
|
||||
|
||||
@ -69,10 +69,10 @@ public class Conf {
|
||||
Properties properties = new Properties();
|
||||
properties.load(Files.newInputStream(confFile.toPath()));
|
||||
this.className = properties.getOrDefault("className", this.className).toString();
|
||||
this.packageName = properties.getOrDefault("packageName", this.packageName).toString();
|
||||
this.classPackage = properties.getOrDefault("classPackage", this.classPackage).toString();
|
||||
this.genTables = Boolean.parseBoolean(properties.getOrDefault("genTables", Boolean.toString(this.genTables)).toString());
|
||||
this.tablasPackageName = properties.getOrDefault("tablasPackageName", this.tablasPackageName).toString();
|
||||
this.tablesName = properties.getOrDefault("tablesName", this.tablesName).toString();
|
||||
this.tablasClassPackage = properties.getOrDefault("tablasClassPackage", this.tablasClassPackage).toString();
|
||||
this.tablesClassName = properties.getOrDefault("tablesClassName", this.tablesClassName).toString();
|
||||
}
|
||||
|
||||
public static Conf getConf(Conf globalConf, Table table, Collection<String> keys) {
|
||||
@ -92,12 +92,12 @@ public class Conf {
|
||||
this.className = className;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
public String getClassPackage() {
|
||||
return classPackage;
|
||||
}
|
||||
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
public void setClassPackage(String classPackage) {
|
||||
this.classPackage = classPackage;
|
||||
}
|
||||
|
||||
public boolean isGenTables() {
|
||||
@ -108,28 +108,28 @@ public class Conf {
|
||||
this.genTables = genTables;
|
||||
}
|
||||
|
||||
public String getTablasPackageName() {
|
||||
return tablasPackageName;
|
||||
public String getTablasClassPackage() {
|
||||
return tablasClassPackage;
|
||||
}
|
||||
|
||||
public void setTablasPackageName(String tablasPackageName) {
|
||||
this.tablasPackageName = tablasPackageName;
|
||||
public void setTablasClassPackage(String tablasClassPackage) {
|
||||
this.tablasClassPackage = tablasClassPackage;
|
||||
}
|
||||
|
||||
public String getTablesName() {
|
||||
return tablesName;
|
||||
public String getTablesClassName() {
|
||||
return tablesClassName;
|
||||
}
|
||||
|
||||
public void setTablesName(String tablesName) {
|
||||
this.tablesName = tablesName;
|
||||
public void setTablesClassName(String tablesClassName) {
|
||||
this.tablesClassName = tablesClassName;
|
||||
}
|
||||
|
||||
public enum ConfItem {
|
||||
className("value", Table::value, (c, v) -> c.setClassName(v.toString())),
|
||||
packageName("packageName", Table::packageName, (c, v) -> c.setPackageName(v.toString())),
|
||||
packageName("classPackage", Table::classPackage, (c, v) -> c.setClassPackage(v.toString())),
|
||||
genTables("genTables", Table::genTables, (c, v) -> c.setGenTables((boolean) v)),
|
||||
tablasPackageName("tablasPackageName", Table::tablesPackageName, (c, v) -> c.setTablasPackageName(v.toString())),
|
||||
tablesName("tablesName", Table::tablesName, (c, v) -> c.setTablesName(v.toString()));
|
||||
tablasPackageName("tablesClassPackage", Table::tablesClassPackage, (c, v) -> c.setTablasClassPackage(v.toString())),
|
||||
tablesName("tablesClassName", Table::tablesClassName, (c, v) -> c.setTablesClassName(v.toString()));
|
||||
|
||||
private final String action;
|
||||
|
||||
@ -153,10 +153,11 @@ public class Conf {
|
||||
public String toString() {
|
||||
return "Conf{" +
|
||||
"className='" + className + '\'' +
|
||||
", packageName='" + packageName + '\'' +
|
||||
", classPackage='" + classPackage + '\'' +
|
||||
", genTables=" + genTables +
|
||||
", tablasPackageName='" + tablasPackageName + '\'' +
|
||||
", tablesName='" + tablesName + '\'' +
|
||||
", tablasClassPackage='" + tablasClassPackage + '\'' +
|
||||
", tablesClassName='" + tablesClassName + '\'' +
|
||||
", initFlag=" + initFlag +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -54,9 +54,9 @@ public class TableInfo {
|
||||
/**
|
||||
* 生成类的路径
|
||||
*/
|
||||
public String getTagPackage() {
|
||||
public String getTagClassPackage() {
|
||||
if (tagPackageName == null) {
|
||||
tagPackageName = parse(conf.getPackageName(), this.classPackage);
|
||||
tagPackageName = parse(conf.getClassPackage(), this.classPackage);
|
||||
}
|
||||
return tagPackageName;
|
||||
}
|
||||
@ -66,7 +66,7 @@ public class TableInfo {
|
||||
*/
|
||||
public String getTagTablesName() {
|
||||
if (tagTablesName == null) {
|
||||
tagTablesName = parse(conf.getTablesName(), this.simpleClassName);
|
||||
tagTablesName = parse(conf.getTablesClassName(), this.simpleClassName);
|
||||
}
|
||||
return tagTablesName;
|
||||
}
|
||||
@ -76,7 +76,7 @@ public class TableInfo {
|
||||
*/
|
||||
public String getTagTablesPackageName() {
|
||||
if (tagTablesPackageName == null) {
|
||||
tagTablesPackageName = parse(conf.getTablasPackageName(), this.classPackage);
|
||||
tagTablesPackageName = parse(conf.getTablasClassPackage(), this.classPackage);
|
||||
}
|
||||
return tagTablesPackageName;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user