1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package examples.generated.always.mybatis;
17
18 import static examples.generated.always.mybatis.GeneratedAlwaysDynamicSqlSupport.*;
19 import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
20
21 import java.util.Arrays;
22 import java.util.Collection;
23 import java.util.List;
24 import java.util.Optional;
25
26 import org.apache.ibatis.annotations.InsertProvider;
27 import org.apache.ibatis.annotations.Options;
28 import org.apache.ibatis.annotations.Param;
29 import org.apache.ibatis.annotations.Result;
30 import org.apache.ibatis.annotations.ResultMap;
31 import org.apache.ibatis.annotations.Results;
32 import org.apache.ibatis.annotations.SelectProvider;
33 import org.mybatis.dynamic.sql.BasicColumn;
34 import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
35 import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
36 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
37 import org.mybatis.dynamic.sql.update.UpdateDSL;
38 import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
39 import org.mybatis.dynamic.sql.update.UpdateModel;
40 import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
41 import org.mybatis.dynamic.sql.util.mybatis3.CommonUpdateMapper;
42 import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils;
43
44 import examples.generated.always.GeneratedAlwaysRecord;
45
46 public interface GeneratedAlwaysMapper extends CommonUpdateMapper {
47 @SelectProvider(type=SqlProviderAdapter.class, method="select")
48 @Results(id="gaResults", value={
49 @Result(property="id", column="id", id=true),
50 @Result(property="firstName", column="first_name"),
51 @Result(property="lastName", column="last_name"),
52 @Result(property="fullName", column="full_name")
53 })
54 List<GeneratedAlwaysRecord> selectMany(SelectStatementProvider selectStatement);
55
56 @SelectProvider(type=SqlProviderAdapter.class, method="select")
57 @ResultMap("gaResults")
58 Optional<GeneratedAlwaysRecord> selectOne(SelectStatementProvider selectStatement);
59
60 @InsertProvider(type=SqlProviderAdapter.class, method="insert")
61 @Options(useGeneratedKeys=true, keyProperty="row.fullName")
62 int insert(InsertStatementProvider<GeneratedAlwaysRecord> insertStatement);
63
64 @InsertProvider(type=SqlProviderAdapter.class, method="insertMultipleWithGeneratedKeys")
65 @Options(useGeneratedKeys=true, keyProperty="records.fullName")
66 int insertMultiple(@Param("insertStatement") String statement, @Param("records") List<GeneratedAlwaysRecord> records);
67
68 BasicColumn[] selectList =
69 BasicColumn.columnList(id, firstName, lastName, fullName);
70
71 default Optional<GeneratedAlwaysRecord> selectOne(SelectDSLCompleter completer) {
72 return MyBatis3Utils.selectOne(this::selectOne, selectList, generatedAlways, completer);
73 }
74
75 default List<GeneratedAlwaysRecord> select(SelectDSLCompleter completer) {
76 return MyBatis3Utils.selectList(this::selectMany, selectList, generatedAlways, completer);
77 }
78
79 default Optional<GeneratedAlwaysRecord> selectByPrimaryKey(Integer recordId) {
80 return selectOne(c -> c.where(id, isEqualTo(recordId)));
81 }
82
83 default int insert(GeneratedAlwaysRecord row) {
84 return MyBatis3Utils.insert(this::insert, row, generatedAlways, c ->
85 c.map(id).toProperty("id")
86 .map(firstName).toProperty("firstName")
87 .map(lastName).toProperty("lastName")
88 );
89 }
90
91 default int insertMultiple(GeneratedAlwaysRecord...records) {
92 return insertMultiple(Arrays.asList(records));
93 }
94
95 default int insertMultiple(Collection<GeneratedAlwaysRecord> records) {
96 return MyBatis3Utils.insertMultipleWithGeneratedKeys(this::insertMultiple, records, generatedAlways, c ->
97 c.map(id).toProperty("id")
98 .map(firstName).toProperty("firstName")
99 .map(lastName).toProperty("lastName")
100 );
101 }
102
103 default int insertSelective(GeneratedAlwaysRecord row) {
104 return MyBatis3Utils.insert(this::insert, row, generatedAlways, c ->
105 c.map(id).toPropertyWhenPresent("id", row::getId)
106 .map(firstName).toPropertyWhenPresent("firstName", row::getFirstName)
107 .map(lastName).toPropertyWhenPresent("lastName", row::getLastName)
108 );
109 }
110
111 default int update(UpdateDSLCompleter completer) {
112 return MyBatis3Utils.update(this::update, generatedAlways, completer);
113 }
114
115 default int updateByPrimaryKey(GeneratedAlwaysRecord row) {
116 return update(c ->
117 c.set(firstName).equalTo(row::getFirstName)
118 .set(lastName).equalTo(row::getLastName)
119 .where(id, isEqualTo(row::getId))
120 );
121 }
122
123 default int updateByPrimaryKeySelective(GeneratedAlwaysRecord row) {
124 return update(c ->
125 c.set(firstName).equalToWhenPresent(row::getFirstName)
126 .set(lastName).equalToWhenPresent(row::getLastName)
127 .where(id, isEqualTo(row::getId))
128 );
129 }
130
131 static UpdateDSL<UpdateModel> updateSelectiveColumns(GeneratedAlwaysRecord row, UpdateDSL<UpdateModel> dsl) {
132 return dsl.set(id).equalToWhenPresent(row::getId)
133 .set(firstName).equalToWhenPresent(row::getFirstName)
134 .set(lastName).equalToWhenPresent(row::getLastName);
135 }
136 }