提交 54cfa503 编写于 作者: M MaxKey

PartitionKey

上级 f198470d
......@@ -18,6 +18,7 @@
package org.dromara.mybatis.jpa.metadata;
import org.dromara.mybatis.jpa.annotations.ColumnDefault;
import org.dromara.mybatis.jpa.annotations.PartitionKey;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
......@@ -45,6 +46,8 @@ public class FieldColumnMapper {
private ColumnDefault columnDefault;
private PartitionKey partitionKey;
public FieldColumnMapper() {
}
......@@ -127,6 +130,14 @@ public class FieldColumnMapper {
public void setColumnDefault(ColumnDefault columnDefault) {
this.columnDefault = columnDefault;
}
public PartitionKey getPartitionKey() {
return partitionKey;
}
public void setPartitionKey(PartitionKey partitionKey) {
this.partitionKey = partitionKey;
}
@Override
public String toString() {
......
......@@ -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.PartitionKey;
import org.dromara.mybatis.jpa.entity.JpaEntity;
import org.dromara.mybatis.jpa.id.IdentifierGeneratorFactory;
import org.slf4j.Logger;
......@@ -158,6 +159,18 @@ public class MapperMetadata <T extends JpaEntity>{
}
return idFieldColumnMapper;
}
public static FieldColumnMapper getPartitionKey(String classSimpleName) {
List<FieldColumnMapper> listFields = fieldsMap.get(classSimpleName);
FieldColumnMapper partitionKeyColumnMapper = null;
for (FieldColumnMapper column : listFields) {
if (column.getPartitionKey() != null) {
partitionKeyColumnMapper = column;
break;
}
}
return partitionKeyColumnMapper;
}
/**
* get select table Column from entityClass, data cache in fieldsMap
......@@ -203,7 +216,7 @@ public class MapperMetadata <T extends JpaEntity>{
return;
}
_logger.trace("entityClass " +entityClass);
_logger.trace("entityClass {}" , entityClass);
Field[] fields = entityClass.getDeclaredFields();
List<FieldColumnMapper>fieldColumnMapperList=new ArrayList<FieldColumnMapper>(fields.length);
......@@ -240,19 +253,23 @@ public class MapperMetadata <T extends JpaEntity>{
}
if(field.isAnnotationPresent(GeneratedValue.class)) {
GeneratedValue generatedValue=(GeneratedValue) field.getAnnotation(GeneratedValue.class);
GeneratedValue generatedValue=field.getAnnotation(GeneratedValue.class);
fieldColumnMapper.setGeneratedValue(generatedValue);
fieldColumnMapper.setGenerated(true);
}
if (field.isAnnotationPresent(Temporal.class)) {
Temporal temporalAnnotation = (Temporal) field.getAnnotation(Temporal.class);
Temporal temporalAnnotation = field.getAnnotation(Temporal.class);
fieldColumnMapper.setTemporalAnnotation(temporalAnnotation);
}
if (field.isAnnotationPresent(ColumnDefault.class)) {
ColumnDefault columnDefault = (ColumnDefault) field.getAnnotation(ColumnDefault.class);
ColumnDefault columnDefault = field.getAnnotation(ColumnDefault.class);
fieldColumnMapper.setColumnDefault(columnDefault);
}
_logger.trace("FieldColumnMapper : " + fieldColumnMapper);
if (field.isAnnotationPresent(PartitionKey.class)) {
PartitionKey partitionKey = field.getAnnotation(PartitionKey.class);
fieldColumnMapper.setPartitionKey(partitionKey);
}
_logger.trace("FieldColumnMapper : {}" , fieldColumnMapper);
fieldColumnMapperList.add(fieldColumnMapper);
}
......@@ -260,7 +277,7 @@ public class MapperMetadata <T extends JpaEntity>{
}
fieldsMap.put(entityClass.getSimpleName(), fieldColumnMapperList);
_logger.trace("fieldsMap : " + fieldsMap);
_logger.trace("fieldsMap : {}" , fieldsMap);
}
......
......@@ -24,8 +24,8 @@ public class DateConverter{
public static String convert(Object entity ,FieldColumnMapper fieldColumnMapper,boolean isUpdate) {
String dateValue = "";
Date date = (Date)BeanUtil.get(entity, fieldColumnMapper.getFieldName());
if(fieldColumnMapper.getFieldType().equalsIgnoreCase("Date")) {
Date date = (Date)BeanUtil.get(entity, fieldColumnMapper.getFieldName());
if(date == null) {
dateValue = convertDateTime(LocalDateTime.now(),fieldColumnMapper);
}else {
......
......@@ -45,16 +45,30 @@ public class DeleteProvider <T extends JpaEntity>{
if (MapperMetadata.sqlsMap.containsKey(tableName + SQL_TYPE.REMOVE_SQL)) {
return MapperMetadata.sqlsMap.get(tableName + SQL_TYPE.REMOVE_SQL);
}
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn((entityClass).getSimpleName());
FieldColumnMapper idFieldColumnMapper = MapperMetadata.getIdColumn((entityClass).getSimpleName());
FieldColumnMapper partitionKey = MapperMetadata.getPartitionKey((entityClass).getSimpleName());
SQL sql=new SQL()
.DELETE_FROM(tableName)
.WHERE(idFieldColumnMapper.getColumnName()
+ " = #{" +idFieldColumnMapper.getFieldName() + ",javaType=string,jdbcType=VARCHAR}");
.DELETE_FROM(tableName);
if(partitionKey!=null) {
sql.WHERE("""
%s = #{%s,javaType=string,jdbcType=VARCHAR}
and
%s = #{%s,javaType=string,jdbcType=VARCHAR}
""".formatted(
partitionKey.getColumnName() ,
partitionKey.getFieldName(),
idFieldColumnMapper.getColumnName(),
idFieldColumnMapper.getFieldName())
);
}else {
sql.WHERE("%s = #{%s,javaType=string,jdbcType=VARCHAR}"
.formatted(idFieldColumnMapper.getColumnName(),idFieldColumnMapper.getFieldName()) );
}
String deleteSql = sql.toString();
MapperMetadata.sqlsMap.put(tableName + SQL_TYPE.REMOVE_SQL,deleteSql);
_logger.trace("Delete SQL \n"+deleteSql);
_logger.trace("Delete SQL \n{}" , deleteSql);
return deleteSql;
}
......@@ -68,7 +82,7 @@ public class DeleteProvider <T extends JpaEntity>{
for(String value : idValues) {
if(value.trim().length() > 0) {
keyValue += ",'" + value + "'";
_logger.trace("batch delete by id " + value);
_logger.trace("batch delete by id {}" , value);
}
}
//remove ;
......@@ -81,7 +95,7 @@ public class DeleteProvider <T extends JpaEntity>{
String deleteSql=sql.toString();
MapperMetadata.sqlsMap.put(tableName + SQL_TYPE.BATCHDELETE_SQL,deleteSql);
_logger.trace("Delete SQL \n" + deleteSql);
_logger.trace("Delete SQL \n{}" , deleteSql);
return deleteSql;
}
......@@ -95,7 +109,7 @@ public class DeleteProvider <T extends JpaEntity>{
for(String value : idValues) {
if(value.trim().length() > 0) {
keyValue += ",'" + value + "'";
_logger.trace("logic delete by id " + value);
_logger.trace("logic delete by id {}" , value);
}
}
//remove ;
......@@ -109,7 +123,7 @@ public class DeleteProvider <T extends JpaEntity>{
String deleteSql = sql.toString();
MapperMetadata.sqlsMap.put(tableName + SQL_TYPE.LOGICDELETE_SQL,deleteSql);
_logger.trace("logic Delete SQL \n" + deleteSql);
_logger.trace("logic Delete SQL \n{}" , deleteSql);
return deleteSql;
}
......
......@@ -69,7 +69,7 @@ public class InsertProvider <T extends JpaEntity>{
&& StringUtils.isBlank(BeanUtil.getValue(entity, fieldColumnMapper.getFieldName()))
&& !fieldColumnMapper.isGenerated()) {
//skip null field value
_logger.trace("skip field value is null ");
_logger.trace("skip field {} value is null ",fieldColumnMapper.getFieldName());
}else {
if(fieldColumnMapper.isGenerated() && fieldColumnMapper.getTemporalAnnotation() != null) {
sql.VALUES(fieldColumnMapper.getColumnName(),"'" + DateConverter.convert(entity, fieldColumnMapper,false) + "'");
......@@ -80,12 +80,12 @@ public class InsertProvider <T extends JpaEntity>{
)) {
generatedValue(sql , entity , fieldColumnMapper);
}else {
sql.VALUES(fieldColumnMapper.getColumnName(),"#{" + fieldColumnMapper.getFieldName() + "}");
sql.VALUES(fieldColumnMapper.getColumnName(),"#{%s}".formatted(fieldColumnMapper.getFieldName()));
}
}
}
}
_logger.trace("Insert SQL : \n" + sql);
_logger.trace("Insert SQL : \n{}" , sql);
return sql.toString();
}
......@@ -102,7 +102,7 @@ public class InsertProvider <T extends JpaEntity>{
genValue = IdentifierGeneratorFactory.generate(IdStrategy.DEFAULT);
}
BeanUtil.set(entity, fieldColumnMapper.getFieldName(),genValue);
sql.VALUES(fieldColumnMapper.getColumnName(),"#{" + fieldColumnMapper.getFieldName() + "}");
sql.VALUES(fieldColumnMapper.getColumnName(),"#{%s}".formatted(fieldColumnMapper.getFieldName()));
}else if(generatedValue.strategy()==GenerationType.SEQUENCE){
sql.VALUES(fieldColumnMapper.getColumnName(),generatedValue.generator()+".nextval");
}else if(generatedValue.strategy()==GenerationType.IDENTITY){
......
......@@ -48,14 +48,19 @@ public class UpdateProvider <T extends JpaEntity>{
SQL sql = new SQL()
.UPDATE(MapperMetadata.getTableName(entity.getClass()));
for (int i = 0; i < listFields.size(); i++) {
FieldColumnMapper fieldColumnMapper = listFields.get(i);
FieldColumnMapper partitionKey = null;
FieldColumnMapper idFieldColumnMapper = null;
for(FieldColumnMapper fieldColumnMapper : listFields) {
_logger.trace("Field {} , Type {}",
fieldColumnMapper.getFieldName(), fieldColumnMapper.getFieldType());
if (fieldColumnMapper.isIdColumn()) {
if (fieldColumnMapper.isIdColumn() ) {
idFieldColumnMapper = fieldColumnMapper;
continue;
}
if(fieldColumnMapper.getPartitionKey() != null) {
partitionKey = fieldColumnMapper;
continue;
}
if(
(fieldColumnMapper.getFieldType().equalsIgnoreCase("String")
||fieldColumnMapper.getFieldType().startsWith("byte")
......@@ -64,22 +69,36 @@ public class UpdateProvider <T extends JpaEntity>{
&& BeanUtil.getValue(entity, fieldColumnMapper.getFieldName())== null
&& !fieldColumnMapper.isGenerated()) {
//skip null field value
_logger.trace("skip field value is null ");
_logger.trace("skip field {} value is null ",fieldColumnMapper.getFieldName());
}else {
if(fieldColumnMapper.getColumnAnnotation().updatable()) {
if(fieldColumnMapper.isGenerated() && fieldColumnMapper.getTemporalAnnotation() != null) {
sql.SET(fieldColumnMapper.getColumnName() + " = '" + DateConverter.convert(entity, fieldColumnMapper,true) + "'");
sql.SET(" %s = '%s' ".formatted(fieldColumnMapper.getColumnName(),DateConverter.convert(entity, fieldColumnMapper,true)));
}else {
sql.SET(fieldColumnMapper.getColumnName() + " = #{" + fieldColumnMapper.getFieldName() + "}");
sql.SET(" %s = #{%s} ".formatted(fieldColumnMapper.getColumnName(),fieldColumnMapper.getFieldName()));
}
}
}
}
FieldColumnMapper idFieldColumnMapper = MapperMetadata.getIdColumn(entity.getClass().getSimpleName());
sql.WHERE(idFieldColumnMapper.getColumnName() + " = #{" + idFieldColumnMapper.getFieldName() + "}");
_logger.trace("Update SQL : \n{}" , sql);
return sql.toString();
if(idFieldColumnMapper != null) {
if(partitionKey != null) {
sql.WHERE("""
%s = #{%s}
and %s = #{%s}
""".formatted(
partitionKey.getColumnName(),
partitionKey.getFieldName(),
idFieldColumnMapper.getColumnName(),
idFieldColumnMapper.getFieldName())
);
}else {
sql.WHERE("%s = #{%s}" .formatted(idFieldColumnMapper.getColumnName(),idFieldColumnMapper.getFieldName()));
}
_logger.trace("Update SQL : \n{}" , sql);
return sql.toString();
}else {
return "";
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册