Skip to content

Commit

Permalink
add full update
Browse files Browse the repository at this point in the history
  • Loading branch information
lhpqaq committed Sep 18, 2024
1 parent edb1ad3 commit c13ea1b
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ public class ChatMessagePO extends BasePO implements Serializable {
@Column(name = "message", nullable = false, length = 255)
private String message;

@Column(name = "sender")
@Column(name = "sender", nullable = false)
private String sender;

@Column(name = "user_id")
@Column(name = "user_id", nullable = false)
private Long userId;

@Column(name = "thread_id")
@Column(name = "thread_id", nullable = false)
private Long threadId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,17 @@ public interface BaseDao<Entity> {
int save(Entity entity);

/**
* Update the entity by primary key.
* Partially update the entity by primary key.
*/
@UpdateProvider(type = BaseSqlProvider.class, method = "partialUpdateById")
int partialUpdateById(Entity entity);

/**
* Fully update the entity by primary key.
*/
@UpdateProvider(type = BaseSqlProvider.class, method = "updateById")
int updateById(Entity entity);

/**
* Query the entity by primary key.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ public <Entity> String partialUpdateById(Entity entity, ProviderContext context)
return SQLBuilder.partialUpdate(tableMetaData, entity, databaseId);
}

public <Entity> String updateById(Entity entity, ProviderContext context) {
Assert.notNull(entity, "entity must not null");

String databaseId = context.getDatabaseId();

Class<?> entityClass = entity.getClass();
TableMetaData tableMetaData = TableMetaData.forClass(entityClass);

return SQLBuilder.update(tableMetaData, entity, databaseId);
}

public String selectById(Serializable id, ProviderContext context) {
String databaseId = context.getDatabaseId();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

import lombok.extern.slf4j.Slf4j;

import jakarta.persistence.Column;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Field;
Expand Down Expand Up @@ -150,6 +151,61 @@ public static <Entity> String partialUpdate(TableMetaData tableMetaData, Entity
return sql.toString();
}

public static <Entity> String update(TableMetaData tableMetaData, Entity entity, String databaseId) {
Class<?> entityClass = entity.getClass();
Map<String, String> fieldColumnMap = tableMetaData.getFieldColumnMap();

SQL sql = new SQL();
switch (DBType.toType(databaseId)) {
case MYSQL: {
sql.UPDATE(tableMetaData.getTableName());
for (Map.Entry<String, String> entry : fieldColumnMap.entrySet()) {
// Ignore primary key
if (Objects.equals(entry.getKey(), tableMetaData.getPkProperty())) {
continue;
}
PropertyDescriptor ps = BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
Object value = ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
Field field = ReflectionUtils.findField(entityClass, entry.getKey());
if (field != null) {
Column column = field.getAnnotation(Column.class);
if (column != null && !column.nullable() && value == null) {
continue;
}
}
sql.SET(getEquals(entry.getValue(), entry.getKey()));
}

sql.WHERE(getEquals(tableMetaData.getPkColumn(), tableMetaData.getPkProperty()));
break;
}
case POSTGRESQL: {
sql.UPDATE("\"" + tableMetaData.getTableName() + "\"");
for (Map.Entry<String, String> entry : fieldColumnMap.entrySet()) {
// Ignore primary key
if (Objects.equals(entry.getKey(), tableMetaData.getPkProperty())) {
continue;
}
PropertyDescriptor ps = BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
if (ps == null || ps.getReadMethod() == null) {
continue;
}
Object value = ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
if (!ObjectUtils.isEmpty(value)) {
sql.SET("\"" + getEquals(entry.getValue() + "\"", entry.getKey()));
}
}
sql.WHERE(getEquals(tableMetaData.getPkColumn(), tableMetaData.getPkProperty()));
break;
}
default: {
log.error("Unsupported data source");
}
}

return sql.toString();
}

public static String selectById(TableMetaData tableMetaData, String databaseId, Serializable id) {

SQL sql = new SQL();
Expand Down

0 comments on commit c13ea1b

Please sign in to comment.