1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.util.mybatis3;
17
18 import java.util.Collection;
19 import java.util.List;
20 import java.util.function.Function;
21 import java.util.function.ToIntBiFunction;
22 import java.util.function.ToIntFunction;
23 import java.util.function.ToLongFunction;
24 import java.util.function.UnaryOperator;
25
26 import org.mybatis.dynamic.sql.BasicColumn;
27 import org.mybatis.dynamic.sql.SqlBuilder;
28 import org.mybatis.dynamic.sql.SqlTable;
29 import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
30 import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
31 import org.mybatis.dynamic.sql.insert.GeneralInsertDSL;
32 import org.mybatis.dynamic.sql.insert.InsertDSL;
33 import org.mybatis.dynamic.sql.insert.MultiRowInsertDSL;
34 import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
35 import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
36 import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
37 import org.mybatis.dynamic.sql.render.RenderingStrategies;
38 import org.mybatis.dynamic.sql.select.CountDSL;
39 import org.mybatis.dynamic.sql.select.CountDSLCompleter;
40 import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
41 import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
42 import org.mybatis.dynamic.sql.select.SelectModel;
43 import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
44 import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
45 import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
46
47
48
49
50
51
52 public class MyBatis3Utils {
53 private MyBatis3Utils() {}
54
55 public static long count(ToLongFunction<SelectStatementProvider> mapper, BasicColumn column, SqlTable table,
56 CountDSLCompleter completer) {
57 return mapper.applyAsLong(count(column, table, completer));
58 }
59
60 public static SelectStatementProvider count(BasicColumn column, SqlTable table, CountDSLCompleter completer) {
61 return countFrom(SqlBuilder.countColumn(column).from(table), completer);
62 }
63
64 public static long countDistinct(ToLongFunction<SelectStatementProvider> mapper, BasicColumn column, SqlTable table,
65 CountDSLCompleter completer) {
66 return mapper.applyAsLong(countDistinct(column, table, completer));
67 }
68
69 public static SelectStatementProvider countDistinct(BasicColumn column, SqlTable table,
70 CountDSLCompleter completer) {
71 return countFrom(SqlBuilder.countDistinctColumn(column).from(table), completer);
72 }
73
74 public static SelectStatementProvider countFrom(SqlTable table, CountDSLCompleter completer) {
75 return countFrom(SqlBuilder.countFrom(table), completer);
76 }
77
78 public static long countFrom(ToLongFunction<SelectStatementProvider> mapper,
79 SqlTable table, CountDSLCompleter completer) {
80 return mapper.applyAsLong(countFrom(table, completer));
81 }
82
83 public static SelectStatementProvider countFrom(CountDSL<SelectModel> start, CountDSLCompleter completer) {
84 return completer.apply(start)
85 .build()
86 .render(RenderingStrategies.MYBATIS3);
87 }
88
89 public static long countFrom(ToLongFunction<SelectStatementProvider> mapper,
90 CountDSL<SelectModel> start, CountDSLCompleter completer) {
91 return mapper.applyAsLong(countFrom(start, completer));
92 }
93
94 public static DeleteStatementProvider deleteFrom(SqlTable table, DeleteDSLCompleter completer) {
95 return completer.apply(SqlBuilder.deleteFrom(table))
96 .build()
97 .render(RenderingStrategies.MYBATIS3);
98 }
99
100 public static int deleteFrom(ToIntFunction<DeleteStatementProvider> mapper,
101 SqlTable table, DeleteDSLCompleter completer) {
102 return mapper.applyAsInt(deleteFrom(table, completer));
103 }
104
105 public static <R> InsertStatementProvider<R> insert(R row, SqlTable table,
106 UnaryOperator<InsertDSL<R>> completer) {
107 return completer.apply(SqlBuilder.insert(row).into(table))
108 .build()
109 .render(RenderingStrategies.MYBATIS3);
110 }
111
112 public static <R> int insert(ToIntFunction<InsertStatementProvider<R>> mapper, R row,
113 SqlTable table, UnaryOperator<InsertDSL<R>> completer) {
114 return mapper.applyAsInt(insert(row, table, completer));
115 }
116
117 public static GeneralInsertStatementProvider generalInsert(SqlTable table,
118 UnaryOperator<GeneralInsertDSL> completer) {
119 return completer.apply(GeneralInsertDSL.insertInto(table))
120 .build()
121 .render(RenderingStrategies.MYBATIS3);
122 }
123
124 public static int generalInsert(ToIntFunction<GeneralInsertStatementProvider> mapper,
125 SqlTable table, UnaryOperator<GeneralInsertDSL> completer) {
126 return mapper.applyAsInt(generalInsert(table, completer));
127 }
128
129 public static <R> MultiRowInsertStatementProvider<R> insertMultiple(Collection<R> records, SqlTable table,
130 UnaryOperator<MultiRowInsertDSL<R>> completer) {
131 return completer.apply(SqlBuilder.insertMultiple(records).into(table))
132 .build()
133 .render(RenderingStrategies.MYBATIS3);
134 }
135
136 public static <R> int insertMultiple(ToIntFunction<MultiRowInsertStatementProvider<R>> mapper,
137 Collection<R> records, SqlTable table, UnaryOperator<MultiRowInsertDSL<R>> completer) {
138 return mapper.applyAsInt(insertMultiple(records, table, completer));
139 }
140
141 public static <R> int insertMultipleWithGeneratedKeys(ToIntBiFunction<String, List<R>> mapper,
142 Collection<R> records, SqlTable table, UnaryOperator<MultiRowInsertDSL<R>> completer) {
143 MultiRowInsertStatementProvider<R> provider = insertMultiple(records, table, completer);
144 return mapper.applyAsInt(provider.getInsertStatement(), provider.getRecords());
145 }
146
147 public static SelectStatementProvider select(BasicColumn[] selectList, SqlTable table,
148 SelectDSLCompleter completer) {
149 return select(SqlBuilder.select(selectList).from(table), completer);
150 }
151
152 public static SelectStatementProvider select(QueryExpressionDSL<SelectModel> start,
153 SelectDSLCompleter completer) {
154 return completer.apply(start)
155 .build()
156 .render(RenderingStrategies.MYBATIS3);
157 }
158
159 public static SelectStatementProvider selectDistinct(BasicColumn[] selectList, SqlTable table,
160 SelectDSLCompleter completer) {
161 return select(SqlBuilder.selectDistinct(selectList).from(table), completer);
162 }
163
164 public static <R> List<R> selectDistinct(Function<SelectStatementProvider, List<R>> mapper,
165 BasicColumn[] selectList, SqlTable table, SelectDSLCompleter completer) {
166 return mapper.apply(selectDistinct(selectList, table, completer));
167 }
168
169 public static <R> List<R> selectList(Function<SelectStatementProvider, List<R>> mapper,
170 BasicColumn[] selectList, SqlTable table, SelectDSLCompleter completer) {
171 return mapper.apply(select(selectList, table, completer));
172 }
173
174 public static <R> List<R> selectList(Function<SelectStatementProvider, List<R>> mapper,
175 QueryExpressionDSL<SelectModel> start, SelectDSLCompleter completer) {
176 return mapper.apply(select(start, completer));
177 }
178
179 public static <R> R selectOne(Function<SelectStatementProvider, R> mapper,
180 BasicColumn[] selectList, SqlTable table, SelectDSLCompleter completer) {
181 return mapper.apply(select(selectList, table, completer));
182 }
183
184 public static <R> R selectOne(Function<SelectStatementProvider, R> mapper,
185 QueryExpressionDSL<SelectModel> start, SelectDSLCompleter completer) {
186 return mapper.apply(select(start, completer));
187 }
188
189 public static UpdateStatementProvider update(SqlTable table, UpdateDSLCompleter completer) {
190 return completer.apply(SqlBuilder.update(table))
191 .build()
192 .render(RenderingStrategies.MYBATIS3);
193 }
194
195 public static int update(ToIntFunction<UpdateStatementProvider> mapper,
196 SqlTable table, UpdateDSLCompleter completer) {
197 return mapper.applyAsInt(update(table, completer));
198 }
199 }