@FunctionalInterface public interface UpdateDSLCompleter extends Function<UpdateDSL<UpdateModel>,Buildable<UpdateModel>>
This function is intended to be used in conjunction in the utility method like
MyBatis3Utils.update(ToIntFunction, SqlTable, UpdateDSLCompleter)
For example, you can create mapper interface methods like this:
@UpdateProvider(type=SqlProviderAdapter.class, method="update")
int update(UpdateStatementProvider updateStatement);
default int update(UpdateDSLCompleter completer) {
return MyBatis3Utils.update(this::update, person, completer);
}
And then call the simplified default method like this:
int rows = mapper.update(c ->
c.set(firstName).equalTo("Fred")
.where(id, isEqualTo(100))
);
You can implement an "update all" simply by omitting a where clause:
int rows = mapper.update(c ->
c.set(firstName).equalTo("Fred")
);
You could also implement a helper method that would set fields based on values of a record. For example, the following method would set all fields of a record based on whether or not the values are null:
static UpdateDSL<UpdateModel> updateSelectiveColumns(PersonRecord record,
UpdateDSL<UpdateModel> dsl) {
return dsl.set(id).equalToWhenPresent(record::getId)
.set(firstName).equalToWhenPresent(record::getFirstName)
.set(lastName).equalToWhenPresent(record::getLastName)
.set(birthDate).equalToWhenPresent(record::getBirthDate)
.set(employed).equalToWhenPresent(record::getEmployed)
.set(occupation).equalToWhenPresent(record::getOccupation);
}
The helper method could be used like this:
rows = mapper.update(c ->
PersonMapper.updateSelectiveColumns(record, c)
.where(id, isLessThan(100)));
In this way, you could mimic the function of the old style "updateByExampleSelective" methods from MyBatis Generator.
Copyright © 2016–2019 MyBatis.org. All rights reserved.