日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java Spring動(dòng)態(tài)生成Mysql存儲(chǔ)過程詳解

瀏覽:122日期:2022-08-31 16:37:09

一、 背景

由于公司業(yè)務(wù)需要?jiǎng)討B(tài)配置一些存儲(chǔ)過程來(lái)生成數(shù)據(jù),之前嘗試過使用jpa來(lái)完成,或多或少都存在一些問題,最后使用了spring的Jdbctemplate。

二、 環(huán)境

1.此隨筆內(nèi)容基于spring boot項(xiàng)目

2.數(shù)據(jù)庫(kù)為mysql 5.7.9版本

3.jdk 版本為1.8

三、 說(shuō)明

說(shuō)明:為方便表示,下列存儲(chǔ)過程在代碼中的表示我稱之為接口配置

四、 內(nèi)容

1、定義接口和接口參數(shù)bean;

1)接口配置bean:

@Entity@Table(name='qt_interface')public class QtInterface { @Id private String id; private String name; private String content; private String info; private String status;//此處省略get、set…}

2)接口配置參數(shù)bean:

@Entity@Table(name='qt_interface_parameter')public class QtInterfaceParameter { @Id private String id; @Column(name='inter_id') private String interId; private String name; //參數(shù)名稱 private String explain_info; //參數(shù)描述 private String type;// 輸入輸出類型 private String paraType; // 參數(shù)類型 private Integer paraLen;//此處省略get、set…}

2、編寫頁(yè)面輸入接口配置的信息;

1)Html部分代碼:

<div class='form-group'> <label for='name' class='col-sm-2 control-label'>接口名稱<a style='color:red;'>*</a>:</label> <div class='col-sm-4'> <input type='text' name='name' /> </div> <label for='status' class='col-sm-2 control-label'>接口狀態(tài)<a style='color:red;'>*</a>:</label> <div > <select disabled='disabled' class='form-control'> <option value='0'>保存</option> <option value='1'>已創(chuàng)建</option> </select> </div></div><div class='form-group'> <label for='content' class='col-sm-2 control-label'>接口內(nèi)容<a style='color:red;'>*</a>:</label> <div class='col-sm-10'> <textarea name='content' rows='5' class='form-control'></textarea> </div></div><div class='form-group'> <label for='explain_info' class='col-sm-2 control-label'>接口說(shuō)明:</label> <div class='col-sm-10'> <textarea name='explain_info' rows='3' class='form-control'></textarea> </div></div><div class='form-group'> <label for='qtInterList' class='col-sm-2 control-label'>接口參數(shù):</label> <div class='col-sm-10'> <div style='width:100%;'> <table class='easyui-datagrid'> </table> </div> </div></div>

2)Js部分代碼太長(zhǎng),就只貼一個(gè)提交方法吧

function createProduce(inter_id) { var postData = { id: $('#inter_id').val(), item_id: $('#item_id').val(), name: $('#name').val(), content: $('#content').val(), explain_info: $('#explain_info').val(), jsonData: JSON.stringify(jsonData)// 參數(shù)明細(xì)信息,字段就是接口配置參數(shù)bean 中的字段信息}; $.ajax({ url: Url + ’test/createPro’, type: ’get’, //GET async: false, //或false,是否異步 data: JSON.stringify(postData), timeout: 5000, //超時(shí)時(shí)間 dataType: ’json’, //返回的數(shù)據(jù)格式: success: function (result, textStatus, jqXHR) { if (result.result == '1') { // 編輯賦值layer.alert('創(chuàng)建成功', {icon: 0}); } else {layer.alert('創(chuàng)建失敗,請(qǐng)檢查sql語(yǔ)句,注意結(jié)尾不能有分號(hào)!具體錯(cuò)誤信息:'+result.msg, {icon: 5}); } }, error: function (xhr, textStatus) { layer.alert(textStatus); } });}

3、將數(shù)據(jù)上傳到后臺(tái)之后,后臺(tái)生成存儲(chǔ)過程。當(dāng)然一般情況下,我們還是先把數(shù)據(jù)接口和接口明細(xì)數(shù)據(jù)持久化保存,再來(lái)執(zhí)行創(chuàng)建操作,可以保證數(shù)據(jù)不會(huì)丟失。此處由于篇幅問題,我就省略了中間這一步。

1)創(chuàng)建一個(gè)service 的接口:

public interface TestService { ResultInfo createPro(Map<String,Object> map);}

2)然后創(chuàng)建接口的實(shí)現(xiàn)類:

