基于mybatis的java代码生成存储过程
问题:
项目中目前使用mybatis操作数据库,使用插件(mybatis-generator)自动生成代码,对于增改查,使用存储过程实现了一版本,方便使用。
insert代码生成器用法:
insert_code_generator( in_var_tbl_name [要插入的表名] )
1 DROP PROCEDURE IF EXISTS insert_code_generator;
2 DELIMITER %%
3 CREATE PROCEDURE insert_code_generator(in_var_tbl_name VARCHAR(200))
4 label:BEGIN
5 -- ################################################################################################################
6 -- #################### 支持批量插入:mapper-dao-service生成 select 代码 #########################
7 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
8 -- ################################################################################################################
9 SET group_concat_max_len = 4294967295;
10
11 -- #----------#配置项#-----------------------#
12 -- 表名映射为驼峰形式,tbl_cdk_user_info -> userInfo,默认去除表名的tbl前缀
13 -- SET @noStrInTbl='tbl_cbm';
14 SET @noStrInTbl='tbl';
15
16 -- #----------------------------------------#
17
18
19 SET @in_tbl_name=in_var_tbl_name;
20 SET @in_db_name=DATABASE();
21 if (in_var_tbl_name IS NULL OR in_var_tbl_name='' OR in_var_tbl_name=' ') then
22 SELECT '入参in_var_tbl_name表名不能为空' AS 'error';
23 leave label;
24 END if;
25
26
27
28
29 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
30 -- ########### 生成引用
31 -- 生成service层实体类以备加Dao:CdkmallGoodsApply
32 SET @objName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
33 -- 生成service层实体类以备接Dao: cdkmallGoodsApply
34 SET @objRefName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
35
36 SELECT CONCAT_WS('','/* 新建对象*/\r\n',@objName,' ',@objRefName,'= new ',@objName,'();\r\n\r\n/*设置属性*/\r\n',
37 group_concat(
38 /* cdkmallGoodsApply.setUserUuid(userUuid); */
39 CONCAT_WS( ''
40 ,CONCAT_WS('','/*',c.column_comment,' | ',c.column_type,' | ',if(c.is_nullable='YES','可空','非空'),if(c.extra='','',CONCAT_WS('',' | ',c.extra)),' | ','默认=',ifnull(c.COLUMN_DEFAULT,'null'),' */ \r\n')
41 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
42 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','.set','_',c.column_name), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
43 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','(',c.column_name,');'), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
44 ) SEPARATOR '\r\n'
45 )
46 ) INTO @insert_code
47 FROM
48 information_schema.COLUMNS c
49 WHERE
50 c.table_schema= DATABASE() AND
51 c.TABLE_NAME = @in_tbl_name;
52
53 SET @insert_domain_code='
54 public void insert@objName(@objName @objRefName){
55 int insertResult = 0;
56 try {
57 insertResult = @objRefNameDao.insert(@objRefName);
58 } catch (DuplicateKeyException e) {
59 bizLogger.error(" insert @in_tbl_name duplicateKeyException ,@objRefName : "
60 + @objRefName.toString());
61 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
62 ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate error,bizId=" + BizLogUtils.getValueOfBizId());
63 }
64 if (insertResult != 1) {
65 bizLogger.error("insertResult=" + insertResult + ", insert result != 1 ,@objRefName : "
66 + @objRefName.toString());
67 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
68 ResultInfo.SYS_INNER_ERROR.getDesc() + " insert fail [insertResult,bizId]="+insertResult+ BizLogUtils.getValueOfBizId());
69 }
70 }
71 ';
72
73 SELECT REPLACE(@insert_domain_code,'@objName',@objName) INTO @insert_domain_code;
74 SELECT REPLACE(@insert_domain_code,'@objRefName',@objRefName) INTO @insert_domain_code;
75 SELECT REPLACE(@insert_domain_code,'@in_tbl_name',@in_tbl_name) INTO @insert_domain_code;
76
77
78 -- 引入所有的domain 和dao -- 开始 --
79 SELECT
80 GROUP_CONCAT(
81 CONCAT_WS('','@Autowired\r\n','private '
82 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain '
83 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain;\r\n')
84 SEPARATOR '\r\n'
85 ) INTO @autowired_all_domain
86
87 FROM information_schema.`TABLES` t
88 WHERE TABLE_SCHEMA=DATABASE()and TABLE_NAME NOT IN('fixed_col_table');
89
90 SELECT
91 GROUP_CONCAT(
92 CONCAT_WS('','@Autowired\r\n','private '
93 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao '
94 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao;\r\n')
95 SEPARATOR '\r\n'
96 ) INTO @autowired_all_dao
97
98 FROM information_schema.`TABLES` t
99 WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME NOT IN('fixed_col_table') ;
100
101
102
103 -- #############################################################
104 -- 以下为动态批量insert需要使用
105 -- #############################################################
106
107 DROP TABLE if EXISTS fixed_col_table;
108
109 CREATE table if not exists fixed_col_table(
110 col VARCHAR(256) NOT NULL COMMENT '字段名',
111 col_type VARCHAR(256) COMMENT '字段类型,static,dynamic,list',
112 data_type VARCHAR(256) COMMENT '数据类型;如:int',
113 jdbc_type VARCHAR(256) COMMENT 'jdbc类型:int->INTEGER,VARCHAR',
114 java_type VARCHAR(256) COMMENT 'java类型:datetime - > date,tinyint -> Byte',
115 col_for_query VARCHAR(256) COMMENT 'idForQuery',
116 col_for_query_jdbc VARCHAR(256) COMMENT '#{idForQueryjdbcType=INTEGER} ',
117 col_comment VARCHAR(512) COMMENT '字段注释'
118 );
119
120 INSERT INTO fixed_col_table (col,data_type)
121 SELECT
122 t1.column_name,t1.data_type
123 FROM
124 information_schema.COLUMNS t1
125 WHERE
126 t1.table_schema= @in_db_name AND
127 t1.TABLE_NAME = @in_tbl_name
128 ;
129
130 -- 转驼峰
131 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
132 ,'');
133
134
135
136 -- 转换成jdbc类型
137 UPDATE fixed_col_table SET jdbc_type=
138 case data_type
139 when 'datetime' then 'TIMESTAMP'
140 when 'tinyint' then 'TINYINT'
141 when 'bigint' then 'BIGINT'
142 when 'int' then 'INTEGER'
143 when 'float' then 'REAL'
144 when 'varchar' then 'VARCHAR'
145 END;
146
147 -- java类型转换
148 UPDATE fixed_col_table SET java_type=
149 case data_type
150 when 'datetime' then 'Date'
151 when 'tinyint' then 'Byte'
152 when 'bigint' then 'Long'
153 when 'int' then 'Integer'
154 when 'float' then 'REAL'
155 when 'varchar' then 'String'
156 END;
157
158
159 -- 组成jdbc字符串:id --> #{idForQueryjdbcType=INTEGER}
160 UPDATE fixed_col_table SET col_for_query_jdbc=CONCAT_WS('','#{item.',col_for_query,',jdbcType=',jdbc_type,'} ');
161
162 /*
163 col col_type data_type jdbc_type java_type col_for_query col_for_query_jdbc col_comment
164 name static varchar VARCHAR String nameForQuery #{nameForQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
165 name dynamic varchar VARCHAR String nameForDynamicQuery #{nameForDynamicQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
166 create_time list datetime TIMESTAMP List<Date> createTimeForQueryList #{createTimeForQueryList,jdbcType=TIMESTAMP} 创建时间 | 非空 | 无索引
167
168 */
169
170
171 -- select * from fixed_col_table;
172
173 SELECT
174 GROUP_CONCAT(t1.column_name SEPARATOR ', ') INTO @allColumnList
175 FROM
176 information_schema.COLUMNS t1
177 WHERE
178 t1.table_schema= @in_db_name AND
179 t1.TABLE_NAME = @in_tbl_name
180 ;
181
182 -- #{id,jdbcType=INTEGER} ,#{name,jdbcType=VARCHAR} ,#{status,jdbcType=TINYINT} ,#{validStartTime,jdbcType=TIMESTAMP}
183 SELECT GROUP_CONCAT(col_for_query_jdbc) INTO @jdbcColumnList
184 FROM fixed_col_table;
185
186 -- select @jdbcColumnList;
187
188 -- id,name,status,valid_start_time,valid_end_time,create_time,last_update_time
189 SELECT GROUP_CONCAT(col) INTO @allColumnList
190 FROM fixed_col_table;
191
192 -- select @allColumnList;
193
194 SET @mapper_code='
195 @Insert({
196 "<script> ",
197 "insert into @in_tbl_name ( @allColumnList ) values",
198 "<foreach collection=\'@objRefNameList\' item=\'item\' index=\'index\' open=\'(\' separator=\'),(\' close=\')\'>",
199 "@jdbcColumnList ",
200 "</foreach>",
201 "</script>"
202 })
203 int batchInsert(@Param("@objRefNameList") List<@objName> @objRefNameList);
204 ';
205
206 SELECT REPLACE(@mapper_code,'@in_tbl_name',@in_tbl_name) INTO @mapper_code;
207 SELECT REPLACE(@mapper_code,'@allColumnList',@allColumnList) INTO @mapper_code;
208 SELECT REPLACE(@mapper_code,'@objRefName',@objRefName) INTO @mapper_code;
209 SELECT REPLACE(@mapper_code,'@jdbcColumnList',@jdbcColumnList) INTO @mapper_code;
210 SELECT REPLACE(@mapper_code,'@objName',@objName) INTO @mapper_code;
211
212 -- SELECT @mapper_code;
213
214
215 SET @dao_code='
216 public int batchInsert(List<@objName> @objRefNameList){
217 if(@objRefNameList == null || @objRefNameList.size()==0){
218 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",batch insert empty ,bizId="+BizLogUtils.getValueOfBizId());
219 }
220 return mapper.batchInsert(@objRefNameList);
221 }
222 ';
223
224 SELECT REPLACE(@dao_code,'@objName',@objName) INTO @dao_code;
225 SELECT REPLACE(@dao_code,'@objRefName',@objRefName) INTO @dao_code;
226
227 -- SELECT @dao_code;
228
229 SET @domain_code='
230 public void batchInsert@objName(){
231 int insertResult = 0;
232 List<@objName> @objRefNameList = new ArrayList<>();
233
234 for(int i=0;i<1;i++){
235 @insert_code
236 @objRefNameList.add( @objRefName);
237 }
238
239 try {
240 insertResult = @objRefNameDao.batchInsert(@objRefNameList);
241 } catch (DuplicateKeyException e) {
242 bizLogger.error(" batchInsert @in_tbl_name duplicateKeyException ");
243 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
244 ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate error,bizId=" + BizLogUtils.getValueOfBizId(),e);
245 }
246 if (insertResult != @objRefNameList.size()) {
247 bizLogger.error("insertResult=" + insertResult + ", insert result != 1 ");
248 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
249 ResultInfo.SYS_INNER_ERROR.getDesc() + " insert fail [insertResult,bizId]="+insertResult+ BizLogUtils.getValueOfBizId());
250 }
251 }
252 ';
253 SELECT REPLACE(@domain_code,'@insert_code',@insert_code) INTO @domain_code;
254 SELECT REPLACE(@domain_code,'@objName',@objName) INTO @domain_code;
255 SELECT REPLACE(@domain_code,'@objRefName',@objRefName) INTO @domain_code;
256 SELECT REPLACE(@domain_code,'@in_tbl_name',@in_tbl_name) INTO @domain_code;
257
258 -- SELECT @domain_code;
259
260
261
262 -- #########################################################################################
263 -- 打印真正的语句
264 -- #########################################################################################
265
266 SET @insert_sql_help='
267 高级insert示例:
268 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
269 1:replace into tbl_name(col_name, ...) values(...)
270 如果存在primary or unique相同的记录,则先删除掉。再插入新记录。REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和
271
272 2:insert ignore into tbl_name (...) values(...)
273 当插入数据时,如出现错误时,如重复数据(PrimaryKey,或者unique索引),将不返回错误,只以警告形式返回。
274 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过当前插入的这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的
275
276 3:INSERT INTO tablename(...) VALUES(...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...;
277 INSERT INTO books (...) VALUES (...) ON duplicate KEY UPDATE id = id 等效于 ignore
278 没有重复的执行插入,重复了执行后面更新语句
279 解决问题:以前是找到某条记录,找到就是更新,找不到就是插入,要写两条语句,现在一条语句就搞定了
280
281 4:INSERT INTO books (...) values (...) WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)
282 如果没有id=1的记录就插入,否则什么都不做
283 ';
284
285
286 SELECT '代码','用途' LIMIT 0
287 UNION ALL
288 SELECT @insert_code , '实体类set方法'
289 UNION ALL
290 SELECT @insert_domain_code , '单条插入domain层方法'
291 UNION ALL
292 SELECT @mapper_code ,'批量插入mapper层'
293 UNION ALL
294 SELECT @dao_code ,'批量插入dao层'
295 UNION ALL
296 SELECT @domain_code ,'批量插入domain层'
297 UNION ALL
298 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Dao ',@objRefName,'Dao;\r\n') ,'引入dao'
299 UNION ALL
300 SELECT CONCAT_WS('',' int insertResult',' = ',@objRefName,'Dao.insert','(',@objRefName,');') , '调用dao'
301 UNION ALL
302 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Domain ',@objRefName,'Domain;\r\n') , '引入domain'
303 UNION ALL
304 SELECT CONCAT_WS('',@objRefName,'Domain.insert','(',@objRefName,');') , '调用domain'
305 UNION ALL
306 SELECT @autowired_all_domain , '引用所有domain'
307 UNION all
308 SELECT @autowired_all_dao , '引入所有dao'
309 UNION ALL
310 SELECT ' @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") \r\n int insert(@objName @objRefName);' , '返回自增键刚插入的新值,放在mapper层insert方法上'
311 UNION ALL
312 SELECT @insert_sql_help ,'高级insert示例'
313
314 ;
315
316 drop table fixed_col_table;
317
318 END %%
319 DELIMITER ;
insert_code_generator
select代码生成器用法:
select_code_generator
( in_var_tbl_name [要查询的表]
,in_var_return_type [返回类型,list|obj]
,in_static_col_list [静态查询条件,字段列表,形如:"id,name,code"]
,in_dynamic_col_list [动态查询条件,字段列表,形如:"id,name,code"]
,in_list_col_list [动态集合in查询条件字段列表,形如:"id,name,code"]
)
1 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
2 DROP PROCEDURE IF EXISTS select_code_generator;
3 DELIMITER %%
4 CREATE PROCEDURE select_code_generator(in_var_tbl_name VARCHAR(200),in_var_return_type VARCHAR(200),in_static_col_list VARCHAR(1024),in_dynamic_col_list VARCHAR(1024),in_list_col_list VARCHAR(1024) )
5 label:BEGIN
6 -- ################################################################################################################
7 -- #################### 支持动态sql:mapper-dao-service生成 select 代码 #############################
8 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
9 -- ################################################################################################################
10
11 SET group_concat_max_len = 4294967295;
12
13 -- #----------#配置项#-----------------------#
14 -- 表名映射为驼峰形式,tbl_cdk_user_info -> userInfo,默认去除表名的tbl前缀
15 -- SET @noStrInTbl='tbl_cbm';
16 SET @noStrInTbl='tbl';
17
18 -- #----------------------------------------#
19
20
21 SET @in_tbl_name=in_var_tbl_name;
22 SET @in_db_name=DATABASE();
23
24
25
26 -- #----------#配置项#-----------------------#
27
28 if(in_var_return_type IS NULL OR in_var_return_type='' OR in_var_return_type=' ' OR in_var_return_type='list' OR in_var_return_type='list|obj') then
29 SET @return_type_flag= 'list'; -- 返回结果配置为obj或者list
30 ELSE
31 SET @return_type_flag='obj';
32 END if;
33
34 SET @in_tbl_name=in_var_tbl_name;
35
36
37 -- ########### 生成引用
38 -- 生成service层实体类以备加Dao:CdkmallGoodsApply
39 SET @objName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
40 -- 生成service层实体类以备接Dao: cdkmallGoodsApply
41 SET @objRefName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
42
43
44 -- 返回值类型 WindIssueCardTask 或者 List<WindIssueCardTask>
45 SELECT if(@return_type_flag='list',CONCAT_WS('',@objRefName,'List'),@objRefName) INTO @return_type_ref;
46 SELECT if(@return_type_flag='list',CONCAT_WS('',' List<',@objName,'> '),@objName) INTO @return_type;
47
48
49
50 DROP TABLE if EXISTS fixed_col_table;
51
52 CREATE table if not exists fixed_col_table(
53 col VARCHAR(256) NOT NULL COMMENT '字段名',
54 col_type VARCHAR(256) COMMENT '字段类型,static,dynamic,list',
55 data_type VARCHAR(256) COMMENT '数据类型;如:int',
56 jdbc_type VARCHAR(256) COMMENT 'jdbc类型:int->INTEGER,VARCHAR',
57 java_type VARCHAR(256) COMMENT 'java类型:datetime - > date,tinyint -> Byte',
58 col_for_query VARCHAR(256) COMMENT 'idForQuery',
59 col_for_query_jdbc VARCHAR(256) COMMENT '#{idForQueryjdbcType=INTEGER} ',
60 col_comment VARCHAR(512) COMMENT '字段注释'
61 );
62
63
64
65
66 if(in_static_col_list IS NULL OR in_static_col_list='static_query_col' OR in_static_col_list='' OR in_static_col_list=' ' OR in_static_col_list=' ') then
67 SET in_static_col_list= null;
68 ELSE
69 -- 插入静态字段
70 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_static_col_list, ',',CONCAT_WS('',"','static'),('")),"','static')");
71 PREPARE stmt FROM @exec_sql;
72 EXECUTE stmt;
73 DEALLOCATE PREPARE stmt;
74 END if;
75
76 if(in_dynamic_col_list IS NULL OR in_dynamic_col_list='dynamic_query_col' OR in_dynamic_col_list='' OR in_dynamic_col_list=' ' OR in_dynamic_col_list=' ') then
77 SET in_dynamic_col_list= null;
78 ELSE
79 -- 插入动态字段
80 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_dynamic_col_list, ',',CONCAT_WS('',"','dynamic'),('")),"','dynamic')");
81 PREPARE stmt FROM @exec_sql;
82 EXECUTE stmt;
83 DEALLOCATE PREPARE stmt;
84 END if;
85
86 if(in_list_col_list IS NULL OR in_list_col_list='list_query_col' OR in_list_col_list='' OR in_list_col_list=' ' OR in_list_col_list=' ') then
87 SET in_static_col_list= null;
88 ELSE
89 -- 插入list集合字段
90 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_list_col_list, ',',CONCAT_WS('',"','list'),('")),"','list')");
91 PREPARE stmt FROM @exec_sql;
92 EXECUTE stmt;
93 DEALLOCATE PREPARE stmt;
94 END if;
95
96
97 /* 打印查询字段的驼峰格式:IdAndAmountAndApplyNoAndUuid */
98 SELECT GROUP_CONCAT( tt SEPARATOR 'And') INTO @byname
99 FROM
100 (
101 SELECT
102 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','_',col), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') AS tt
103 FROM fixed_col_table) t;
104
105 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
106 -- 将col_for_query字段转成驼峰:create_time --> createTimeForQuery
107 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
108 ,'ForQuery') WHERE col_type='static';
109 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
110 ,'ForDynamicQuery') WHERE col_type='dynamic';
111 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
112 ,'ForQueryList') WHERE col_type='list';
113
114
115 -- 更新字段类型id --> int ,name -->varchar
116 UPDATE fixed_col_table SET data_type =
117 (
118 SELECT t1.data_type
119 FROM
120 information_schema.COLUMNS t1
121 WHERE
122 t1.table_schema= @in_db_name AND
123 t1.TABLE_NAME = @in_tbl_name
124 and t1.column_name =col
125 );
126
127 -- 更新注释字段 --> 创建时间 | 非空 |
128 UPDATE fixed_col_table SET col_comment =
129 (
130 SELECT CONCAT_WS('',t1.column_comment,' | ',if(t1.is_nullable='YES','可空','非空'),' | ',case t1.COLUMN_KEY when 'PRI' then '主键' else '' end)
131 FROM
132 information_schema.COLUMNS t1
133 WHERE
134 t1.table_schema= @in_db_name AND
135 t1.TABLE_NAME = @in_tbl_name
136 and t1.column_name =col
137 );
138 -- 更新注释字段 --> | 唯一键 | uni_city_info_name(city_name)
139 UPDATE fixed_col_table SET col_comment = CONCAT_WS('',col_comment,
140 IFNULL(
141 (SELECT
142 CONCAT_WS('',' | ',IF(t.non_unique = 0,'唯一键','索引'),' | ', t.index_name,'(',
143 (
144 SELECT
145 GROUP_CONCAT(tt.column_name ORDER BY tt.seq_in_index)
146 FROM
147 information_schema.statistics tt
148 WHERE tt.table_schema = DATABASE() AND tt.INDEX_NAME=t.index_name AND tt.TABLE_NAME=t.table_name
149 )
150 ,')')
151 FROM
152 information_schema.statistics t
153 WHERE t.table_schema = @in_db_name
154 AND t.TABLE_NAME = @in_tbl_name
155 AND t.COLUMN_NAME=col
156 )
157 ,'无索引')
158 );
159
160
161 /*
162 SELECT
163 IF(t.non_unique = 0,'唯一键','索引') AS 'index_type',
164 t.TABLE_NAME AS 'table_name',
165 t.index_name AS 'index_name',
166 t.COLUMN_NAME AS 'column_name',
167 t.seq_in_index AS 'column_seq',
168 (
169 SELECT
170 GROUP_CONCAT(tt.column_name ORDER BY tt.seq_in_index)
171 FROM
172 information_schema.statistics tt
173 WHERE tt.table_schema = DATABASE() AND tt.INDEX_NAME=t.index_name AND tt.TABLE_NAME=t.table_name
174 ) AS cols
175 FROM
176 information_schema.statistics t
177 WHERE t.table_schema = @in_db_name
178 AND t.TABLE_NAME = @in_tbl_name
179 */
180
181
182 -- 转换成jdbc类型
183 UPDATE fixed_col_table SET jdbc_type=
184 case data_type
185 when 'datetime' then 'TIMESTAMP'
186 when 'tinyint' then 'TINYINT'
187 when 'bigint' then 'BIGINT'
188 when 'int' then 'INTEGER'
189 when 'varchar' then 'VARCHAR'
190 END;
191
192 -- java类型转换
193 UPDATE fixed_col_table SET java_type=
194 case data_type
195 when 'datetime' then 'Date'
196 when 'tinyint' then 'Byte'
197 when 'bigint' then 'Long'
198 when 'int' then 'Integer'
199 when 'varchar' then 'String'
200 END
201 WHERE col_type!='list';
202
203 -- java如果是集合类型
204 UPDATE fixed_col_table SET java_type=
205 case data_type
206 when 'datetime' then 'List<Date>'
207 when 'tinyint' then 'List<Byte>'
208 when 'bigint' then 'List<Long>'
209 when 'int' then 'List<Integer>'
210 when 'varchar' then 'List<String>'
211 END
212 WHERE col_type='list';
213
214 -- 组成jdbc字符串:id --> #{idForQueryjdbcType=INTEGER}
215 UPDATE fixed_col_table SET col_for_query_jdbc=CONCAT_WS('','#{',col_for_query,',jdbcType=',jdbc_type,'} ');
216
217 /*
218 col col_type data_type jdbc_type java_type col_for_query col_for_query_jdbc col_comment
219 name static varchar VARCHAR String nameForQuery #{nameForQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
220 name dynamic varchar VARCHAR String nameForDynamicQuery #{nameForDynamicQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
221 create_time list datetime TIMESTAMP List<Date> createTimeForQueryList #{createTimeForQueryList,jdbcType=TIMESTAMP} 创建时间 | 非空 | 无索引
222
223 */
224
225 -- SELECT * from fixed_col_table;
226
227
228 --
229 /* 列举所有字段 @allColumnList
230 id, uuid, create_time, last_update_time, mall_goods_uuid, apply_no, sugar_biz_order_id, payment_pay_no, pay_info, expire_time, trade_type, status, refund_flag, refund_status, refund_accept_time, user_uuid, mall_uuid, amount
231 */
232 SELECT
233 GROUP_CONCAT(CONCAT('t.',t1.column_name,' as ',t1.column_name) SEPARATOR ', ') INTO @allColumnList
234 FROM
235 information_schema.COLUMNS t1
236 WHERE
237 t1.table_schema= @in_db_name AND
238 t1.TABLE_NAME = @in_tbl_name
239 ;
240
241
242 -- ################################################################################################################
243 -- ################################ 静态mapper层 ####################################################
244 -- ################################################################################################################
245
246 /* 查询条件字段 @queryList
247 id=#{idForQuery,jdbcType=BIGINT} and amount=#{amountForQuery,jdbcType=INTEGER} and apply_no=#{applyNoForQuery,jdbcType=VARCHAR}
248 */
249
250 SELECT
251 CONCAT('"' ,GROUP_CONCAT(CONCAT('and ',col,'=',col_for_query_jdbc) SEPARATOR ' '),'",\r\n') INTO @queryList
252 FROM fixed_col_table WHERE col_type='static';
253
254 -- SELECT @queryList;
255
256
257 -- ################################################################################################################
258 -- ################################ 动态if mapper层 #################################################
259 -- "<if test = 'statusForQuery != null'> and status = #{statusForQuery,jdbcType = DECIMAL} </if> ",
260 -- ################################################################################################################
261
262 /*
263 "<if test = 'idForQuery != null'> AND id= #{idForQuery,jdbcType=INTEGER} </if>",
264 "<if test = 'nameForQuery != null'> AND name= #{nameForQuery,jdbcType=VARCHAR} </if>",
265 "<if test = 'createTimeForQuery != null'> AND create_time= #{createTimeForQuery,jdbcType=TIMESTAMP} </if>",
266 */
267 SET @var_if_test_statement="\"<if test = '{1}col_for_query '> AND {2}col= {3}col_for_query_jdbc </if>\",\r\n";
268
269 SELECT
270 GROUP_CONCAT(replace(replace(REPLACE(@var_if_test_statement,'{1}col_for_query',case data_type when 'varchar' then CONCAT(col_for_query,'!=null and ',col_for_query,'!=''') ELSE CONCAT(col_for_query,'!=null') END),
271 '{3}col_for_query_jdbc',col_for_query_jdbc),'{2}col',col) SEPARATOR '') INTO @dynamicQueryList
272 FROM fixed_col_table WHERE col_type='dynamic';
273
274 -- SELECT @dynamicQueryList;
275
276 -- SELECT * from fixed_col_table;
277
278 -- ################################################################################################################
279 -- ################################ 动态list mapper层 #################################################
280 /*
281 "<if test = 'forumIdList != null and forumIdList.size() > 0'> and id in " ,
282 " <foreach collection='forumIdList' item='item' index='index' open='(' separator=',' close=')'> " ,
283 " #{item,jdbcType=NUMERIC} " ,
284 " </foreach> " ,
285 "</if>" ,
286 */
287 -- ################################################################################################################
288
289 SET @var_list_test_statement="\"<if test = '{1}col_for_query != null and {1}col_for_query.size() > 0'> AND {2}col IN \" ,
290 \" <foreach collection='{1}col_for_query' item='item' index='index' open='(' separator=',' close=')'> \" ,
291 \" {3}col_for_query_jdbc \" ,
292 \" </foreach> \" ,
293 \"</if>\" ,";
294
295 SELECT
296 GROUP_CONCAT(replace(replace(REPLACE(@var_list_test_statement,'{1}col_for_query',col_for_query),'{3}col_for_query_jdbc',replace(col_for_query_jdbc,col_for_query,'item')),'{2}col',col) SEPARATOR '\r\n') INTO @listQueryList
297 FROM fixed_col_table WHERE col_type='list';
298
299
300 -- SELECT @listQueryList;
301
302 SET @mapper_sql='@Select({
303 "<script> ",
304 "select @allColumnList ",
305 "from @in_tbl_name t ",
306 "<where> ",
307 @queryList@dynamicQueryList@listQueryList
308 "</where> ",
309 "</script>"
310 })';
311
312 -- SELECT @queryList;
313
314 SELECT REPLACE(@mapper_sql,'@allColumnList',IFNULL(@allColumnList,'')) INTO @mapper_sql;
315 SELECT REPLACE(@mapper_sql,'@in_tbl_name',IFNULL(@in_tbl_name,'')) INTO @mapper_sql;
316 SELECT REPLACE(@mapper_sql,'@queryList',IFNULL(@queryList,'')) INTO @mapper_sql;
317 SELECT REPLACE(@mapper_sql,'@dynamicQueryList',IFNULL(@dynamicQueryList,'')) INTO @mapper_sql;
318 SELECT REPLACE(@mapper_sql,'@listQueryList',IFNULL(@listQueryList,'')) INTO @mapper_sql;
319
320 -- SELECT @mapper_sql;
321
322
323 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
324 /* 查询字段的参数形式列表 @queryparamList
325 @Param("idForQuery") Integer idForQuery , @Param("createTimeForQuery") Date createTimeForQuery , @Param("idForDynamicQuery") Integer idForDynamicQuery , @Param("idForQueryList") List<Integer> idForQueryList
326 */
327
328 SELECT
329 GROUP_CONCAT(CONCAT('@Param("',col_for_query,'") ',java_type,' ',col_for_query)SEPARATOR ' , ') INTO @queryparamList
330 FROM fixed_col_table ;
331
332 -- SELECT @queryparamList;
333
334 -- mapper层代码模板
335 SET @mapper_code=
336 '@mapper_sql
337 @return_type selectBy@byname(@queryparamList);';
338
339 SELECT REPLACE(@mapper_code,'@mapper_sql',IFNULL(@mapper_sql,'')) INTO @mapper_code;
340 SELECT REPLACE(@mapper_code,'@return_type',IFNULL(@return_type,'')) INTO @mapper_code;
341 SELECT REPLACE(@mapper_code,'@byname',IFNULL(@byname,'')) INTO @mapper_code;
342 SELECT REPLACE(@mapper_code,'@queryparamList',IFNULL(@queryparamList,'')) INTO @mapper_code;
343
344 -- SELECT @mapper_code;
345
346 -- ################################################################################################################
347 -- ################################ dao层需要的 ########################################################
348 -- ################################################################################################################
349
350 /*
351 @dao_type_queryparamList :
352 Integer idForQuery,String nameForQuery,Integer idForDynamicQuery,Date createTimeForDynamicQuery,List<Date> lastUpdateTimeForQueryList
353
354 @dao_queryparamList:
355 idForQuery,nameForQuery,idForDynamicQuery,createTimeForDynamicQuery,lastUpdateTimeForQueryList
356
357 */
358 SELECT
359 GROUP_CONCAT(col_for_query) INTO @dao_queryparamList
360 FROM fixed_col_table ;
361
362 SELECT
363 GROUP_CONCAT(CONCAT(java_type,' ',col_for_query)) INTO @dao_type_queryparamList
364 FROM fixed_col_table ;
365 -- select @dao_type_queryparamList;
366 -- select @dao_queryparamList;
367
368 -- dao层代码模板
369 SET @dao_code=
370 'public @return_type selectBy@byname(@dao_type_queryparamList){
371 return mapper.selectBy@byname(@dao_queryparamList);
372 }';
373 SELECT REPLACE(@dao_code,'@return_type',@return_type) INTO @dao_code;
374 SELECT REPLACE(@dao_code,'@byname',@byname) INTO @dao_code;
375 SELECT REPLACE(@dao_code,'@dao_type_queryparamList',@dao_type_queryparamList) INTO @dao_code;
376 SELECT REPLACE(@dao_code,'@dao_queryparamList',@dao_queryparamList) INTO @dao_code;
377
378 -- SELECT @dao_code;
379
380 -- ################################################################################################################
381 -- ################################ domain层需要的 ########################################################
382 -- ################################################################################################################
383
384 -- 打印注释:/* uuidForQuery | String | 逻辑主键 | 非空 | 唯一键 */
385 SELECT
386 GROUP_CONCAT(concat(col_for_query,' | ',java_type,' | ',col_comment) SEPARATOR '\r\n') INTO @comment_str
387 FROM fixed_col_table ;
388
389 -- select @comment_str;
390
391 -- if(faceIpList == null ||faceIpList.size()==0)
392 SELECT
393 if
394 (@return_type_flag='list'
395 ,CONCAT_WS('','if(',@return_type_ref,' == null ||',@return_type_ref,'.size()==0)')
396 ,CONCAT_WS('','if(',@return_type_ref,' == null)')
397 ) INTO @if_judge;
398
399 -- idForQuery+","+nameForQuery+","+idForDynamicQuery+","+createTimeForDynamicQuery+","+lastUpdateTimeForQueryList
400 select REPLACE(@dao_queryparamList,',','+","+') INTO @if_params_list;
401
402 SET @domain_code=
403 '/*
404 @comment_str
405 */
406 public @return_type getBy@byname(@dao_type_queryparamList){
407 @return_type @return_type_ref = @objRefNameDao.selectBy@byname(@dao_queryparamList);
408 @if_judge {
409 bizLogger.warn("select @in_tbl_name result is null or size=0 [@dao_queryparamList] : " + @if_params_list);
410 throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
411 }
412 return @return_type_ref;
413 }
414 ';
415 SELECT REPLACE(@domain_code,'@comment_str',@comment_str) INTO @domain_code;
416 SELECT REPLACE(@domain_code,'@return_type_ref',@return_type_ref) INTO @domain_code;
417 SELECT REPLACE(@domain_code,'@return_type',@return_type) INTO @domain_code;
418 SELECT REPLACE(@domain_code,'@byname',@byname) INTO @domain_code;
419 SELECT REPLACE(@domain_code,'@dao_type_queryparamList',@dao_type_queryparamList) INTO @domain_code;
420 SELECT REPLACE(@domain_code,'@dao_queryparamList',@dao_queryparamList) INTO @domain_code;
421 SELECT REPLACE(@domain_code,'@objRefName',@objRefName) INTO @domain_code;
422 SELECT REPLACE(@domain_code,'@if_params_list',@if_params_list) INTO @domain_code;
423 SELECT REPLACE(@domain_code,'@if_judge',@if_judge) INTO @domain_code;
424 SELECT REPLACE(@domain_code,'@in_tbl_name',@in_tbl_name) INTO @domain_code;
425
426 -- SELECT @domain_code;
427
428 -- SELECT * from fixed_col_table;
429
430
431
432 -- 引入所有的domain 和dao -- 开始 --
433 SELECT
434 GROUP_CONCAT(
435 CONCAT_WS('','@Autowired\r\n','private '
436 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain '
437 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain;\r\n')
438 SEPARATOR '\r\n'
439 ) INTO @autowired_all_domain
440
441 FROM information_schema.`TABLES` t
442 WHERE TABLE_SCHEMA=DATABASE()and TABLE_NAME NOT IN('fixed_col_table');
443
444 SELECT
445 GROUP_CONCAT(
446 CONCAT_WS('','@Autowired\r\n','private '
447 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao '
448 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao;\r\n')
449 SEPARATOR '\r\n'
450 ) INTO @autowired_all_dao
451
452 FROM information_schema.`TABLES` t
453 WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME NOT IN('fixed_col_table') ;
454
455 -- 引入所有的domain 和dao -- 结束 --
456
457
458
459 -- ################################################################################################################
460 -- ################################ 打印语句 ########################################################
461 -- ################################################################################################################
462
463 SET @cacheable_code='
464 cacheable的使用方式
465 Mapper层:
466 @Select({
467 "select",
468 " para_value",
469 "from tbl_cdkmall_sys_para where para_key=#{paraKey,jdbcType=VARCHAR}"
470 })
471 String getSysPara(String paraKey);
472
473 dao层
474 // 查询系统配置表的固定模板
475 @Cacheable(value = "{FM_spa_cdkmall_getSysPara}", key = "#p0", unless = "#result == null")
476 public String getSysPara(String paraKey) {
477 return mapper.getSysPara(paraKey);
478 }
479
480 @Cacheable(value = "{FM_cdk_parnter_escrow_getSysPara}", key = "#partnerNo+"_"+#paraKey+"_"+#paraIndex", unless = "#result == null")
481 public String getSysPara(String partnerNo,String paraKey,String paraIndex) {
482 return mapper.getSysPara( partnerNo, paraKey, paraIndex);
483 }
484 ';
485
486 SET @dynamic_code_templ="
487 日期转换:
488 select STR_TO_DATE('1998-03-12-01-01-01','%Y-%m-%d-%H-%i-%s') ; 字符串转日期
489 select DATE_FORMAT(NOW(),'%Y-%m-%d-%H-%i-%s'); 日期转字符串
490
491 大于小于特殊符号:< lt; | > gt;
492 <if test='startTime!=null and startTime!='''> and a.create_time >= #{startTime,jdbcType = TIMESTAMP}</if>
493 <if test='endTime!=null and endTime!='''> and a.create_time <= #{endTime,jdbcType = TIMESTAMP}</if>
494
495 判断空及空字符串,模糊查询:
496 <if test='xx!=null and xx!='''> xx like concat('%',#{xx,jdbcType = VARCHAR},'%')
497
498 手动分页:
499 limit (page-1)*size,size; PAGE>=1,第一页=1
500 size=10
501 PAGE (PAGE-1)*10
502 1 0
503 2 10
504 3 20
505 ";
506
507
508 SELECT '代码','功能' LIMIT 0
509 UNION ALL
510 SELECT @mapper_code , 'mapper层方法'
511 UNION all
512 SELECT @dao_code , 'dao层方法'
513 UNION all
514 SELECT @domain_code , 'domain层方法'
515 UNION all
516 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Dao ',@objRefName,'Dao;\r\n') , '引入dao'
517 UNION all
518 SELECT CONCAT_WS('','/*\r\n',@comment_str,'*/','\r\n',@return_type,' ',@return_type_ref,' = ',@objRefName,'Dao.selectBy',@byname,'(',@dao_queryparamList,');') , '调用dao'
519 UNION all
520 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Domain ',@objRefName,'Domain;\r\n') , '引入domain'
521 UNION all
522 SELECT CONCAT_WS('','/*\r\n',@comment_str,'*/','\r\n',@return_type,' ',@return_type_ref,' = ',@objRefName,'Domain.selectBy',@byname,'(',@dao_queryparamList,');') , '调用domain'
523 UNION all
524 SELECT @autowired_all_domain , '引用所有domain'
525 UNION all
526 SELECT @autowired_all_dao , '引入所有dao'
527 UNION ALL
528 SELECT @dynamic_code_templ ,'动态参考语句'
529 UNION ALL
530 SELECT @cacheable_code ,'Cacheable参考使用方法';
531
532 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
533 DROP TABLE if EXISTS fixed_col_table;
534
535 END %%
536 DELIMITER ;
select_code_generator
update代码生成器用法:
update_code_generator
( in_var_tbl_name [要查询的表]
,in_var_update_col_list [要更新的字段列表]
,in_var_dynamic_update_col_list [要动态更新的字段列表]
,in_static_col_list [静态查询条件,字段列表,形如:"id,name,code"]
,in_dynamic_col_list [动态查询条件,字段列表,形如:"id,name,code"]
,in_list_col_list [动态集合in查询条件字段列表,形如:"id,name,code"]
)
1 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
2 DROP PROCEDURE IF EXISTS update_code_generator;
3 DELIMITER %%
4 CREATE PROCEDURE update_code_generator(in_var_tbl_name VARCHAR(200),in_var_update_col_list VARCHAR(1024),in_var_dynamic_update_col_list VARCHAR(1024),in_static_col_list VARCHAR(1024),in_dynamic_col_list VARCHAR(1024),in_list_col_list VARCHAR(1024) )
5
6 label:BEGIN
7 -- ################################################################################################################
8 -- #################### 支持动态sql : #########################################
9 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
10 -- ################################################################################################################
11
12 SET group_concat_max_len = 4294967295;
13 -- #----------#配置项#-----------------------#
14
15 -- 表名映射为驼峰形式,tbl_cdk_user_info -> userInfo,默认去除表名的tbl前缀
16 -- SET @noStrInTbl='tbl_cbm';
17 SET @noStrInTbl='tbl';
18
19 -- -------------------------------
20
21
22
23 SET @in_tbl_name=in_var_tbl_name;
24 SET @in_db_name=DATABASE();
25
26
27
28 -- ########### 生成引用
29 -- 生成service层实体类以备加Dao:CdkmallGoodsApply
30 SET @objName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
31 -- 生成service层实体类以备接Dao: cdkmallGoodsApply
32 SET @objRefName=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@in_tbl_name, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
33
34
35
36
37 DROP TABLE if EXISTS fixed_col_table;
38
39 CREATE table if not exists fixed_col_table(
40 col VARCHAR(256) NOT NULL COMMENT '字段名',
41 col_type VARCHAR(256) COMMENT '字段类型,static,dynamic,list,update_col,dynamic_update_col',
42 data_type VARCHAR(256) COMMENT '数据类型;如:int',
43 jdbc_type VARCHAR(256) COMMENT 'jdbc类型:int->INTEGER,VARCHAR',
44 java_type VARCHAR(256) COMMENT 'java类型:datetime - > date,tinyint -> Byte',
45 col_for_query VARCHAR(256) COMMENT 'idForQuery',
46 col_for_query_jdbc VARCHAR(256) COMMENT '#{idForQueryjdbcType=INTEGER} ',
47 col_comment VARCHAR(512) COMMENT '字段注释'
48 );
49
50
51
52
53 -- 插入参数中的字段值
54 if(in_static_col_list IS NULL OR in_static_col_list='static_query_col' OR in_static_col_list='' OR in_static_col_list=' ' OR in_static_col_list=' ') then
55 SET in_static_col_list= null;
56 ELSE
57 -- 插入静态字段
58 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_static_col_list, ',',CONCAT_WS('',"','static'),('")),"','static')");
59 PREPARE stmt FROM @exec_sql;
60 EXECUTE stmt;
61 DEALLOCATE PREPARE stmt;
62 END if;
63
64 if(in_dynamic_col_list IS NULL OR in_dynamic_col_list='dynamic_query_col' OR in_dynamic_col_list='' OR in_dynamic_col_list=' ' OR in_dynamic_col_list=' ') then
65 SET in_dynamic_col_list= null;
66 ELSE
67 -- 插入动态字段
68 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_dynamic_col_list, ',',CONCAT_WS('',"','dynamic'),('")),"','dynamic')");
69 PREPARE stmt FROM @exec_sql;
70 EXECUTE stmt;
71 DEALLOCATE PREPARE stmt;
72 END if;
73
74 if(in_list_col_list IS NULL OR in_list_col_list='list_query_col' OR in_list_col_list='' OR in_list_col_list=' ' OR in_list_col_list=' ') then
75 SET in_list_col_list= null;
76 ELSE
77 -- 插入list集合字段
78 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_list_col_list, ',',CONCAT_WS('',"','list'),('")),"','list')");
79 PREPARE stmt FROM @exec_sql;
80 EXECUTE stmt;
81 DEALLOCATE PREPARE stmt;
82 END if;
83
84 if(in_var_update_col_list IS NULL OR in_var_update_col_list='update_col' OR in_var_update_col_list='' OR in_var_update_col_list=' ' OR in_var_update_col_list=' ') then
85 SELECT '要更新的字段不能为空' AS 'error';
86 leave label;
87 ELSE
88 -- 插入list集合字段
89 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_var_update_col_list, ',',CONCAT_WS('',"','update'),('")),"','update')");
90 PREPARE stmt FROM @exec_sql;
91 EXECUTE stmt;
92 DEALLOCATE PREPARE stmt;
93 END if;
94
95 if(in_var_dynamic_update_col_list IS NULL OR in_var_dynamic_update_col_list='dynamic_update_col' OR in_var_dynamic_update_col_list='' OR in_var_dynamic_update_col_list=' ' OR in_var_dynamic_update_col_list=' ') then
96 SET in_var_dynamic_update_col_list=NULL;
97 ELSE
98 -- 插入list集合字段
99 SET @exec_sql = CONCAT_WS('',"INSERT ignore INTO fixed_col_table(col,col_type) values ('",REPLACE(in_var_dynamic_update_col_list, ',',CONCAT_WS('',"','dynamic_update'),('")),"','dynamic_update')");
100 PREPARE stmt FROM @exec_sql;
101 EXECUTE stmt;
102 DEALLOCATE PREPARE stmt;
103 END if;
104
105 -- select @exec_sql;
106
107 /* 打印查询字段的驼峰格式:IdAndAmountAndApplyNoAndUuid */
108 SELECT CONCAT('By',GROUP_CONCAT( tt SEPARATOR 'And')) INTO @byname
109 FROM
110 (
111 SELECT
112 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','_',col), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') AS tt
113 FROM fixed_col_table where col_type IN ('static','dynamic','list')) t;
114
115
116
117 -- 将col_for_query字段转成驼峰:create_time --> createTimeForQuery
118 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
119 ,'ForQuery') WHERE col_type='static';
120 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
121 ,'ForDynamicQuery') WHERE col_type='dynamic';
122 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
123 ,'ForQueryList') WHERE col_type='list';
124 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
125 ,'ForUpdate') WHERE col_type='update';
126 UPDATE fixed_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
127 ,'ForDynamicUpdate') WHERE col_type='dynamic_update';
128
129
130 -- 更新字段类型id --> int ,name -->varchar
131 UPDATE fixed_col_table SET data_type =
132 (
133 SELECT t1.data_type
134 FROM
135 information_schema.COLUMNS t1
136 WHERE
137 t1.table_schema= @in_db_name AND
138 t1.TABLE_NAME = @in_tbl_name
139 and t1.column_name =col
140 );
141 -- SELECT * FROM fixed_col_table;
142 -- 更新注释字段 --> 创建时间 | 非空 |
143 UPDATE fixed_col_table SET col_comment =
144 (
145 SELECT CONCAT_WS('',t1.column_comment,' | ',if(t1.is_nullable='YES','可空','非空'),' | ',case t1.COLUMN_KEY when 'PRI' then '主键' else '' end)
146 FROM
147 information_schema.COLUMNS t1
148 WHERE
149 t1.table_schema= @in_db_name AND
150 t1.TABLE_NAME = @in_tbl_name
151 and t1.column_name =col
152 );
153 -- 更新注释字段 --> | 唯一键 | uni_city_info_name(city_name)
154 UPDATE fixed_col_table SET col_comment = CONCAT_WS('',col_comment,
155 IFNULL(
156 (SELECT
157 CONCAT_WS('',' | ',IF(t.non_unique = 0,'唯一键','索引'),' | ', t.index_name,'(',
158 (
159 SELECT
160 GROUP_CONCAT(tt.column_name ORDER BY tt.seq_in_index)
161 FROM
162 information_schema.statistics tt
163 WHERE tt.table_schema = DATABASE() AND tt.INDEX_NAME=t.index_name AND tt.TABLE_NAME=t.table_name
164 )
165 ,')')
166 FROM
167 information_schema.statistics t
168 WHERE t.table_schema = @in_db_name
169 AND t.TABLE_NAME = @in_tbl_name
170 AND t.COLUMN_NAME=col
171 )
172 ,'无索引')
173 );
174
175
176 /*
177 SELECT
178 IF(t.non_unique = 0,'唯一键','索引') AS 'index_type',
179 t.TABLE_NAME AS 'table_name',
180 t.index_name AS 'index_name',
181 t.COLUMN_NAME AS 'column_name',
182 t.seq_in_index AS 'column_seq',
183 (
184 SELECT
185 GROUP_CONCAT(tt.column_name ORDER BY tt.seq_in_index)
186 FROM
187 information_schema.statistics tt
188 WHERE tt.table_schema = DATABASE() AND tt.INDEX_NAME=t.index_name AND tt.TABLE_NAME=t.table_name
189 ) AS cols
190 FROM
191 information_schema.statistics t
192 WHERE t.table_schema = @in_db_name
193 AND t.TABLE_NAME = @in_tbl_name
194 */
195
196
197 -- 转换成jdbc类型
198 UPDATE fixed_col_table SET jdbc_type=
199 case data_type
200 when 'datetime' then 'TIMESTAMP'
201 when 'tinyint' then 'TINYINT'
202 when 'bigint' then 'BIGINT'
203 when 'int' then 'INTEGER'
204 when 'float' then 'REAL'
205 when 'varchar' then 'VARCHAR'
206 END;
207
208 -- java类型转换
209 UPDATE fixed_col_table SET java_type=
210 case data_type
211 when 'datetime' then 'Date'
212 when 'tinyint' then 'Byte'
213 when 'bigint' then 'Long'
214 when 'int' then 'Integer'
215 when 'float' then 'REAL'
216 when 'varchar' then 'String'
217 END
218 WHERE col_type!='list';
219
220 -- java如果是集合类型
221 UPDATE fixed_col_table SET java_type=
222 case data_type
223 when 'datetime' then 'List<Date>'
224 when 'tinyint' then 'List<Byte>'
225 when 'bigint' then 'List<Long>'
226 when 'int' then 'List<Integer>'
227 when 'float' then 'List<REAL>'
228 when 'varchar' then 'List<String>'
229 END
230 WHERE col_type='list';
231
232 -- 组成jdbc字符串:id --> #{idForQueryjdbcType=INTEGER}
233 UPDATE fixed_col_table SET col_for_query_jdbc=CONCAT_WS('','#{',col_for_query,',jdbcType=',jdbc_type,'} ');
234
235 /*
236 col col_type data_type jdbc_type java_type col_for_query col_for_query_jdbc col_comment
237 name static varchar VARCHAR String nameForQuery #{nameForQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
238 name dynamic varchar VARCHAR String nameForDynamicQuery #{nameForDynamicQuery,jdbcType=VARCHAR} 卡面ip名称 | 非空 | | 索引 | idx_face_ip_name(name,status)
239 create_time list datetime TIMESTAMP List<Date> createTimeForQueryList #{createTimeForQueryList,jdbcType=TIMESTAMP} 创建时间 | 非空 | 无索引
240
241 */
242
243 -- SELECT * from fixed_col_table;
244
245
246 --
247 /* 列举所有字段 @allColumnList
248 id, uuid, create_time, last_update_time, mall_goods_uuid, apply_no, sugar_biz_order_id, payment_pay_no, pay_info, expire_time, trade_type, status, refund_flag, refund_status, refund_accept_time, user_uuid, mall_uuid, amount
249 */
250 SELECT
251 GROUP_CONCAT(t1.column_name SEPARATOR ', ') INTO @allColumnList
252 FROM
253 information_schema.COLUMNS t1
254 WHERE
255 t1.table_schema= @in_db_name AND
256 t1.TABLE_NAME = @in_tbl_name
257 ;
258
259
260 -- ################################################################################################################
261 -- ################################ 静态mapper层 ####################################################
262 -- ################################################################################################################
263
264 /* 查询条件字段 @queryList
265 id=#{idForQuery,jdbcType=BIGINT} and amount=#{amountForQuery,jdbcType=INTEGER} and apply_no=#{applyNoForQuery,jdbcType=VARCHAR}
266 */
267
268 SELECT
269 CONCAT('"' ,GROUP_CONCAT(CONCAT('and ',col,'=',col_for_query_jdbc) SEPARATOR ' '),'",\r\n') INTO @queryList
270 FROM fixed_col_table WHERE col_type='static';
271
272 -- SELECT @queryList;
273
274 /* 更新字段 @updateList
275 " set id=#{idForQuery,jdbcType=BIGINT} , amount=#{amountForQuery,jdbcType=INTEGER} , apply_no=#{applyNoForQuery,jdbcType=VARCHAR} "
276 */
277 SELECT
278 CONCAT('"set ' ,GROUP_CONCAT(CONCAT('',col,'=',col_for_query_jdbc) SEPARATOR ' ,'),'",\r\n') INTO @update_list
279 FROM fixed_col_table WHERE col_type='update';
280
281 -- 动态update语句
282 -- "<if test = 'idForDynamicUpdate != null'> , id= #{idForQuery,jdbcType=INTEGER} </if>",
283 SET @var_if_test_statement="\"<if test = '{1}col_for_query != null'> , {2}col= {3}col_for_query_jdbc </if>\",";
284
285 SELECT
286 GROUP_CONCAT(replace(replace(REPLACE(@var_if_test_statement,'{1}col_for_query',col_for_query),'{3}col_for_query_jdbc',col_for_query_jdbc),'{2}col',col) SEPARATOR '\r\n') INTO @update_dynamic_list
287 FROM fixed_col_table WHERE col_type='dynamic_update';
288
289 SELECT CONCAT_WS('',@update_list,@update_dynamic_list) INTO @update_list;
290
291 -- SELECT @updateList;
292 -- ################################################################################################################
293 -- ################################ 动态if mapper层 #################################################
294 -- "<if test = 'statusForQuery != null'> and status = #{statusForQuery,jdbcType = DECIMAL} </if> ",
295 -- ################################################################################################################
296
297 /*
298 "<if test = 'idForQuery != null'> AND id= #{idForQuery,jdbcType=INTEGER} </if>",
299 "<if test = 'nameForQuery != null'> AND name= #{nameForQuery,jdbcType=VARCHAR} </if>",
300 "<if test = 'createTimeForQuery != null'> AND create_time= #{createTimeForQuery,jdbcType=TIMESTAMP} </if>",
301 */
302 SET @var_if_test_statement="\"<if test = '{1}col_for_query '> AND {2}col= {3}col_for_query_jdbc </if>\",";
303
304 SELECT
305 GROUP_CONCAT(replace(replace(REPLACE(@var_if_test_statement,'{1}col_for_query',case data_type when 'varchar' then CONCAT(col_for_query,'!=null and ',col_for_query,'!=''') ELSE CONCAT(col_for_query,'!=null') END),
306 '{3}col_for_query_jdbc',col_for_query_jdbc),'{2}col',col) SEPARATOR '\r\n') INTO @dynamicQueryList
307 FROM fixed_col_table WHERE col_type='dynamic';
308
309 -- SELECT @dynamicQueryList;
310
311 -- SELECT * from fixed_col_table;
312
313
314
315 -- ################################################################################################################
316 -- ################################ 动态list mapper层 #################################################
317 /*
318 "<if test = 'forumIdList != null and forumIdList.size() > 0'> and id in " ,
319 " <foreach collection='forumIdList' item='item' index='index' open='(' separator=',' close=')'> " ,
320 " #{item,jdbcType=NUMERIC} " ,
321 " </foreach> " ,
322 "</if>" ,
323 */
324 -- ################################################################################################################
325
326 SET @var_list_test_statement="\"<if test = '{1}col_for_query != null and {1}col_for_query.size() > 0'> AND {2}col IN \" ,
327 \" <foreach collection='{1}col_for_query' item='item' index='index' open='(' separator=',' close=')'> \" ,
328 \" {3}col_for_query_jdbc \" ,
329 \" </foreach> \" ,
330 \"</if>\" ,";
331
332 SELECT
333 GROUP_CONCAT(replace(replace(REPLACE(@var_list_test_statement,'{1}col_for_query',col_for_query),'{3}col_for_query_jdbc',replace(col_for_query_jdbc,col_for_query,'item')),'{2}col',col) SEPARATOR '\r\n') INTO @listQueryList
334 FROM fixed_col_table WHERE col_type='list';
335
336
337 -- SELECT @listQueryList;
338
339
340
341
342 SET @mapper_sql='@Update({
343 "<script> ",
344 "update @in_tbl_name ",
345 @update_list
346 "<where>",
347 @queryList@dynamicQueryList
348 @listQueryList
349 "</where>",
350 "</script>"
351 })';
352
353 -- SELECT @queryList;
354
355 SELECT REPLACE(@mapper_sql,'@update_list',IFNULL(@update_list,'')) INTO @mapper_sql;
356 SELECT REPLACE(@mapper_sql,'@in_tbl_name',IFNULL(@in_tbl_name,'')) INTO @mapper_sql;
357 SELECT REPLACE(@mapper_sql,'@queryList',IFNULL(@queryList,'')) INTO @mapper_sql;
358 SELECT REPLACE(@mapper_sql,'@dynamicQueryList',IFNULL(@dynamicQueryList,'')) INTO @mapper_sql;
359 SELECT REPLACE(@mapper_sql,'@listQueryList',IFNULL(@listQueryList,'')) INTO @mapper_sql;
360
361 -- SELECT @mapper_sql;
362
363
364
365 /* 查询字段的参数形式列表 @queryparamList
366 @Param("idForQuery") Integer idForQuery , @Param("createTimeForQuery") Date createTimeForQuery , @Param("idForDynamicQuery") Integer idForDynamicQuery , @Param("idForQueryList") List<Integer> idForQueryList
367 */
368
369 SELECT
370 GROUP_CONCAT(CONCAT('@Param("',col_for_query,'") ',java_type,' ',col_for_query)SEPARATOR ' , ') INTO @queryparamList
371 FROM fixed_col_table ;
372
373 -- SELECT @queryparamList;
374
375 -- mapper层代码模板
376 SET @mapper_code=
377 '@mapper_sql
378 int update@byname(@queryparamList);';
379
380 SELECT REPLACE(@mapper_code,'@mapper_sql',IFNULL(@mapper_sql,'')) INTO @mapper_code;
381 SELECT REPLACE(@mapper_code,'@byname',IFNULL(@byname,'')) INTO @mapper_code;
382 SELECT REPLACE(@mapper_code,'@queryparamList',IFNULL(@queryparamList,'')) INTO @mapper_code;
383
384 -- SELECT @mapper_code;
385
386 -- ################################################################################################################
387 -- ################################ dao层需要的 ########################################################
388 -- ################################################################################################################
389
390 /*
391 @dao_type_queryparamList :
392 Integer idForQuery,String nameForQuery,Integer idForDynamicQuery,Date createTimeForDynamicQuery,List<Date> lastUpdateTimeForQueryList
393
394 @dao_queryparamList:
395 idForQuery,nameForQuery,idForDynamicQuery,createTimeForDynamicQuery,lastUpdateTimeForQueryList
396
397 */
398 SELECT
399 GROUP_CONCAT(col_for_query) INTO @dao_queryparamList
400 FROM fixed_col_table ;
401
402 SELECT
403 GROUP_CONCAT(CONCAT(java_type,' ',col_for_query)) INTO @dao_type_queryparamList
404 FROM fixed_col_table ;
405 -- select @dao_type_queryparamList;
406 -- select @dao_queryparamList;
407
408 -- dao层代码模板
409 SET @dao_code=
410 'public int update@byname(@dao_type_queryparamList){
411 return mapper.update@byname(@dao_queryparamList);
412 }';
413
414 SELECT REPLACE(@dao_code,'@byname',@byname) INTO @dao_code;
415 SELECT REPLACE(@dao_code,'@dao_type_queryparamList',@dao_type_queryparamList) INTO @dao_code;
416 SELECT REPLACE(@dao_code,'@dao_queryparamList',@dao_queryparamList) INTO @dao_code;
417
418 -- SELECT @dao_code;
419
420 -- ################################################################################################################
421 -- ################################ domain层需要的 ########################################################
422 -- ################################################################################################################
423
424 -- 打印注释:/* uuidForQuery | String | 逻辑主键 | 非空 | 唯一键 */
425 SELECT
426 GROUP_CONCAT(concat(col_for_query,' | ',java_type,' | ',col_comment) SEPARATOR '\r\n') INTO @comment_str
427 FROM fixed_col_table ;
428
429 -- select @comment_str;
430
431
432 -- idForQuery+","+nameForQuery+","+idForDynamicQuery+","+createTimeForDynamicQuery+","+lastUpdateTimeForQueryList
433 select REPLACE(@dao_queryparamList,',','+","+') INTO @if_params_list;
434
435 SET @domain_code=
436 '/*
437 @comment_str
438 */
439 public void update@byname(@dao_type_queryparamList){
440 int updateResult = @objRefNameDao.update@byname(@dao_queryparamList);
441 if (updateResult!=1) {
442 bizLogger.warn("update @in_tbl_name result result !=1 [updateResult, @dao_queryparamList] : "+updateResult+","+ @if_params_list);
443 throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
444 }
445 }
446 ';
447 SELECT REPLACE(@domain_code,'@comment_str',@comment_str) INTO @domain_code;
448 SELECT REPLACE(@domain_code,'@objRefName',@objRefName) INTO @domain_code;
449 SELECT REPLACE(@domain_code,'@byname',@byname) INTO @domain_code;
450 SELECT REPLACE(@domain_code,'@dao_type_queryparamList',@dao_type_queryparamList) INTO @domain_code;
451 SELECT REPLACE(@domain_code,'@dao_queryparamList',@dao_queryparamList) INTO @domain_code;
452 SELECT REPLACE(@domain_code,'@if_params_list',@if_params_list) INTO @domain_code;
453 SELECT REPLACE(@domain_code,'@in_tbl_name',@in_tbl_name) INTO @domain_code;
454
455 -- SELECT @domain_code;
456
457 -- SELECT * from fixed_col_table;
458
459
460
461 -- 引入所有的domain 和dao -- 开始 --
462 SELECT
463 GROUP_CONCAT(
464 CONCAT_WS('','@Autowired\r\n','private '
465 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain '
466 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Domain;\r\n')
467 SEPARATOR '\r\n'
468 ) INTO @autowired_all_domain
469
470 FROM information_schema.`TABLES` t
471 WHERE TABLE_SCHEMA=DATABASE()and TABLE_NAME NOT IN('fixed_col_table');
472
473 SELECT
474 GROUP_CONCAT(
475 CONCAT_WS('','@Autowired\r\n','private '
476 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao '
477 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(t.TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_',''),'Dao;\r\n')
478 SEPARATOR '\r\n'
479 ) INTO @autowired_all_dao
480
481 FROM information_schema.`TABLES` t
482 WHERE TABLE_SCHEMA=DATABASE() and TABLE_NAME NOT IN('fixed_col_table') ;
483
484 -- 引入所有的domain 和dao -- 结束 --
485
486 -- ################################################################################################################
487 -- ################################ 对象更新语句 ########################################################
488 -- ################################################################################################################
489 -- SET @in_tbl_name='tbl_ams_user_behavior';
490
491 DROP TABLE if EXISTS all_col_table;
492
493 CREATE table if not exists all_col_table(
494 col VARCHAR(256) NOT NULL COMMENT '字段名',
495 col_type VARCHAR(256) COMMENT '字段类型,static,dynamic,list',
496 data_type VARCHAR(256) COMMENT '数据类型;如:int',
497 jdbc_type VARCHAR(256) COMMENT 'jdbc类型:int->INTEGER,VARCHAR',
498 java_type VARCHAR(256) COMMENT 'java类型:datetime - > date,tinyint -> Byte',
499 col_for_query VARCHAR(256) COMMENT 'idForQuery',
500 col_for_query_jdbc VARCHAR(256) COMMENT '#{idForQueryjdbcType=INTEGER} ',
501 col_comment VARCHAR(512) COMMENT '字段注释'
502 );
503
504 INSERT INTO all_col_table(col)
505 SELECT
506 t1.column_name
507 FROM
508 information_schema.COLUMNS t1
509 WHERE
510 t1.table_schema= DATABASE() AND
511 t1.TABLE_NAME = @in_tbl_name
512 ;
513 -- 转换成驼峰格式
514 UPDATE all_col_table SET col_for_query =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
515 ,'');
516
517
518 -- 更新字段类型id --> int ,name -->varchar
519 UPDATE all_col_table SET data_type =
520 (
521 SELECT t1.data_type
522 FROM
523 information_schema.COLUMNS t1
524 WHERE
525 t1.table_schema= DATABASE() AND
526 t1.TABLE_NAME = @in_tbl_name
527 and t1.column_name =col
528 );
529
530
531
532 -- 转换成jdbc类型
533 UPDATE all_col_table SET jdbc_type=
534 case data_type
535 when 'datetime' then 'TIMESTAMP'
536 when 'tinyint' then 'TINYINT'
537 when 'bigint' then 'BIGINT'
538 when 'int' then 'INTEGER'
539 when 'float' then 'REAL'
540 when 'varchar' then 'VARCHAR'
541 END;
542
543
544
545 UPDATE all_col_table SET col_for_query_jdbc=CONCAT_WS('',col,'=#{obj.',col_for_query,',jdbcType=',jdbc_type,'} ');
546
547 /*
548 "<if test = 'idForQuery != null'> AND id= #{idForQuery,jdbcType=INTEGER} </if>",
549 "<if test = 'nameForQuery != null'> AND name= #{nameForQuery,jdbcType=VARCHAR} </if>",
550 "<if test = 'createTimeForQuery != null'> AND create_time= #{createTimeForQuery,jdbcType=TIMESTAMP} </if>",
551 */
552 SET @var_if_test_statement="\"<if test = 'obj.{1}col_for_query '> {3}col_for_query_jdbc , </if>\",";
553
554 SELECT
555 GROUP_CONCAT(replace(replace(REPLACE(@var_if_test_statement,'{1}col_for_query',case data_type when 'varchar' then CONCAT(col_for_query,' !=null and obj.',col_for_query,'!=''') ELSE CONCAT(col_for_query,'!=null') END),
556 '{3}col_for_query_jdbc',col_for_query_jdbc),'{2}col',col) SEPARATOR '\r\n') INTO @objUpdateAllCol
557 FROM all_col_table ;
558
559 -- select @objUpdateAllCol;
560
561 SET @obj_mapper_sql='@Update({
562 "<script> ",
563 "update @in_tbl_name ",
564 "<set>",
565 @objUpdateAllCol
566 "</set>",
567 "<where>",
568 @queryList@dynamicQueryList
569 @listQueryList
570 "</where>",
571 "</script>"
572 })';
573
574 SELECT REPLACE(@obj_mapper_sql,'@objUpdateAllCol',IFNULL(@objUpdateAllCol,'')) INTO @obj_mapper_sql;
575 SELECT REPLACE(@obj_mapper_sql,'@in_tbl_name',IFNULL(@in_tbl_name,'')) INTO @obj_mapper_sql;
576 SELECT REPLACE(@obj_mapper_sql,'@queryList',IFNULL(@queryList,'')) INTO @obj_mapper_sql;
577 SELECT REPLACE(@obj_mapper_sql,'@dynamicQueryList',IFNULL(@dynamicQueryList,'')) INTO @obj_mapper_sql;
578 SELECT REPLACE(@obj_mapper_sql,'@listQueryList',IFNULL(@listQueryList,'')) INTO @obj_mapper_sql;
579
580 -- select @obj_mapper_sql;
581 -- obj
582 SELECT
583 GROUP_CONCAT(CONCAT('@Param("',col_for_query,'") ',java_type,' ',col_for_query)SEPARATOR ' , ') INTO @objQueryparamList
584 FROM fixed_col_table WHERE col_type IN ('static','dynamic','list');
585
586 -- mapper层代码模板
587 SET @obj_mapper_code=
588 '@obj_mapper_sql
589 int update@byname(@objQueryparamList,@Param("obj") @objName @objRefName);';
590
591 SELECT REPLACE(@obj_mapper_code,'@obj_mapper_sql',IFNULL(@obj_mapper_sql,'')) INTO @obj_mapper_code;
592 SELECT REPLACE(@obj_mapper_code,'@byname',IFNULL(@byname,'')) INTO @obj_mapper_code;
593 SELECT REPLACE(@obj_mapper_code,'@objQueryparamList',IFNULL(@objQueryparamList,'')) INTO @obj_mapper_code;
594 SELECT REPLACE(@obj_mapper_code,'@objName',IFNULL(@objName,'')) INTO @obj_mapper_code;
595 SELECT REPLACE(@obj_mapper_code,'@objRefName',IFNULL(@objRefName,'')) INTO @obj_mapper_code;
596
597
598 -- dao层代码模板
599 /*
600 @dao_type_queryparamList :
601 Integer idForQuery,String nameForQuery,Integer idForDynamicQuery,Date createTimeForDynamicQuery,List<Date> lastUpdateTimeForQueryList
602
603 @dao_queryparamList:
604 idForQuery,nameForQuery,idForDynamicQuery,createTimeForDynamicQuery,lastUpdateTimeForQueryList
605
606 */
607 SELECT
608 GROUP_CONCAT(col_for_query) INTO @obj_dao_queryparamList
609 FROM fixed_col_table WHERE col_type IN ('static','dynamic','list');
610
611 SELECT
612 GROUP_CONCAT(CONCAT(java_type,' ',col_for_query)) INTO @obj_dao_type_queryparamList
613 FROM fixed_col_table WHERE col_type IN ('static','dynamic','list');
614
615 SET @obj_dao_code=
616 'public int update@byname(@obj_dao_type_queryparamList,@objName @objRefName){
617 return mapper.update@byname(@obj_dao_queryparamList,@objRefName);
618 }';
619
620 SELECT REPLACE(@obj_dao_code,'@byname',@byname) INTO @obj_dao_code;
621 SELECT REPLACE(@obj_dao_code,'@obj_dao_type_queryparamList',@obj_dao_type_queryparamList) INTO @obj_dao_code;
622 SELECT REPLACE(@obj_dao_code,'@obj_dao_queryparamList',@obj_dao_queryparamList) INTO @obj_dao_code;
623 SELECT REPLACE(@obj_dao_code,'@objName',IFNULL(@objName,'')) INTO @obj_dao_code;
624 SELECT REPLACE(@obj_dao_code,'@objRefName',IFNULL(@objRefName,'')) INTO @obj_dao_code;
625
626
627 -- ################################################################################################################
628 -- ################################ 实体类,getter,setter方法 ###########################################
629 -- ################################################################################################################
630
631 SELECT CONCAT_WS('','/* 新建对象*/\r\n',@objName,' ',@objRefName,'= new ',@objName,'();\r\n\r\n/*设置属性*/\r\n',
632 group_concat(
633 /* cdkmallGoodsApply.setUserUuid(userUuid); */
634 CONCAT_WS( ''
635 ,CONCAT_WS('','/*',c.column_comment,' | ',c.column_type,' | ',if(c.is_nullable='YES','可空','非空'),if(c.extra='','',CONCAT_WS('',' | ',c.extra)),' | ','默认=',ifnull(c.COLUMN_DEFAULT,'null'),' */ \r\n')
636 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
637 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','.set','_',c.column_name), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
638 ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','(',c.column_name,');'), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')
639 ) SEPARATOR '\r\n'
640 )
641 ) into @insert_code
642 FROM
643 information_schema.COLUMNS c
644 WHERE
645 c.table_schema= DATABASE() AND
646 c.TABLE_NAME = @in_tbl_name;
647
648
649
650
651
652
653 -- ################################################################################################################
654 -- ################################ 打印语句 ########################################################
655 -- ################################################################################################################
656 -- -- powered by wanglifeng https://www.cnblogs.com/wanglifeng717
657
658 select '代码','用途' LIMIT 0
659 union all
660 SELECT @mapper_code , 'mapper层方法'
661 UNION ALL
662 SELECT @dao_code , 'dao层方法'
663 union all
664 SELECT @domain_code , 'domain层方法'
665 union ALL
666 SELECT @obj_mapper_code ,'用对象式更新mapper层方法'
667 union ALL
668 SELECT @obj_dao_code ,'用对象式更新dao层方法'
669 UNION ALL
670 SELECT @insert_code ,'实体类getter|setter方法'
671 union ALL
672 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Dao ',@objRefName,'Dao;\r\n') , '引入dao'
673 union all
674 SELECT CONCAT_WS('','/*\r\n',@comment_str,'*/','\r\n',' int updateResult',' = ',@objRefName,'Dao.update',@byname,'(',@dao_queryparamList,');') , '调用dao'
675 union all
676 SELECT CONCAT_WS('','@Autowired\r\n','private ',@objName,'Domain ',@objRefName,'Domain;\r\n') , '引入domain'
677 union all
678 SELECT CONCAT_WS('','/*\r\n',@comment_str,'*/','\r\n',' int updateResult',' = ',@objRefName,'Domain.update',@byname,'(',@dao_queryparamList,');') , '调用domain'
679 union all
680 SELECT @autowired_all_domain , '引用所有domain'
681 union all
682 SELECT @autowired_all_dao , '引入所有dao';
683
684 DROP TABLE if EXISTS fixed_col_table;
685
686 DROP TABLE if EXISTS all_col_table;
687 -- SELECT * FROM fixed_col_table;
688 END %%
689 DELIMITER ;
update_code_generator
本文来自博客园,作者:wanglifeng,转载请注明原文链接: https://www.cnblogs.com/wanglifeng717/p/15839391.html
本文来自博客园,作者:wanglifeng,转载请注明原文链接:https://www.cnblogs.com/wanglifeng717/p/15831071.html
基于mybatis的java代码生成存储过程的更多相关文章
- MyBatis学习总结(四)——MyBatis缓存与代码生成
一.MyBatis缓存 缓存可以提高系统性能,可以加快访问速度,减轻服务器压力,带来更好的用户体验.缓存用空间换时间,好的缓存是缓存命中率高的且数据量小的.缓存是一种非常重要的技术. 1.0.再次封装 ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- Mybatis调用数据库的存储过程和方法
转载. https://blog.csdn.net/ml0228123/article/details/81002258 上次的项目,要求我用java代码调用存储过程,折腾了好久.最后总算成功了 ...
- MyBatis中mybatis-generator代码生成的一般过程
MyBatis框架的使用,可以参考我的文章: https://blog.csdn.net/JayInnn/article/details/81746571(基于Mybatis实现一个查库的接口) ht ...
- 基于SSM的Java Web应用开发原理初探
SSM开发Web的框架已经很成熟了,成熟得以至于有点落后了.虽然如今是SOA架构大行其道,微服务铺天盖地的时代,不过因为仍有大量的企业开发依赖于SSM,本文简单对基于SSM的Java开发做一快速入门, ...
- 基于Mybatis分页插件PageHelper
基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 ...
- 基于Mybatis的Dao层开发
转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...
- Mybatis学习--Java API
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...
- 5.7 Liquibase:与具体数据库独立的追踪、管理和应用数据库Scheme变化的工具。-mybatis-generator将数据库表反向生成对应的实体类及基于mybatis的mapper接口和xml映射文件(类似代码生成器)
一. liquibase 使用说明 功能概述:通过xml文件规范化维护数据库表结构及初始化数据. 1.配置不同环境下的数据库信息 (1)创建不同环境的数据库. (2)在resource/liquiba ...
随机推荐
- springboot 配置文件的优先级和互补配置
一.springboot启动时候,配置文件的优先级如下所示由高到低.高优先级会覆盖低优先级相同配置,并且和低优先级形成互补配置. –file:./config/ ###根目录config目录下 –fi ...
- 为什么 wait 和 notify 方法要在同步块中调用?
Java API 强制要求这样做,如果你不这么做,你的代码会抛出 IllegalMonitorStateException 异常.还有一个原因是为了避免 wait 和 notify 之间产生竞态条件.
- JS Promise对象学习
Promise对象的三个状态 pending(进行中) fulfilled(已成功) rejected(已失败) Promise代表一个异步操作,对象的状态一旦改变,就不会再改变 Promise构造函 ...
- java-web中的Filter&Listener
Filter过滤器 当访问服务器资源的时候,过滤器可以将i气你个球拦截下来,完成一些特殊的功能 过滤器的作用: 一般用于完成通用的操作,如验证登陆,统一的编码处理,敏感字符过滤.就是打游戏骂人,会出现 ...
- HTML 5中的DataList是什么?
HTML 5中的DataList控件元素有助于提供自动完成功能的文本框,如下图所示. 下面是DataList控件功能的HTML代码: <input list="Country" ...
- 基于redis实现未登录购物车
springboot 工程 主要说明购物车流程(故将登录用户信息保存至session) 未登录时 将用户临时key 保存至cookie 有不足之处 请大佬指点 项目源码: https://github ...
- 遇到过的问题之“解决 No qualifying bean of type 问题”
1.问题 解决 No qualifying bean of type 问题 2.思路: 1 检查是否添加了对应注解 2 检查配置是否正确,扫描包名, 类名及id是否正确 一 . 传统SSM项目 ssm ...
- 认识 Function.prototype.bind()
欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...
- 顺序、随机IO和Java多种读写文件性能对比
概述 对于磁盘的读写分为两种模式,顺序IO和随机IO. 随机IO存在一个寻址的过程,所以效率比较低.而顺序IO,相当于有一个物理索引,在读取的时候不需要寻找地址,效率很高. 基本流程 总体结构 我们编 ...
- IO流入门+简单案例实现
IO流 总结内容 1. IO流是什么 2. 字符流和字节流 3. File常用API(前面类型为返回类型) 4. 编码转换 5. IO流实现流程 6. 输入输出流简单实现 7. 输入输出流简单实现 总 ...