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

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

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

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

一、 背景

由于公司業(yè)務(wù)需要?jiǎng)討B(tài)配置一些存儲(chǔ)過(guò)程來(lái)生成數(shù)據(jù),之前嘗試過(guò)使用jpa來(lái)完成,或多或少都存在一些問(wèn)題,最后使用了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ǔ)過(guò)程在代碼中的表示我稱之為接口配置

四、 內(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ǔ)過(guò)程。當(dāng)然一般情況下,我們還是先把數(shù)據(jù)接口和接口明細(xì)數(shù)據(jù)持久化保存,再來(lái)執(zhí)行創(chuàng)建操作,可以保證數(shù)據(jù)不會(huì)丟失。此處由于篇幅問(wèn)題,我就省略了中間這一步。

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ǔ)過(guò)程 * * @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(); // 建立生成過(guò)程的語(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ǔ)過(guò)程內(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)建過(guò)程成功'); } 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久久,三上悠亚国产精品一区二区三区
国产精品二区不卡| 日韩欧美自拍| 亚洲精品中文字幕乱码| 神马久久午夜| 久久精品国产999大香线蕉| 91免费精品国偷自产在线在线| 亚洲日本国产| 在线精品福利| 日韩不卡一二三区| 国产美女精品视频免费播放软件| 国产精品一卡| 麻豆精品在线| 成人污污视频| 日韩欧美午夜| 宅男在线一区| 欧美在线综合| 日韩一区中文| 久久精品亚洲| 精精国产xxxx视频在线播放| 久久一区二区三区喷水| 亚洲欧洲一区| 日韩欧美四区| 麻豆久久久久久| 日韩精品欧美| 另类av一区二区| 69精品国产久热在线观看| 国产精品66| 亚洲性色av| 红桃视频欧美| 日韩精品电影一区亚洲| 精品视频高潮| 99久久精品网| 亚洲开心激情| 麻豆精品新av中文字幕| 久久久成人网| 亚洲精品在线二区| 黄色欧美在线| 欧美日韩国产一区二区三区不卡 | 亚洲免费激情| 日本亚洲欧美天堂免费| 国产一区日韩| 亚洲深夜福利| 国产欧美一区二区三区国产幕精品| 精品免费av| 激情视频一区二区三区| 亚洲影院天堂中文av色| 国产私拍福利精品视频二区| 国内精品麻豆美女在线播放视频| 在线成人动漫av| 日本午夜精品一区二区三区电影 | 久久精品国产亚洲aⅴ| 日韩国产一区| 免费黄网站欧美| 红杏一区二区三区| 国产精品普通话对白| 麻豆国产精品一区二区三区| 91超碰国产精品| 青青草视频一区| 久久视频精品| 国产精品日本一区二区不卡视频 | 精品国产一级| 亚洲一区二区毛片| 成人午夜亚洲| 综合激情婷婷| 欧美三级精品| 国产精品一区二区三区四区在线观看| 婷婷成人在线| 国产精品s色| 石原莉奈在线亚洲二区| 日韩毛片视频| 欧美日韩视频免费看| 久久中文字幕二区| 国产精品玖玖玖在线资源| 国产综合精品一区| 国产精品xvideos88| 久色成人在线| 久久久久国产| 美女尤物国产一区| 亚洲精一区二区三区| 久久国产亚洲| 啪啪亚洲精品| 日韩一级欧洲| 国产成人精品一区二区三区视频| 亚洲乱码一区| 午夜精品亚洲| 成人一区而且| 69堂免费精品视频在线播放| 国产亚洲高清视频| 成人精品中文字幕| 国产一区二区三区网| 日韩一区二区三区四区五区| 精品一区免费| 精品精品99| 婷婷亚洲精品| 波多野结衣一区| 日韩一区二区三区免费播放| 国产精品99精品一区二区三区∴| 视频一区欧美日韩| 午夜欧美精品| 亚洲性视频h| 欧美成人a交片免费看| 久久精品国产在热久久| 国产美女亚洲精品7777| 婷婷精品久久久久久久久久不卡| 红桃视频国产精品| 亚洲一级二级| 久久久久久久久久久妇女| 福利欧美精品在线| 六月丁香综合在线视频| 国产麻豆精品| 日本va欧美va精品| 只有精品亚洲| 国产毛片一区| 影院欧美亚洲| 九九在线精品| 蜜桃成人av| 九九在线精品| 91精品电影| 免费视频亚洲| 婷婷综合网站| 黄色成人91| 亚洲尤物在线| 亚洲欧美网站| 国产麻豆综合| 亚洲欧洲免费| 五月亚洲婷婷 | 国产综合激情| 黄色在线一区| 国产精品日本| 中文字幕成人| 日韩福利视频网| 久久激情综合网| 国产日韩中文在线中文字幕| 欧美精品影院| 国产激情精品一区二区三区| 久久精品一本| 欧美天堂视频| 欧美亚洲国产激情| 视频一区在线视频| 亚洲在线久久| 国产美女亚洲精品7777| 久久中文字幕导航| av高清不卡| 91九色精品| 亚洲欧美日本国产| 国产精品片aa在线观看 | 视频福利一区| 国产色综合网| 国产亚洲第一伦理第一区| 欧美极品一区二区三区| 国产精品黑丝在线播放| 1024精品一区二区三区| 亚洲神马久久| 国产精品任我爽爆在线播放| 成人亚洲精品| 91超碰国产精品| 日韩av中文字幕一区| 国产一区二区三区黄网站| 激情五月综合| 欧美日韩xxxx| 欧美日韩视频免费观看| 蜜桃免费网站一区二区三区 | 日韩和欧美一区二区三区| 精品理论电影在线| 99久久99视频只有精品| 午夜亚洲福利| 久久一区欧美| 在线国产一区二区| 婷婷综合一区| 福利欧美精品在线| 在线精品视频在线观看高清| 日韩1区2区3区| 丁香婷婷久久| 国产精品社区| 国产精品分类| 欧美成人高清| 国产精品三级| 亚洲高清久久| 国产欧美日韩一区二区三区在线| 日韩毛片视频| 日本在线一区二区三区| 精品91福利视频| 六月婷婷一区| 精品在线网站观看| 99热精品在线| 久久伊人亚洲| 一区二区国产在线观看| 综合日韩av| 日本视频一区二区| 91精品亚洲| 国产午夜精品一区在线观看| 亚洲手机在线| 免费亚洲婷婷| 亚洲精品欧洲| 99久久精品费精品国产| 国产精品手机在线播放| 亚洲精品成人| 高清久久精品| 欧美日一区二区三区在线观看国产免| 久久麻豆精品|