Skip to content

Commit 25a879f

Browse files
author
陈佳志
committed
SQL new method
1 parent 27e1cdb commit 25a879f

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

src/main/java/top/fastsql/SQL.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,35 @@ public int update() {
11281128
return count;
11291129
}
11301130

1131+
public KeyHolderResult updateForKey(String... keyColumns) {
1132+
checkNull();
1133+
1134+
KeyHolder keyHolder = new GeneratedKeyHolder();
1135+
1136+
int count;
1137+
String sql = strBuilder.toString();
1138+
if (useClassicJdbcTemplate) {
1139+
//TODO 只能使用命名参数形式
1140+
throw new UnsupportedOperationException("updateForKey() 目前只能使用命名参数形式");
1141+
1142+
1143+
// PreparedStatementCreatorFactory preparedStatementCreatorFactory = new PreparedStatementCreatorFactory(sql);
1144+
//
1145+
//
1146+
// PreparedStatementCreator creator = preparedStatementCreatorFactory
1147+
// .newPreparedStatementCreator(Arrays.asList(this.varParams));
1148+
//
1149+
//
1150+
// count = this.namedParameterJdbcTemplate.getJdbcOperations().update(
1151+
// creator, keyHolder);
1152+
} else {
1153+
count = this.namedParameterJdbcTemplate.update(sql, this.sqlParameterSource, keyHolder, keyColumns);
1154+
}
1155+
if (count < 1) {
1156+
logger.warn("update更新成功数量为" + count);
1157+
}
1158+
return new KeyHolderResult(count, keyHolder);
1159+
}
11311160

11321161
public BatchUpdateResult batchUpdateByMapParams(List<Map<String, Object>> mapParamList) {
11331162
checkNull();

src/main/java/top/fastsql/dao/BaseDAO.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,73 @@ public int insert(E entity) {
205205
}
206206
return count;
207207
}
208+
209+
public KeyHolderResult insertForKey(E entity, String... keyColumns) {
210+
if (useBeforeInsert) {
211+
beforeInsert(entity);
212+
}
213+
214+
StringBuilder nameBuilder = new StringBuilder();
215+
StringBuilder valueBuilder = new StringBuilder();
216+
217+
218+
Object fieldValue = EntityRefelectUtils.getFieldValue(entity, idField);
219+
if (fieldValue == null) {
220+
fieldsWithoutId.forEach(field -> {
221+
nameBuilder.append(",").append(StringExtUtils.camelToUnderline(field.getName()));
222+
valueBuilder.append(",:").append(field.getName());
223+
});
224+
} else {
225+
fields.forEach(field -> {
226+
nameBuilder.append(",").append(StringExtUtils.camelToUnderline(field.getName()));
227+
valueBuilder.append(",:").append(field.getName());
228+
});
229+
}
230+
231+
SQL sql = getSQL()
232+
.INSERT_INTO(tableName, nameBuilder.deleteCharAt(0).toString())
233+
.VALUES(valueBuilder.deleteCharAt(0).toString())
234+
.beanParameter(entity);
235+
236+
KeyHolderResult keyHolderResult = sql.updateForKey(keyColumns);
237+
if (useAfterInsert) {
238+
afterInsert(entity, keyHolderResult.getCount());
239+
}
240+
return keyHolderResult;
241+
}
242+
243+
public KeyHolderResult insertForId(E entity) {
244+
if (useBeforeInsert) {
245+
beforeInsert(entity);
246+
}
247+
248+
StringBuilder nameBuilder = new StringBuilder();
249+
StringBuilder valueBuilder = new StringBuilder();
250+
Object fieldValue = EntityRefelectUtils.getFieldValue(entity, idField);
251+
if (fieldValue == null) {
252+
fieldsWithoutId.forEach(field -> {
253+
nameBuilder.append(",").append(StringExtUtils.camelToUnderline(field.getName()));
254+
valueBuilder.append(",:").append(field.getName());
255+
});
256+
} else {
257+
fields.forEach(field -> {
258+
nameBuilder.append(",").append(StringExtUtils.camelToUnderline(field.getName()));
259+
valueBuilder.append(",:").append(field.getName());
260+
});
261+
}
262+
263+
SQL sql = getSQL()
264+
.INSERT_INTO(tableName, nameBuilder.deleteCharAt(0).toString())
265+
.VALUES(valueBuilder.deleteCharAt(0).toString())
266+
.beanParameter(entity);
267+
268+
KeyHolderResult keyHolderResult = sql.updateForKey(idColumnName);
269+
if (useAfterInsert) {
270+
afterInsert(entity, keyHolderResult.getCount());
271+
}
272+
return keyHolderResult;
273+
}
274+
208275

209276
/**
210277
* 批量插入

0 commit comments

Comments
 (0)