Skip to content

Commit e661793

Browse files
committed
👶 update to sql2o-plus 1.0.3-SNAPSHOT
1.新增 TEntity update(TEntity entity, Update<TEntity> tEntityUpdate) 方法
1 parent eedc2b4 commit e661793

6 files changed

Lines changed: 168 additions & 19 deletions

File tree

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,24 @@ IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
368368
// get
369369
UserInfo user = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399));
370370
// update
371-
user.setName("Test_2 ## -- ");
371+
user.setName("Test_2 ## -- ");
372372
userInfoRepository.update(user);
373373
```
374374

375+
### 修改2
376+
377+
```java
378+
Database db = getDatabase();
379+
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
380+
// get
381+
UserInfo user = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399));
382+
// update
383+
Update<UserInfo> userInfoUpdate = userInfoRepository.createUpdate();
384+
// 指定修改字段值
385+
userInfoUpdate.set(UserInfo::getPwd,"6543421");
386+
userInfoRepository.update(user,userInfoUpdate);
387+
```
388+
375389
### 删除
376390

377391
```java
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.github.cotide.dapper.query.operations;
2+
3+
import com.mysql.cj.util.StringUtils;
4+
import io.github.cotide.dapper.basic.domain.Entity;
5+
import io.github.cotide.dapper.core.functions.TypeFunction;
6+
import io.github.cotide.dapper.core.unit.Sql2oUtils;
7+
import io.github.cotide.dapper.exceptions.SqlBuildException;
8+
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
12+
public class Update<TModel extends Entity> {
13+
14+
private Map<String,Object> ops = new HashMap<>();
15+
16+
private final Class<TModel> clazz;
17+
18+
19+
public Update(Class<TModel> type) {
20+
this.clazz = type;
21+
}
22+
23+
public <R> Update<TModel> set(TypeFunction<TModel,R> function,Object value)
24+
{
25+
if(value==null)
26+
{
27+
throw new SqlBuildException("Value cannot be null");
28+
}
29+
set(Sql2oUtils.getLambdaColumnName(function),value);
30+
return this;
31+
}
32+
33+
34+
public Update<TModel> set(String columnName,Object value)
35+
{
36+
if(StringUtils.isNullOrEmpty(columnName))
37+
{
38+
throw new SqlBuildException("ColumnName cannot be null");
39+
}
40+
ops.put(columnName,value);
41+
return this;
42+
}
43+
44+
45+
46+
public Map<String,Object> getOps(){
47+
return ops;
48+
}
49+
50+
51+
public boolean isHaveOps(){
52+
return ops!=null && ops.size()>0;
53+
}
54+
}

src/main/java/io/github/cotide/dapper/repository/DapperRepositoryBase.java

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
package io.github.cotide.dapper.repository;
22

3-
import io.github.cotide.dapper.core.attr.PrimaryKey;
43
import io.github.cotide.dapper.core.unit.Sql2oCache;
54
import io.github.cotide.dapper.core.unit.Sql2oUnitOfWork;
65
import io.github.cotide.dapper.basic.collections.PageList;
76
import io.github.cotide.dapper.basic.domain.Entity;
8-
import io.github.cotide.dapper.core.attr.Ignore;
97
import io.github.cotide.dapper.core.unit.Sql2oUtils;
108
import io.github.cotide.dapper.core.utility.Guard;
119
import io.github.cotide.dapper.exceptions.PrimaryKeyException;
1210
import io.github.cotide.dapper.exceptions.SqlBuildException;
1311
import io.github.cotide.dapper.query.Sql;
14-
import io.github.cotide.dapper.repository.SqlQueryBase;
12+
import io.github.cotide.dapper.query.operations.Update;
1513
import io.github.cotide.dapper.repository.inter.IRepository;
1614

1715
import java.lang.reflect.Field;
@@ -49,8 +47,30 @@ public TEntity update(TEntity entity) {
4947
return executeUpdate(entity);
5048
}
5149