@Servicepublic class TestServiceImpl implements TestService { /** * 創(chuàng)建存儲(chǔ)過程 * * @param map 接口配置和接口參數(shù)信息 * 參數(shù)詳解: type 輸入輸出參數(shù),取值為 in,out * paraType 參數(shù)類型。取值為:1:int 2:double 3:varchar 4:datetime * @return */@Override@Transactionalpublic void createPro(Map<String,Object> map) { ResultInfo resultInfo = new ResultInfo(); QtInterface qtInterface=new QtInterface(); qtInterface =buildInterface(map, qtInterface);// 加載接口配置信息 List<QtInterfaceParameter> paraList = new ArrayList<QtInterfaceParameter>(); paraList = buildParam(map.get('jsonData'));// 加載接口配置信息 StringBuffer bf = new StringBuffer(); // 建立生成過程的語(yǔ)句 bf.append('create procedure t'); bf.append(qtInterface.getName()); bf.append('n'); bf.append('('); String para_type = ''; int i = 1; for (QtInterfaceParameter qt : paraList) { switch (qt.getParaType()) { // 參數(shù)類型 case '1':para_type = 'int';break; case '2':para_type = 'double';break; case '3':para_type = 'varchar(' + qt.getParaLen() + ')';break; case '4':para_type = 'datetime';break; default:para_type = 'varchar(255)';break; } if (i == paraList.size()) { bf.append('' + qt.getType() + ' ' + qt.getName() + ' ' + para_type + ') '); } else { bf.append('' + qt.getType() + ' ' + qt.getName() + ' ' + para_type + ', '); } i++; } bf.append(' COMMENT ’'+ qtMonitorWarnInterface.getInfo() +'’n'); // 添加描述信息 bf.append('BEGINn'); bf.append(qtInterface.getContent()); // 存儲(chǔ)過程內(nèi)容 bf.append(';nEND;'); // 先執(zhí)行刪除操作 jdbcTemplate.execute('drop procedure if exists ' + qtInterface.getName() + ' ;'); jdbcTemplate.execute(bf.toString()); } /** * 初始化接口配置信息 * */private QtInterface buildInterface(Map<String, Object> map, QtInterface qtInterface) { // 接口配置名稱 if (map.get('name') != null && !''.equals(map.get('name '))) { qtInterface.setName((String) map.get('name ')); } //此處省略其他項(xiàng),其他項(xiàng)的取值方法跟上面的一樣 … return qtInterface;} /** * 初始化接口配置參數(shù)明細(xì) * */ private List<QtInterfaceParameter> buildParam(String postData) { List<QtInterfaceParameter> list = new ArrayList<QtInterfaceParameter>(); if(postData!=null &&!''.equals(postData)){ List<Map<String, Object>> listParam = (List<Map<String, Object>>) JsonMapper.fromJsonString(postData, ArrayList.class); for (Map<String, Object> map : listParam) {QtInterfaceParameter para = new QtInterfaceParameter();// 接口配置參數(shù)名稱if (map.get('name') != null && !''.equals(map.get('name '))) { para.setName((String) map.get('name '));}// 此處省略其他項(xiàng),其他項(xiàng)的取值方法跟上面的一樣 …list.add(para); } } return list; }

3) 添加控制器進(jìn)行調(diào)用:

@Controller@RequestMapping(value = '/test')public class TestController {@Autowiredprivate TestService testService; @RequestMapping(value = '/createPro', method = RequestMethod.GET)public ResultInfo createPro(@RequestBody Map<String, Object> map) { ResultInfo resultInfo = new ResultInfo(); try { testService.createPro(Id); resultInfo.setResult(1); resultInfo.setMsg('創(chuàng)建過程成功'); } catch (Exception e) { resultInfo.setResult(-1); resultInfo.setMsg(e.getMessage()); } return resultInfo; }}

4)最后動(dòng)態(tài)生成的SQL就是這個(gè)樣子:

