提交 5d222bdd 编写于 作者: M MaxKey

ColumnLogic

上级 67c11e97
package org.dromara.mybatis.jpa.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target( {FIELD, METHOD} )
@Retention( RUNTIME )
public @interface ColumnLogic {
/**
* @return a SQL expression that evaluates to the default column value
*/
String value() default "1" ;
String delete() default "9" ;
}
\ No newline at end of file
......@@ -79,12 +79,14 @@ public class StatementHandlerInterceptor extends AbstractStatementHandlerInterce
&& ((ParamMap<?>)parameterObject).containsKey(MapperMetadata.PAGE)) {
page = (JpaPage)((ParamMap<?>)parameterObject).get(MapperMetadata.PAGE);
}else {
for (Object key : ((ParamMap<?>)parameterObject).entrySet()){
if(((ParamMap<?>)parameterObject).get(key) instanceof JpaPage) {
page = (JpaPage) ((ParamMap<?>)parameterObject).get(key);
break;
try {
for (Object key : ((ParamMap<?>)parameterObject).entrySet()){
if(((ParamMap<?>)parameterObject).get(key) instanceof JpaPage) {
page = (JpaPage) ((ParamMap<?>)parameterObject).get(key);
break;
}
}
}
}catch(Exception e) {}
}
//分页标识
if(page != null && page.isPageable()){
......
......@@ -18,6 +18,7 @@
package org.dromara.mybatis.jpa.metadata;
import org.dromara.mybatis.jpa.annotations.ColumnDefault;
import org.dromara.mybatis.jpa.annotations.ColumnLogic;
import org.dromara.mybatis.jpa.annotations.PartitionKey;
import jakarta.persistence.Column;
......@@ -38,6 +39,8 @@ public class FieldColumnMapper {
private boolean generated = false;
private boolean logicDelete = false;
private GeneratedValue generatedValue;
private Column columnAnnotation;
......@@ -48,6 +51,8 @@ public class FieldColumnMapper {
private PartitionKey partitionKey;
private ColumnLogic columnLogic;
public FieldColumnMapper() {
}
......@@ -139,6 +144,22 @@ public class FieldColumnMapper {
this.partitionKey = partitionKey;
}
public boolean isLogicDelete() {
return logicDelete;
}
public void setLogicDelete(boolean logicDelete) {
this.logicDelete = logicDelete;
}
public ColumnLogic getColumnLogic() {
return columnLogic;
}
public void setColumnLogic(ColumnLogic columnLogic) {
this.columnLogic = columnLogic;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
......
......@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentMap;
import org.apache.ibatis.jdbc.SQL;
import org.dromara.mybatis.jpa.annotations.ColumnDefault;
import org.dromara.mybatis.jpa.annotations.ColumnLogic;
import org.dromara.mybatis.jpa.annotations.PartitionKey;
import org.dromara.mybatis.jpa.entity.JpaEntity;
import org.dromara.mybatis.jpa.id.IdentifierGeneratorFactory;
......@@ -170,6 +171,18 @@ public class MapperMetadata <T extends JpaEntity>{
return idFieldColumnMapper;
}
public static FieldColumnMapper getLogicColumn(String classSimpleName) {
List<FieldColumnMapper> listFields = fieldsMap.get(classSimpleName);
FieldColumnMapper logicColumnMapper = null;
for (int i = 0; i < listFields.size(); i++) {
if (listFields.get(i).isLogicDelete()) {
logicColumnMapper = listFields.get(i);
break;
}
}
return logicColumnMapper;
}
public static FieldColumnMapper getPartitionKey(String classSimpleName) {
List<FieldColumnMapper> listFields = fieldsMap.get(classSimpleName);
FieldColumnMapper partitionKeyColumnMapper = null;
......@@ -279,6 +292,11 @@ public class MapperMetadata <T extends JpaEntity>{
PartitionKey partitionKey = field.getAnnotation(PartitionKey.class);
fieldColumnMapper.setPartitionKey(partitionKey);
}
if (field.isAnnotationPresent(ColumnLogic.class)) {
ColumnLogic columnLogic = field.getAnnotation(ColumnLogic.class);
fieldColumnMapper.setColumnLogic(columnLogic);
fieldColumnMapper.setLogicDelete(true);
}
logger.trace("FieldColumnMapper : {}" , fieldColumnMapper);
fieldColumnMapperList.add(fieldColumnMapper);
}
......
......@@ -131,12 +131,19 @@ public class DeleteProvider <T extends JpaEntity>{
}
String keyValues = keyValue.substring(1).replaceAll(";", "");//remove ;
FieldColumnMapper logicColumnMapper = MapperMetadata.getLogicColumn((entityClass).getSimpleName());
String partitionKeyValue = (String) parametersMap.get(MapperMetadata.PARAMETER_PARTITION_KEY);
FieldColumnMapper partitionKeyColumnMapper = MapperMetadata.getPartitionKey((entityClass).getSimpleName());
FieldColumnMapper idFieldColumnMapper = MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql=new SQL().UPDATE(tableName).SET(" status = 9 ");
SQL sql=new SQL()
.UPDATE(tableName)
.SET(" %s = %s ".formatted(
logicColumnMapper.getColumnName(),
logicColumnMapper.getColumnLogic().delete()
)
);
if(partitionKeyColumnMapper != null && partitionKeyValue != null) {
sql.WHERE("%s = #{%s} and %s in ( %s )"
.formatted(
......
......@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
import org.dromara.mybatis.jpa.entity.JpaEntity;
import org.dromara.mybatis.jpa.metadata.FieldColumnMapper;
import org.dromara.mybatis.jpa.metadata.MapperMetadata;
import org.dromara.mybatis.jpa.metadata.MapperMetadata.SQL_TYPE;
import org.dromara.mybatis.jpa.util.StringUtils;
......@@ -48,7 +49,14 @@ public class FindProvider <T extends JpaEntity>{
}
SQL sql= MapperMetadata.buildSelect(entityClass);
FieldColumnMapper logicColumnMapper = MapperMetadata.getLogicColumn((entityClass).getSimpleName());
if(logicColumnMapper != null && logicColumnMapper.isLogicDelete()) {
sql.WHERE(" %s = %s"
.formatted(
logicColumnMapper.getColumnName(),
logicColumnMapper.getColumnLogic().value())
);
}
String findAllSql = sql.toString();
logger.trace("Find All SQL \n{}" , findAllSql);
MapperMetadata.sqlsMap.put(tableName + SQL_TYPE.FINDALL_SQL,findAllSql);
......
......@@ -50,20 +50,26 @@ public class GetProvider <T extends JpaEntity>{
FieldColumnMapper idFieldColumnMapper = MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql = MapperMetadata.buildSelect(entityClass);
sql.WHERE(" %s = #{%s}"
.formatted(
idFieldColumnMapper.getColumnName(),
idFieldColumnMapper.getFieldName())
);
if(partitionKeyColumnMapper != null && partitionKeyValue != null) {
sql.WHERE(" %s = #{%s} and %s = #{%s} "
.formatted(
partitionKeyColumnMapper.getColumnName() ,
partitionKeyValue,
idFieldColumnMapper.getColumnName(),
idFieldColumnMapper.getFieldName())
);
}else {
sql.WHERE("%s = #{%s}"
sql.WHERE(" %s = #{%s} ".formatted(
partitionKeyColumnMapper.getColumnName() ,
partitionKeyValue));
}
FieldColumnMapper logicColumnMapper = MapperMetadata.getLogicColumn((entityClass).getSimpleName());
if(logicColumnMapper != null && logicColumnMapper.isLogicDelete()) {
sql.WHERE(" %s = %s"
.formatted(
idFieldColumnMapper.getColumnName(),
idFieldColumnMapper.getFieldName())
);
logicColumnMapper.getColumnName(),
logicColumnMapper.getColumnLogic().value())
);
}
String getSql = sql.toString();
......
......@@ -60,6 +60,8 @@ public class InsertProvider <T extends JpaEntity>{
if(fieldColumnMapper.getColumnAnnotation().insertable()) {
if(fieldColumnMapper.getColumnDefault() != null) {
sql.VALUES(fieldColumnMapper.getColumnName(),"" + fieldColumnMapper.getColumnDefault().value() + "");
}else if(fieldColumnMapper.isLogicDelete()) {
sql.VALUES(fieldColumnMapper.getColumnName(),"" + fieldColumnMapper.getColumnLogic().value() + "");
}else if(
(
fieldColumnMapper.getFieldType().equalsIgnoreCase("String")
......
......@@ -75,11 +75,18 @@ public class QueryPageProvider <T extends JpaEntity>{
if(!conditions.isEmpty()) {
conditions.append(" and ");
}
conditions.append(
" %s = #{%s.%s} ".formatted(
fieldColumnMapper.getColumnName(),
MapperMetadata.ENTITY,
fieldColumnMapper.getFieldName()));
if(fieldColumnMapper.isLogicDelete()) {
conditions.append(
" %s = %s ".formatted(
fieldColumnMapper.getColumnName(),
fieldColumnMapper.getColumnLogic().value()));
}else {
conditions.append(
" %s = #{%s.%s} ".formatted(
fieldColumnMapper.getColumnName(),
MapperMetadata.ENTITY,
fieldColumnMapper.getFieldName()));
}
}
}
......@@ -105,8 +112,16 @@ public class QueryPageProvider <T extends JpaEntity>{
}
SQL sql = new SQL()
.SELECT(column).FROM(MapperMetadata.getTableName(entityClass))
.WHERE(QueryBuilder.build(condition));
.WHERE("( " + QueryBuilder.build(condition) +" ) ");
FieldColumnMapper logicColumnMapper = MapperMetadata.getLogicColumn((entityClass).getSimpleName());
if(logicColumnMapper != null && logicColumnMapper.isLogicDelete()) {
sql.WHERE(" ( %s = %s )"
.formatted(
logicColumnMapper.getColumnName(),
logicColumnMapper.getColumnLogic().value())
);
}
logger.trace("query Page By Condition SQL : \n{}" , sql);
return sql.toString();
}
......
......@@ -61,6 +61,9 @@ public class UpdateProvider <T extends JpaEntity>{
partitionKey = fieldColumnMapper;
continue;
}
if(fieldColumnMapper.isLogicDelete()) {
continue;
}
if(
(fieldColumnMapper.getFieldType().equalsIgnoreCase("String")
||fieldColumnMapper.getFieldType().startsWith("byte")
......
......@@ -20,6 +20,7 @@ import java.io.Serializable;
import java.time.LocalDateTime;
import org.dromara.mybatis.jpa.annotations.ColumnDefault;
import org.dromara.mybatis.jpa.annotations.ColumnLogic;
import org.dromara.mybatis.jpa.entity.JpaEntity;
import jakarta.persistence.Column;
......@@ -78,6 +79,11 @@ public class Students extends JpaEntity implements Serializable {
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime modifyDate;
@ColumnLogic
@Column(name ="is_deleted")
private int isDeleted;
public Students() {
super();
}
......@@ -158,6 +164,14 @@ public class Students extends JpaEntity implements Serializable {
this.modifyDate = modifyDate;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
@Override
public String toString() {
return "Students [id=" + id + ", stdNo=" + stdNo + ", stdName=" + stdName + ", stdGender=" + stdGender
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册