Package org.mybatis.dynamic.sql.update
Interface UpdateDSLCompleter
- All Superinterfaces:
Function<UpdateDSL<UpdateModel>,
Buildable<UpdateModel>>
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
@FunctionalInterface
public interface UpdateDSLCompleter
extends Function<UpdateDSL<UpdateModel>,Buildable<UpdateModel>>
Represents a function that can be used to create a general update method. When using this function,
you can create a method that does not require a user to call the build() and render() methods - making
client code look a bit cleaner.
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 row based on whether 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.
- Author:
- Jeff Butler
-
Method Summary