CREATE PROCEDURE `testbase`.`test`(in a_user_id varchar(100)) COMMENT ’測(cè)試接口’BEGINselect * from userInfo where user_id=a_user_id;END

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本中文字幕一区二区| 日韩成人免费| 红桃视频亚洲| 欧美日韩免费看片| 国产精品三级| 国产精品高清一区二区| 久久精品av麻豆的观看方式| 亚洲2区在线| 综合激情五月婷婷| 日本欧美在线看| 亚洲黄页一区| 国产亚洲午夜| 亚洲免费一区二区| 黄色国产精品| 国产亚洲在线| 日韩天堂av| 美女久久一区| 日韩在线播放一区二区| 日韩在线观看一区二区| 久久亚洲风情| 亚洲精品在线国产| 国产欧美自拍| 欧美成人精品午夜一区二区| 久久亚洲黄色| 久久国产电影| 六月婷婷一区| 日韩高清在线不卡| 黄色欧美在线| 成人羞羞视频播放网站| 伊人久久大香线蕉av超碰演员| 亚洲成人精选| 一区二区91| 国产精品sm| av日韩中文| 久久激情一区| 亚洲三级毛片| 麻豆精品视频在线观看视频| 欧美日韩国产v| 久久国产精品毛片| 欧美日韩夜夜| 国产不卡人人| 99热免费精品| 欧美精品国产| 日韩欧美精品| 久久成人亚洲| 久久久国产精品入口麻豆 | 国产99亚洲| 亚洲精品成人一区| 日韩av不卡一区二区| 久久久久久久久成人| 韩国精品主播一区二区在线观看| 激情久久五月| 日韩欧美2区| 日本欧美国产| 精品一区在线| 日本精品在线播放| 亚洲不卡系列| 青青国产精品| 久久国产日韩| 国产精品一区二区av交换| 久久精品亚洲人成影院| 日本精品在线播放| 中文字幕系列一区| 视频一区在线播放| 色婷婷亚洲mv天堂mv在影片| 性一交一乱一区二区洋洋av| 国产精品极品| 丝袜美腿高跟呻吟高潮一区| 久久精品网址| 蜜桃91丨九色丨蝌蚪91桃色| 国产不卡一区| 久久成人国产| 91看片一区| 欧美精品一区二区久久| 国产精品成人自拍| 免费在线成人网| 免费看精品久久片| 日韩欧美在线精品| 美女尤物国产一区| 激情五月综合网| 日本午夜精品久久久久| 在线手机中文字幕| 日本在线视频一区二区| 亚洲二区视频| 精品国产精品国产偷麻豆| 亚洲精品动态| 国产高清一区二区| 国产精品久久观看| 欧美欧美黄在线二区| 国产在线日韩| 精品日韩在线| 日本va欧美va瓶| 激情久久久久久| 国产欧美在线| 亚洲欧美网站| 国产中文一区| 中文在线中文资源| 国产视频一区二| 亚洲视频国产| 91成人精品视频| 999久久久亚洲| 国产suv精品一区二区四区视频| 日韩欧美激情| 综合激情网...| 亚洲精品电影| 日韩成人高清| 精品99久久| 久久不卡日韩美女| 国产亚洲综合精品| 婷婷亚洲五月| 久久蜜桃av| 久久久久久久久丰满| www.九色在线| 日韩激情一区| 亚洲天堂av影院| 在线天堂中文资源最新版| 国产精品xxx在线观看| 日本欧美一区| 欧美日韩亚洲一区在线观看| 午夜电影一区| 欧美一级二级三级视频| 日韩专区在线视频| 亚洲精品91| 激情视频网站在线播放色| 欧美激情综合| 精品欠久久久中文字幕加勒比| 国产伦乱精品| 国产麻豆一区| 免费在线亚洲欧美| 久久wwww| 久久男人av| 美女高潮久久久| 美日韩一区二区三区| 精品一区二区三区的国产在线观看 | 在线一区视频| 久久久久一区| 国产高清久久| 亚洲在线一区| 中文在线日韩| 日本不卡一区二区| 国产欧美日本| 你懂的国产精品永久在线| 久久不见久久见中文字幕免费 | 日韩一级精品| 老司机久久99久久精品播放免费| 快she精品国产999| 视频一区二区三区在线| 亚洲精品乱码| 国产女人18毛片水真多18精品| 国产福利一区二区三区在线播放| 精品欠久久久中文字幕加勒比| 国产精品久久久久久久久妇女| 亚洲天堂免费电影| 午夜国产精品视频免费体验区| 野花国产精品入口| 日韩av中文字幕一区二区| 国产劲爆久久| 成人国产精品久久| 久久九九精品| 蜜桃视频一区二区| 国产精品黄网站| 97精品国产福利一区二区三区| 欧美aa一级| 美女国产一区| 国产精品红桃| 久久精品国产亚洲夜色av网站| 在线一区免费| 国产欧美久久一区二区三区| 国产h片在线观看| 国产精品美女| 国产欧美啪啪| 亚洲91久久| 日韩在线视频一区二区三区| 国产精品一国产精品| 亚洲欧洲高清| 一区二区三区四区在线观看国产日韩| 91精品日本| 精品午夜av| 黄色精品网站| 国产日韩亚洲欧美精品| 色偷偷偷在线视频播放| 伊人成人在线视频| 国产精品99久久免费观看| 日韩一区欧美| 亚洲人成在线影院| 国产va免费精品观看精品视频| 欧美91视频| 国产欧美一区| 亚洲无线一线二线三线区别av| 午夜电影一区| 日韩1区在线| 综合色就爱涩涩涩综合婷婷| 国产精品www.| 黑丝一区二区三区| 精品国产一区二区三区av片| 国产一区亚洲| 久久99精品久久久野外观看| 欧美在线影院| 精品午夜av| 日韩有吗在线观看|