LambdaUpdateWrapper<T> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();lambdaUpdateWrapper.eq(T::getColumnName, value); // 设置更新条件// 设置需要更新的属性值int rows = baseMapper.update(entity, lambdaUpdateWrapper); // 执行更新操作 entity如果有属性值为空的,会执行更行吗
时间: 2023-12-17 21:08:41 浏览: 114
如果 LambdaUpdateWrapper 中设置了更新条件,但实体对象中对应的属性值为 null,那么 MyBatis-Plus 会将该属性更新为 null。如果要避免更新为 null,可以在更新前进行非空判断,只对非空属性进行更新。例如:
```
T entity = new T();
entity.setId(id); // 设置实体对象的 ID
// 设置其他需要更新的属性值
if (entity.getProperty() != null) {
LambdaUpdateWrapper<T> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(T::getId, id); // 设置更新条件
lambdaUpdateWrapper.set(T::getProperty, entity.getProperty()); // 设置需要更新的属性值
int rows = baseMapper.update(entity, lambdaUpdateWrapper); // 执行更新操作
}
```
在这个例子中,如果实体对象的 property 属性值为 null,那么不会执行更新操作。只有当 property 不为 null 时,才会进行更新操作。
相关问题
LambdaUpdateWrapper<T> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(T::getColumnName, value).set(T::getColumnName, value).set(T::getColumnName, value);)
这代码使用了 LambdaUpdateWrapper 进行更新操作,并设置了多个更新条件和更新值。eq 方法设置等于条件,set 方法设置更新值。这里使用了链式调用方式,可以一次性设置多个条件和值。例如:
```
LambdaUpdateWrapper<T> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(T::getId, id) // 设置 ID 等于指定值的条件
.set(T::getName, "newName") // 设置 name 属性的值为 "newName"
.set(T::getAge, 20); // 设置 age 属性的值为 20
int rows = baseMapper.update(null, lambdaUpdateWrapper); // 执行更新操作
```
在这个例子中,LambdaUpdateWrapper 设置了三个更新条件:id 等于指定值、name 属性的值为 "newName"、age 属性的值为 20。调用 baseMapper.update 方法执行更新操作,rows 变量表示更新的行数。
将sql改成jdbctemplete方式查询 List<List<String>> assetscardcodeQueryList = new ArrayList<>(); ArrayList<String> query1 = new ArrayList<>(); ArrayList<String> query2 = new ArrayList<>(); query1.add("000000009247"); query2.add("000000009247"); assetscardcodeQueryList.add(query1); assetscardcodeQueryList.add(query2); List<List<String>> assetscardcodeAndBukrsQueryList = new ArrayList<>(); ArrayList<String> query3 = new ArrayList<>(); query3.add("400000001644"); query3.add("A017"); query3.add("400000001641"); query3.add("A017"); String sql="select * from table where (cloum1,cloum2) in (( 'A017', '400000001644'), ('A017', '400000001641')) or cloum1 in ('000000009247','000000009247');"
下面是将这个SQL查询改成使用JdbcTemplate执行的代码:
```
List<List<String>> assetscardcodeQueryList = new ArrayList<>();
ArrayList<String> query1 = new ArrayList<>();
ArrayList<String> query2 = new ArrayList<>();
query1.add("000000009247");
query2.add("000000009247");
assetscardcodeQueryList.add(query1);
assetscardcodeQueryList.add(query2);
List<List<String>> assetscardcodeAndBukrsQueryList = new ArrayList<>();
ArrayList<String> query3 = new ArrayList<>();
query3.add("400000001644");
query3.add("A017");
query3.add("400000001641");
query3.add("A017");
String sql = "select * from table where (cloum1,cloum2) in " +
"(?, ?)" + ", ".repeat(assetscardcodeAndBukrsQueryList.size() - 1) + "or cloum1 in " +
"(?" + ", ?".repeat(assetscardcodeQueryList.size() - 1) + ")";
List<Object> params = new ArrayList<>();
for (List<String> cloumPair : assetscardcodeAndBukrsQueryList) {
params.addAll(cloumPair);
}
params.addAll(assetscardcodeQueryList.stream().flatMap(Collection::stream).collect(Collectors.toList()));
List<Map<String, Object>> rows = jdbcTemplate.query(sql, params.toArray(), new RowMapper<Map<String, Object>>() {
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
Map<String, Object> row = new HashMap<>();
for (int i = 1; i <= meta.getColumnCount(); i++) {
row.put(meta.getColumnName(i), rs.getObject(i));
}
return row;
}
});
// 处理查询结果
for (Map<String, Object> row : rows) {
// do something
}
```
这里使用了与前面相同的动态生成SQL语句和参数设置方式,只是将参数列表改成了从Java对象中获取。最终,该方法将返回一个包含查询结果的列表,每个结果都是一个Map对象,其中包含列名和对应的值。你可以根据需要处理该结果集。
阅读全文