Skip to content

Commit 25f1fcb

Browse files
committed
Use records where possible
1 parent 0c6ec65 commit 25f1fcb

File tree

5 files changed

+133
-260
lines changed

5 files changed

+133
-260
lines changed

src/test/java/examples/simple/CompoundKeyRow.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,4 @@
1515
*/
1616
package examples.simple;
1717

18-
public class CompoundKeyRow {
19-
private Integer id1;
20-
private Integer id2;
21-
22-
public Integer getId1() {
23-
return id1;
24-
}
25-
26-
public void setId1(Integer id1) {
27-
this.id1 = id1;
28-
}
29-
30-
public Integer getId2() {
31-
return id2;
32-
}
33-
34-
public void setId2(Integer id2) {
35-
this.id2 = id2;
36-
}
37-
}
18+
public record CompoundKeyRow (Integer id1, Integer id2) {}

src/test/java/examples/simple/MyBatisMapToRowTest.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.sql.DriverManager;
3131
import java.util.List;
3232
import java.util.Map;
33+
import java.util.function.Function;
3334
import java.util.stream.IntStream;
3435

3536
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
@@ -98,7 +99,7 @@ void testInsertOne() {
9899
.orderBy(id1, id2)
99100
.build().render(RenderingStrategies.MYBATIS3);
100101

101-
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, this::mapRow);
102+
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, rowMapper);
102103
assertThat(records).hasSize(1);
103104
}
104105
}
@@ -128,7 +129,7 @@ void testInsertMultiple() {
128129
.orderBy(id1, id2)
129130
.build().render(RenderingStrategies.MYBATIS3);
130131

131-
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, this::mapRow);
132+
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, rowMapper);
132133
assertThat(records).hasSize(3);
133134
}
134135
}
@@ -165,15 +166,11 @@ void testInsertBatch() {
165166
.orderBy(id1, id2)
166167
.build().render(RenderingStrategies.MYBATIS3);
167168

168-
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, this::mapRow);
169+
List<CompoundKeyRow> records = mapper.selectMany(selectStatement, rowMapper);
169170
assertThat(records).hasSize(3);
170171
}
171172
}
172173

173-
private CompoundKeyRow mapRow(Map<String, Object> map) {
174-
CompoundKeyRow answer = new CompoundKeyRow();
175-
answer.setId1((Integer) map.get("ID1"));
176-
answer.setId2((Integer) map.get("ID2"));
177-
return answer;
178-
}
174+
private final Function<Map<String, Object>, CompoundKeyRow> rowMapper =
175+
m -> new CompoundKeyRow((Integer) m.get("ID1"), (Integer) m.get("ID2"));
179176
}

src/test/java/examples/simple/PersonMapper.java

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717

1818
import static examples.simple.PersonDynamicSqlSupport.*;
1919
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
20+
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualToWhenPresent;
2021

2122
import java.util.Arrays;
2223
import java.util.Collection;
24+
import java.util.Date;
2325
import java.util.List;
2426
import java.util.Optional;
2527
import java.util.function.UnaryOperator;
2628

