Compare commits
3 Commits
d3aded669b
...
5fe610120b
| Author | SHA1 | Date | |
|---|---|---|---|
| 5fe610120b | |||
| 4f0d2a380b | |||
| c463ac5443 |
@ -356,7 +356,10 @@ public class TimiSpring {
|
|||||||
public static Language.Enum getLanguage() {
|
public static Language.Enum getLanguage() {
|
||||||
String name = getRequestArg("lang");
|
String name = getRequestArg("lang");
|
||||||
if (TimiJava.isEmpty(name)) {
|
if (TimiJava.isEmpty(name)) {
|
||||||
List<Locale.LanguageRange> rangeList = Locale.LanguageRange.parse(getLanguageRaw());
|
name = getLanguageRaw();
|
||||||
|
}
|
||||||
|
if (TimiJava.isNotEmpty(name)) {
|
||||||
|
List<Locale.LanguageRange> rangeList = Locale.LanguageRange.parse(name);
|
||||||
for (Locale.LanguageRange item : rangeList) {
|
for (Locale.LanguageRange item : rangeList) {
|
||||||
if (item.getRange().contains("-")) {
|
if (item.getRange().contains("-")) {
|
||||||
name = item.getRange();
|
name = item.getRange();
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
package com.imyeyu.spring.annotation.table;
|
||||||
|
|
||||||
|
import com.imyeyu.spring.bean.Page;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在 {@link com.imyeyu.spring.mapper.BaseMapper#page(Page)} 方法忽略查询该属性
|
||||||
|
* <br />
|
||||||
|
* {@link com.imyeyu.spring.service.AbstractEntityService#page(Page)} 同上
|
||||||
|
*
|
||||||
|
* @author 夜雨
|
||||||
|
* @since 2025-12-12 14:54
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
public @interface PageIgnore {
|
||||||
|
}
|
||||||
@ -1,29 +1,23 @@
|
|||||||
package com.imyeyu.spring.bean;
|
package com.imyeyu.spring.bean;
|
||||||
|
|
||||||
|
import com.imyeyu.java.bean.Language;
|
||||||
import com.imyeyu.java.ref.Ref;
|
import com.imyeyu.java.ref.Ref;
|
||||||
import com.imyeyu.spring.entity.UUIDEntity;
|
import com.imyeyu.spring.annotation.table.AutoUUID;
|
||||||
|
import com.imyeyu.spring.annotation.table.Id;
|
||||||
|
import com.imyeyu.spring.entity.Creatable;
|
||||||
|
import com.imyeyu.spring.entity.IDEntity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 夜雨
|
* @author 夜雨
|
||||||
* @since 2025-10-17 15:21
|
* @since 2025-10-17 15:21
|
||||||
*/
|
*/
|
||||||
public class Multilingual extends UUIDEntity {
|
public class Multilingual extends Language implements IDEntity<String>, Creatable {
|
||||||
|
|
||||||
protected String key;
|
@Id
|
||||||
|
@AutoUUID
|
||||||
|
protected String id;
|
||||||
|
|
||||||
protected String zhCN;
|
protected Long createdAt;
|
||||||
|
|
||||||
protected String zhTW;
|
|
||||||
|
|
||||||
protected String enUS;
|
|
||||||
|
|
||||||
protected String ruRU;
|
|
||||||
|
|
||||||
protected String koKR;
|
|
||||||
|
|
||||||
protected String jaJP;
|
|
||||||
|
|
||||||
protected String deDE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定语言值
|
* 获取指定语言值
|
||||||
@ -31,7 +25,7 @@ public class Multilingual extends UUIDEntity {
|
|||||||
* @param language 指定语言
|
* @param language 指定语言
|
||||||
* @return 值
|
* @return 值
|
||||||
*/
|
*/
|
||||||
public String getValue(com.imyeyu.java.bean.Language language) {
|
public String getValue(Language.Enum language) {
|
||||||
try {
|
try {
|
||||||
return Ref.getFieldValue(this, language.toString().replace("_", ""), String.class);
|
return Ref.getFieldValue(this, language.toString().replace("_", ""), String.class);
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
@ -39,67 +33,23 @@ public class Multilingual extends UUIDEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getKey() {
|
@Override
|
||||||
return key;
|
public String getId() {
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setKey(String key) {
|
@Override
|
||||||
this.key = key;
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getZhCN() {
|
@Override
|
||||||
return zhCN;
|
public Long getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setZhCN(String zhCN) {
|
@Override
|
||||||
this.zhCN = zhCN;
|
public void setCreatedAt(Long createdAt) {
|
||||||
}
|
this.createdAt = createdAt;
|
||||||
|
|
||||||
public String getZhTW() {
|
|
||||||
return zhTW;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setZhTW(String zhTW) {
|
|
||||||
this.zhTW = zhTW;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEnUS() {
|
|
||||||
return enUS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnUS(String enUS) {
|
|
||||||
this.enUS = enUS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRuRU() {
|
|
||||||
return ruRU;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRuRU(String ruRU) {
|
|
||||||
this.ruRU = ruRU;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getKoKR() {
|
|
||||||
return koKR;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setKoKR(String koKR) {
|
|
||||||
this.koKR = koKR;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getJaJP() {
|
|
||||||
return jaJP;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setJaJP(String jaJP) {
|
|
||||||
this.jaJP = jaJP;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDeDE() {
|
|
||||||
return deDE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeDE(String deDE) {
|
|
||||||
this.deDE = deDE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,7 +61,7 @@ public class Page<T> extends BasePage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addOrder(String field, BaseMapper.OrderType orderType) {
|
public void addOrder(String field, BaseMapper.OrderType orderType) {
|
||||||
orderMap = TimiJava.firstNotNull(orderMap, new LinkedHashMap<>());
|
orderMap = TimiJava.defaultIfNull(orderMap, new LinkedHashMap<>());
|
||||||
orderMap.put(Text.camelCase2underscore(field), orderType);
|
orderMap.put(Text.camelCase2underscore(field), orderType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package com.imyeyu.spring.util;
|
package com.imyeyu.spring.util;
|
||||||
|
|
||||||
import com.imyeyu.java.TimiJava;
|
import com.imyeyu.java.TimiJava;
|
||||||
|
import com.imyeyu.java.bean.CallbackArgReturn;
|
||||||
import com.imyeyu.java.bean.timi.TimiCode;
|
import com.imyeyu.java.bean.timi.TimiCode;
|
||||||
import com.imyeyu.java.bean.timi.TimiException;
|
import com.imyeyu.java.bean.timi.TimiException;
|
||||||
import com.imyeyu.java.ref.Ref;
|
import com.imyeyu.java.ref.Ref;
|
||||||
@ -8,6 +9,7 @@ import com.imyeyu.spring.annotation.table.AutoUUID;
|
|||||||
import com.imyeyu.spring.annotation.table.Column;
|
import com.imyeyu.spring.annotation.table.Column;
|
||||||
import com.imyeyu.spring.annotation.table.DeleteColumn;
|
import com.imyeyu.spring.annotation.table.DeleteColumn;
|
||||||
import com.imyeyu.spring.annotation.table.Id;
|
import com.imyeyu.spring.annotation.table.Id;
|
||||||
|
import com.imyeyu.spring.annotation.table.PageIgnore;
|
||||||
import com.imyeyu.spring.annotation.table.Table;
|
import com.imyeyu.spring.annotation.table.Table;
|
||||||
import com.imyeyu.spring.annotation.table.Transient;
|
import com.imyeyu.spring.annotation.table.Transient;
|
||||||
import com.imyeyu.spring.bean.Page;
|
import com.imyeyu.spring.bean.Page;
|
||||||
@ -53,7 +55,7 @@ public class SQLProvider {
|
|||||||
public String listByPage(ProviderContext context, @Param("page") Page<?> page) {
|
public String listByPage(ProviderContext context, @Param("page") Page<?> page) {
|
||||||
EntityMeta meta = getEntityMeta(context);
|
EntityMeta meta = getEntityMeta(context);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectAllClause, meta.table));
|
sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectPageClause, meta.table));
|
||||||
if (meta.canDelete) {
|
if (meta.canDelete) {
|
||||||
sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now()));
|
sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now()));
|
||||||
}
|
}
|
||||||
@ -367,6 +369,9 @@ public class SQLProvider {
|
|||||||
/** 查询字段映射 */
|
/** 查询字段映射 */
|
||||||
final String selectAllClause;
|
final String selectAllClause;
|
||||||
|
|
||||||
|
/** 页面查询字段映射 */
|
||||||
|
final String selectPageClause;
|
||||||
|
|
||||||
/** ID 字段 */
|
/** ID 字段 */
|
||||||
final FieldColumn idFieldColumn;
|
final FieldColumn idFieldColumn;
|
||||||
|
|
||||||
@ -400,8 +405,6 @@ public class SQLProvider {
|
|||||||
TimiException.required(this.table, String.format("empty table annotation value for %s entity", entityClass.getName()));
|
TimiException.required(this.table, String.format("empty table annotation value for %s entity", entityClass.getName()));
|
||||||
}
|
}
|
||||||
List<Field> allFieldList = Ref.listAllFields(entityClass);
|
List<Field> allFieldList = Ref.listAllFields(entityClass);
|
||||||
|
|
||||||
StringBuilder selectAllClause = new StringBuilder();
|
|
||||||
FieldColumn idFieldColumn = null;
|
FieldColumn idFieldColumn = null;
|
||||||
List<FieldColumn> fieldColumnList = new ArrayList<>();
|
List<FieldColumn> fieldColumnList = new ArrayList<>();
|
||||||
for (int i = 0; i < allFieldList.size(); i++) {
|
for (int i = 0; i < allFieldList.size(); i++) {
|
||||||
@ -414,21 +417,10 @@ public class SQLProvider {
|
|||||||
TimiException.requiredNull(idFieldColumn, String.format("multi id field for %s entity", entityClass.getName()));
|
TimiException.requiredNull(idFieldColumn, String.format("multi id field for %s entity", entityClass.getName()));
|
||||||
idFieldColumn = fieldColumn;
|
idFieldColumn = fieldColumn;
|
||||||
}
|
}
|
||||||
{
|
|
||||||
Column column = field.getAnnotation(Column.class);
|
|
||||||
if (column == null) {
|
|
||||||
selectAllClause.append('`').append(fieldColumn.columnName).append('`');
|
|
||||||
selectAllClause.append(',');
|
|
||||||
} else {
|
|
||||||
// 处理自定义映射列名
|
|
||||||
selectAllClause.append('`').append(column.value()).append('`');
|
|
||||||
selectAllClause.append(" AS `").append(fieldColumn.fieldName).append('`');
|
|
||||||
selectAllClause.append(',');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldColumnList.add(fieldColumn);
|
fieldColumnList.add(fieldColumn);
|
||||||
}
|
}
|
||||||
this.selectAllClause = selectAllClause.substring(0, selectAllClause.length() - 1);
|
this.selectAllClause = buildSelectClause(fieldColumnList, null);
|
||||||
|
this.selectPageClause = buildSelectClause(fieldColumnList, fc -> !fc.getField().isAnnotationPresent(PageIgnore.class));
|
||||||
this.idFieldColumn = idFieldColumn;
|
this.idFieldColumn = idFieldColumn;
|
||||||
this.fieldColumnList = List.of(fieldColumnList.toArray(new FieldColumn[0])); // 转为只读
|
this.fieldColumnList = List.of(fieldColumnList.toArray(new FieldColumn[0])); // 转为只读
|
||||||
canCreate = Creatable.class.isAssignableFrom(entityClass);
|
canCreate = Creatable.class.isAssignableFrom(entityClass);
|
||||||
@ -437,6 +429,28 @@ public class SQLProvider {
|
|||||||
canDestroy = Destroyable.class.isAssignableFrom(entityClass);
|
canDestroy = Destroyable.class.isAssignableFrom(entityClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildSelectClause(List<FieldColumn> fieldColumnList, CallbackArgReturn<FieldColumn, Boolean> callback) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < fieldColumnList.size(); i++) {
|
||||||
|
FieldColumn fieldColumn = fieldColumnList.get(i);
|
||||||
|
Field field = fieldColumn.getField();
|
||||||
|
if (callback != null && !callback.handler(fieldColumn)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Column column = field.getAnnotation(Column.class);
|
||||||
|
if (column == null) {
|
||||||
|
sb.append('`').append(fieldColumn.columnName).append('`');
|
||||||
|
sb.append(',');
|
||||||
|
} else {
|
||||||
|
// 自定义映射列名
|
||||||
|
sb.append('`').append(column.value()).append('`');
|
||||||
|
sb.append(" AS `").append(fieldColumn.fieldName).append('`');
|
||||||
|
sb.append(',');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.substring(0, sb.length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
public Class<?> getEntityClass() {
|
public Class<?> getEntityClass() {
|
||||||
return entityClass;
|
return entityClass;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user