50+
/**
51+
* 更新实体
52+
*
53+
* @param entity
54+
* @param tEntityUpdate
55+
* @return
56+
*/
5257
@Override
53-
public Boolean delete(TEntity entity) {
58+
public TEntity update(TEntity entity, Update<TEntity> tEntityUpdate) {
59+
return executeUpdate(entity,tEntityUpdate);
60+
}
61+
62+
/**
63+
* 创建更新对象
64+
*
65+
* @return
66+
*/
67+
@Override
68+
public Update<TEntity> createUpdate() {
69+
return new Update<>(modelClass);
70+
}
71+
72+
@Override
73+
public boolean delete(TEntity entity) {
5474
return executeDelete(entity);
5575
}
5676

@@ -105,7 +125,7 @@ public PageList<TEntity> getPageList(int pageIndex, int pageSize, String sql, Ob
105125
* @param object
106126
* @return 影响行数
107127
*/
108-
private <TEntity extends Entity> TEntity executeInsert(TEntity object) {
128+
private TEntity executeInsert(TEntity object) {
109129

110130
Guard.isNotNull(object,"object");
111131
Class<?> modelClass = object.getClass();
@@ -173,14 +193,24 @@ private <TEntity extends Entity> TEntity executeInsert(TEntity object) {
173193
}
174194
}
175195

196+
private TEntity executeUpdate(TEntity object)
197+
{
198+
Update<TEntity> update = this.createUpdate() ;
199+
200+
for (Field field : Sql2oCache.computeNoKeyModelFields(modelClass))
201+
{
202+
update.set(Sql2oCache.getColumnName(field),Sql2oUtils.getValue(object,field));
203+
}
204+
return executeUpdate(object,update);
205+
}
176206

177207
/**
178-
* 新增
179-
*
180-
* @param object
181-
* @return 影响行数
208+
* 更新
209+
* @param object 修改对象
210+
* @param updateOperations 修改参数
211+
* @return
182212
*/
183-
private <T extends Entity> T executeUpdate(T object) {
213+
private TEntity executeUpdate(TEntity object,Update<TEntity> updateOperations) {
184214

185215
Guard.isNotNull(object,"object");
186216
Class<?> modelClass = object.getClass();
@@ -196,11 +226,23 @@ private <T extends Entity> T executeUpdate(T object) {
196226
}
197227
StringBuffer sb = new StringBuffer();
198228
List<Object> values = new ArrayList<>();
199-
for (Field field : Sql2oCache.computeNoKeyModelFields(modelClass))
229+
230+
if(updateOperations == null || !updateOperations.isHaveOps())
200231
{
201-
sb.append(String.format(",%s = ?", Sql2oCache.getColumnName(field)));
202-
values.add(Sql2oUtils.getValue(object,field));
232+
throw new SqlBuildException("Update Operations cannot be null");
233+
}
234+
235+
Map<String,Object> map = updateOperations.getOps();
236+
for(Map.Entry<String,Object> entry : map.entrySet())
237+
{
238+
sb.append(String.format(",%s = ?", entry.getKey()));
239+
values.add(entry.getValue());
203240
}
241+
// for (Field field : Sql2oCache.computeNoKeyModelFields(modelClass))
242+
// {
243+
// sb.append(String.format(",%s = ?", Sql2oCache.getColumnName(field)));
244+
// values.add(Sql2oUtils.getValue(object,field));
245+
// }
204246
try {
205247
String updateSql = String.format("UPDATE %s SET %s WHERE %s = ?",
206248
tableName, sb.substring(1), pkColumn);
@@ -230,10 +272,9 @@ private <T extends Entity> T executeUpdate(T object) {
230272
/**
231273
* 删除
232274
* @param object
233-
* @param <T>
234275
* @return
235276
*/
236-
private <T extends Entity> boolean executeDelete(T object){
277+
private boolean executeDelete(TEntity object){
237278

238279
Guard.isNotNull(object,"object");
239280
Class<?> modelClass = object.getClass();

src/main/java/io/github/cotide/dapper/repository/inter/IRepository.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.cotide.dapper.repository.inter;
22

33
import io.github.cotide.dapper.basic.domain.Entity;
4+
import io.github.cotide.dapper.query.operations.Update;
45

56
/**
67
* 持久化 CRUD
@@ -26,12 +27,26 @@ public interface IRepository<TEntity extends Entity> extends IReadOnlyRepositor
2627
*/
2728
TEntity update(TEntity entity);
2829

30+
/**
31+
* 更新实体
32+
* @param entity
33+
* @return
34+
*/
35+
TEntity update(TEntity entity, Update<TEntity> tEntityUpdate);
36+
37+
38+
/**
39+
* 创建更新对象
40+
* @return
41+
*/
42+
Update<TEntity> createUpdate();
43+
2944
/**
3045
* 删除实体
3146
* @param entity
3247
* @return
3348
*/
34-
Boolean delete(TEntity entity);
49+
boolean delete(TEntity entity);
3550

3651
//#endregion
3752

src/test/java/com/sqltest/base/BaseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
public class BaseTest {
88

9-
String url = "jdbc:mysql://192.168.1.100:3307/g_main_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false";
9+
String url = "jdbc:mysql://192.168.11.101:3306/g_main_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false";
1010
String user ="root";
1111
String pass ="123456";
1212

src/test/java/com/sqltest/db/CRUDTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import com.sqltest.base.BaseTest;
44
import com.sqltest.model.UserInfo;
5+
import com.sqltest.model.UserType;
56
import com.sqltest.model.enums.EnumGroup;
67
import com.sqltest.model.enums.EnumUserStatus;
78
import com.sqltest.model.enums.EnumVipLevel;
89
import io.github.cotide.dapper.Database;
910
import io.github.cotide.dapper.basic.enums.EnumMapping;
11+
import io.github.cotide.dapper.query.operations.Update;
1012
import io.github.cotide.dapper.repository.inter.IRepository;
1113
import io.github.cotide.dapper.query.Sql;
1214
import org.junit.Test;
@@ -43,7 +45,7 @@ public void updateTest(){
4345
Sql.builder()
4446
.select()
4547
.from(UserInfo.class)
46-
.where("user_id = ?", 4));
48+
.where("user_id = ?", 1));
4749
assert (user != null) : "userinfo is null";
4850
System.out.println(">>>>>>>>>> get result <<<<<<<<<<");
4951
System.out.println(user.getId());
@@ -53,6 +55,29 @@ public void updateTest(){
5355
System.out.println(">>>>>>>>>> update result <<<<<<<<<<");
5456
System.out.println(user.getId());
5557
System.out.println(user.getName());
58+
59+
userInfoRepository.update(user);
60+
}
61+
62+
@Test
63+
public void updateOperations()
64+
{
65+
Database db = getDatabase();
66+
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
67+
UserInfo user = userInfoRepository.get(
68+
Sql.builder()
69+
.select()
70+
.from(UserInfo.class)
71+
.where("user_id = ?", 1));
72+
assert (user != null) : "userinfo is null";
73+
System.out.println(">>>>>>>>>> get result <<<<<<<<<<");
74+
System.out.println(user.getId());
75+
System.out.println(user.getName());
76+
77+
78+
Update<UserInfo> userInfoUpdate = userInfoRepository.createUpdate();
79+
userInfoUpdate.set(UserInfo::getPwd,"6543421");
80+
userInfoRepository.update(user,userInfoUpdate);
5681
}
5782

5883
@Test

0 commit comments

Comments
 (0)