29+
import org.apache.ibatis.annotations.Arg;
2730
import org.apache.ibatis.annotations.Mapper;
28-
import org.apache.ibatis.annotations.Result;
29-
import org.apache.ibatis.annotations.ResultMap;
30-
import org.apache.ibatis.annotations.Results;
3131
import org.apache.ibatis.annotations.SelectProvider;
3232
import org.apache.ibatis.type.JdbcType;
3333
import org.mybatis.dynamic.sql.BasicColumn;
@@ -56,19 +56,23 @@
5656
public interface PersonMapper extends CommonCountMapper, CommonDeleteMapper, CommonInsertMapper<PersonRecord>, CommonUpdateMapper {
5757

5858
@SelectProvider(type=SqlProviderAdapter.class, method="select")
59-
@Results(id="PersonResult", value= {
60-
@Result(column="A_ID", property="id", jdbcType=JdbcType.INTEGER, id=true),
61-
@Result(column="first_name", property="firstName", jdbcType=JdbcType.VARCHAR),
62-
@Result(column="last_name", property="lastName", jdbcType=JdbcType.VARCHAR, typeHandler=LastNameTypeHandler.class),
63-
@Result(column="birth_date", property="birthDate", jdbcType=JdbcType.DATE),
64-
@Result(column="employed", property="employed", jdbcType=JdbcType.VARCHAR, typeHandler=YesNoTypeHandler.class),
65-
@Result(column="occupation", property="occupation", jdbcType=JdbcType.VARCHAR),
66-
@Result(column="address_id", property="addressId", jdbcType=JdbcType.INTEGER)
67-
})
59+
@Arg(column="A_ID", jdbcType=JdbcType.INTEGER, id=true, javaType = Integer.class)
60+
@Arg(column="first_name", jdbcType=JdbcType.VARCHAR, javaType = String.class)
61+
@Arg(column="last_name", jdbcType=JdbcType.VARCHAR, typeHandler=LastNameTypeHandler.class, javaType = LastName.class)
62+
@Arg(column="birth_date", jdbcType=JdbcType.DATE, javaType = Date.class)
63+
@Arg(column="employed", jdbcType=JdbcType.VARCHAR, typeHandler=YesNoTypeHandler.class, javaType = Boolean.class)
64+
@Arg(column="occupation", jdbcType=JdbcType.VARCHAR, javaType = String.class)
65+
@Arg(column="address_id", jdbcType=JdbcType.INTEGER, javaType = Integer.class)
6866
List<PersonRecord> selectMany(SelectStatementProvider selectStatement);
6967

7068
@SelectProvider(type=SqlProviderAdapter.class, method="select")
71-
@ResultMap("PersonResult")
69+
@Arg(column="A_ID", jdbcType=JdbcType.INTEGER, id=true, javaType = Integer.class)
70+
@Arg(column="first_name", jdbcType=JdbcType.VARCHAR, javaType = String.class)
71+
@Arg(column="last_name", jdbcType=JdbcType.VARCHAR, typeHandler=LastNameTypeHandler.class, javaType = LastName.class)
72+
@Arg(column="birth_date", jdbcType=JdbcType.DATE, javaType = Date.class)
73+
@Arg(column="employed", jdbcType=JdbcType.VARCHAR, typeHandler=YesNoTypeHandler.class, javaType = Boolean.class)
74+
@Arg(column="occupation", jdbcType=JdbcType.VARCHAR, javaType = String.class)
75+
@Arg(column="address_id", jdbcType=JdbcType.INTEGER, javaType = Integer.class)
7276
Optional<PersonRecord> selectOne(SelectStatementProvider selectStatement);
7377

7478
BasicColumn[] selectList =
@@ -130,13 +134,13 @@ default int insertMultiple(Collection<PersonRecord> records) {
130134

131135
default int insertSelective(PersonRecord row) {
132136
return MyBatis3Utils.insert(this::insert, row, person, c ->
133-
c.map(id).toPropertyWhenPresent("id", row::getId)
134-
.map(firstName).toPropertyWhenPresent("firstName", row::getFirstName)
135-
.map(lastName).toPropertyWhenPresent("lastName", row::getLastName)
136-
.map(birthDate).toPropertyWhenPresent("birthDate", row::getBirthDate)
137-
.map(employed).toPropertyWhenPresent("employed", row::getEmployed)
138-
.map(occupation).toPropertyWhenPresent("occupation", row::getOccupation)
139-
.map(addressId).toPropertyWhenPresent("addressId", row::getAddressId)
137+
c.map(id).toPropertyWhenPresent("id", row::id)
138+
.map(firstName).toPropertyWhenPresent("firstName", row::firstName)
139+
.map(lastName).toPropertyWhenPresent("lastName", row::lastName)
140+
.map(birthDate).toPropertyWhenPresent("birthDate", row::birthDate)
141+
.map(employed).toPropertyWhenPresent("employed", row::employed)
142+
.map(occupation).toPropertyWhenPresent("occupation", row::occupation)
143+
.map(addressId).toPropertyWhenPresent("addressId", row::addressId)
140144
);
141145
}
142146

@@ -164,47 +168,47 @@ default int update(UpdateDSLCompleter completer) {
164168

165169
static UpdateDSL<UpdateModel> updateAllColumns(PersonRecord row,
166170
UpdateDSL<UpdateModel> dsl) {
167-
return dsl.set(id).equalTo(row::getId)
168-
.set(firstName).equalTo(row::getFirstName)
169-
.set(lastName).equalTo(row::getLastName)
170-
.set(birthDate).equalTo(row::getBirthDate)
171-
.set(employed).equalTo(row::getEmployed)
172-
.set(occupation).equalTo(row::getOccupation)
173-
.set(addressId).equalTo(row::getAddressId);
171+
return dsl.set(id).equalToOrNull(row::id)
172+
.set(firstName).equalToOrNull(row::firstName)
173+
.set(lastName).equalToOrNull(row::lastName)
174+
.set(birthDate).equalToOrNull(row::birthDate)
175+
.set(employed).equalToOrNull(row::employed)
176+
.set(occupation).equalToOrNull(row::occupation)
177+
.set(addressId).equalToOrNull(row::addressId);
174178
}
175179

176180
static UpdateDSL<UpdateModel> updateSelectiveColumns(PersonRecord row,
177181
UpdateDSL<UpdateModel> dsl) {
178-
return dsl.set(id).equalToWhenPresent(row::getId)
179-
.set(firstName).equalToWhenPresent(row::getFirstName)
180-
.set(lastName).equalToWhenPresent(row::getLastName)
181-
.set(birthDate).equalToWhenPresent(row::getBirthDate)
182-
.set(employed).equalToWhenPresent(row::getEmployed)
183-
.set(occupation).equalToWhenPresent(row::getOccupation)
184-
.set(addressId).equalToWhenPresent(row::getAddressId);
182+
return dsl.set(id).equalToWhenPresent(row::id)
183+
.set(firstName).equalToWhenPresent(row::firstName)
184+
.set(lastName).equalToWhenPresent(row::lastName)
185+
.set(birthDate).equalToWhenPresent(row::birthDate)
186+
.set(employed).equalToWhenPresent(row::employed)
187+
.set(occupation).equalToWhenPresent(row::occupation)
188+
.set(addressId).equalToWhenPresent(row::addressId);
185189
}
186190

187191
default int updateByPrimaryKey(PersonRecord row) {
188192
return update(c ->
189-
c.set(firstName).equalTo(row::getFirstName)
190-
.set(lastName).equalTo(row::getLastName)
191-
.set(birthDate).equalTo(row::getBirthDate)
192-
.set(employed).equalTo(row::getEmployed)
193-
.set(occupation).equalTo(row::getOccupation)
194-
.set(addressId).equalTo(row::getAddressId)
195-
.where(id, isEqualTo(row::getId))
193+
c.set(firstName).equalToOrNull(row::firstName)
194+
.set(lastName).equalToOrNull(row::lastName)
195+
.set(birthDate).equalToOrNull(row::birthDate)
196+
.set(employed).equalToOrNull(row::employed)
197+
.set(occupation).equalToOrNull(row::occupation)
198+
.set(addressId).equalToOrNull(row::addressId)
199+
.where(id, isEqualToWhenPresent(row::id))
196200
);
197201
}
198202

199203
default int updateByPrimaryKeySelective(PersonRecord row) {
200204
return update(c ->
201-
c.set(firstName).equalToWhenPresent(row::getFirstName)
202-
.set(lastName).equalToWhenPresent(row::getLastName)
203-
.set(birthDate).equalToWhenPresent(row::getBirthDate)
204-
.set(employed).equalToWhenPresent(row::getEmployed)
205-
.set(occupation).equalToWhenPresent(row::getOccupation)
206-
.set(addressId).equalToWhenPresent(row::getAddressId)
207-
.where(id, isEqualTo(row::getId))
205+
c.set(firstName).equalToWhenPresent(row::firstName)
206+
.set(lastName).equalToWhenPresent(row::lastName)
207+
.set(birthDate).equalToWhenPresent(row::birthDate)
208+
.set(employed).equalToWhenPresent(row::employed)
209+
.set(occupation).equalToWhenPresent(row::occupation)
210+
.set(addressId).equalToWhenPresent(row::addressId)
211+
.where(id, isEqualToWhenPresent(row::id))
208212
);
209213
}
210214
}

0 commit comments

Comments
 (0)