diff --git a/docs/datasource.md b/docs/datasource.md
index 69398c1a0..6cd68b23d 100644
--- a/docs/datasource.md
+++ b/docs/datasource.md
@@ -61,9 +61,10 @@ redkale.datasource.platf.password = pwd123
```
-## 增删改
+## 增删改查
```java
@Data
+@Table(name = "t_account")
public class Account {
//男
public static final short GENDER_MALE = 1;
@@ -115,12 +116,25 @@ public class Account {
}
```
+ 删除实体:
+```java
+ //根据主键值删除
+ Account account = new Account();
+ account.setAccountid("account1");
+ source.delete(account);
+
+ //过滤删除, 删除16以下男生
+ //等价sql: DELETE FROM t_account WHERE age < 16 AND gender = 1;
+ source.delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
+```
+
修改实体对象:
```java
//更新单个字段
source.updateColumn(Account.class, "account1", Account::getRemark, "新备注");
//更新多个字段
+ //等价sql: UPDATE t_account SET account_name='新名称', remark='新备注', age=age+2 WHERE account_id='account1';
source.updateColumn(Account.class, "account1",
ColumnValue.set(Account::getAccountName, "新名称"),
ColumnValue.set(Account::getRemark, "新备注"),
@@ -133,6 +147,7 @@ public class Account {
account.setRemark("新备注");
source.updateColumn(account, "accountName", "remark");
//或者
+ //等价sql: UPDATE t_account SET account_name='新名称', remark='新备注' WHERE account_id='account1';
source.updateColumn(account, Account::getAccountName, Account::getRemark);
//更新整个对象
@@ -143,17 +158,28 @@ public class Account {
source.update(one); //createTime不会被更新,因字段设置了@Column(updatable=false)
//过滤更新
+ //等价sql: UPDATE t_account SET remark = '不满16岁是青少年' WHERE age < 16;
source.updateColumn(Account.class, FilterNodes.lt(Account::getAge, 16),
ColumnValue.set(Account::getRemark, "不满16岁是青少年"));
```
- 删除实体:
+ 批量操作:
+```java
+ Account a1 = new Account();
+ a1.setAccountid("account1");
+ a1.setAccountName("Hello1");
+ a1.setCreateTime(System.currentTimeMillis());
+
+ //事务性批量操作
+ DataBatch batch = DataBatch.create()
+ .insert(a1)
+ .updateColumn(Account.class, FilterNodes.lt(Account::getAge, 16),
+ ColumnValue.set(Account::getRemark, "不满16岁是青少年"))
+ .delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
+ source.batch(batch);
+```
+
+ 查询实体对象:
```java
- //根据主键值删除
- Account account = new Account();
- account.setAccountid("account1");
- source.delete(account);
- //过滤删除, 删除16以下男生
- source.delete(Account.class, FilterNodes.lt(Account::getAge, 16).and("gender", GENDER_MALE));
```
\ No newline at end of file
diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java
index 6559808f2..35b065ddb 100644
--- a/src/main/java/org/redkale/source/AbstractDataSource.java
+++ b/src/main/java/org/redkale/source/AbstractDataSource.java
@@ -25,7 +25,6 @@ import org.redkale.persistence.Entity;
import org.redkale.service.*;
import static org.redkale.source.DataSources.*;
import org.redkale.util.*;
-import org.redkale.annotation.ResourceChanged;
/**
* DataSource的S抽象实现类
@@ -1244,12 +1243,12 @@ public abstract class AbstractDataSource extends AbstractService implements Data
}
@Override
- public DataBatch update(Class clazz, Serializable pk, String column, Serializable value) {
- return update(clazz, pk, ColumnValue.set(column, value));
+ public DataBatch updateColumn(Class clazz, Serializable pk, String column, Serializable value) {
+ return updateColumn(clazz, pk, ColumnValue.set(column, value));
}
@Override
- public DataBatch update(Class clazz, Serializable pk, ColumnValue... values) {
+ public DataBatch updateColumn(Class clazz, Serializable pk, ColumnValue... values) {
Objects.requireNonNull(clazz);
if (clazz.getAnnotation(Entity.class) == null) {
throw new SourceException("Entity Class " + clazz + " must be on Annotation @Entity");
@@ -1266,17 +1265,17 @@ public abstract class AbstractDataSource extends AbstractService implements Data
}
@Override
- public DataBatch update(Class clazz, FilterNode node, String column, Serializable value) {
- return update(clazz, node, (Flipper) null, ColumnValue.set(column, value));
+ public DataBatch updateColumn(Class clazz, FilterNode node, String column, Serializable value) {
+ return updateColumn(clazz, node, (Flipper) null, ColumnValue.set(column, value));
}
@Override
- public DataBatch update(Class clazz, FilterNode node, ColumnValue... values) {
- return update(clazz, node, (Flipper) null, values);
+ public DataBatch updateColumn(Class clazz, FilterNode node, ColumnValue... values) {
+ return updateColumn(clazz, node, (Flipper) null, values);
}
@Override
- public DataBatch update(Class clazz, FilterNode node, Flipper flipper, ColumnValue... values) {
+ public DataBatch updateColumn(Class clazz, FilterNode node, Flipper flipper, ColumnValue... values) {
Objects.requireNonNull(clazz);
if (clazz.getAnnotation(Entity.class) == null) {
throw new SourceException("Entity Class " + clazz + " must be on Annotation @Entity");
diff --git a/src/main/java/org/redkale/source/DataBatch.java b/src/main/java/org/redkale/source/DataBatch.java
index ee7d098a1..4d54672e2 100644
--- a/src/main/java/org/redkale/source/DataBatch.java
+++ b/src/main/java/org/redkale/source/DataBatch.java
@@ -5,6 +5,8 @@ package org.redkale.source;
import java.io.Serializable;
import java.util.Collection;
+import org.redkale.util.LambdaFunction;
+import org.redkale.util.LambdaSupplier;
import org.redkale.util.SelectColumn;
/**
@@ -43,15 +45,13 @@ public interface DataBatch {
public DataBatch update(Collection entitys);
- public DataBatch update(Class clazz, Serializable pk, String column, Serializable value);
+ public DataBatch updateColumn(Class clazz, Serializable pk, String column, Serializable value);
- public DataBatch update(Class clazz, Serializable pk, ColumnValue... values);
+ public DataBatch updateColumn(Class clazz, Serializable pk, ColumnValue... values);
- public DataBatch update(Class clazz, FilterNode node, String column, Serializable value);
+ public DataBatch updateColumn(Class clazz, FilterNode node, String column, Serializable value);
- public DataBatch update(Class clazz, FilterNode node, ColumnValue... values);
-
- public DataBatch update(Class clazz, FilterNode node, Flipper flipper, ColumnValue... values);
+ public DataBatch updateColumn(Class clazz, FilterNode node, Flipper flipper, ColumnValue... values);
public DataBatch updateColumn(T entity, final String... columns);
@@ -61,4 +61,23 @@ public interface DataBatch {
public DataBatch updateColumn(T entity, final FilterNode node, SelectColumn selects);
+ default DataBatch updateColumn(final Class clazz, final Serializable pk, final LambdaSupplier func) {
+ return updateColumn(clazz, pk, LambdaSupplier.readColumn(func), func.get());
+ }
+
+ default DataBatch updateColumn(final Class clazz, final Serializable pk, LambdaFunction func, Serializable value) {
+ return updateColumn(clazz, pk, ColumnValue.set(func, value));
+ }
+
+ default DataBatch updateColumn(final Class clazz, final FilterNode node, final ColumnValue... values) {
+ return updateColumn(clazz, node, (Flipper) null, values);
+ }
+
+ default DataBatch updateColumn(final T entity, final LambdaFunction... funcs) {
+ return updateColumn(entity, (FilterNode) null, LambdaFunction.readColumns(funcs));
+ }
+
+ default DataBatch updateColumn(final T entity, final FilterNode node, final LambdaFunction... funcs) {
+ return updateColumn(entity, node, LambdaFunction.readColumns(funcs));
+ }
}