springboot如何初始化执行sql语句


Posted in Java/Android onJune 22, 2021

springboot初始化执行sql语句

开发的时候需要增加一些函数和表,同时因为一些基础数据例如字典表也需要插入一些数据,当然我可以跟组员说一声然后把sql语句给他们在本地执行,但是这样太low,不够自动化。

于是就开始研究如何在springboot启动时执行sql语句

最后查到资料

spring.datasource.schema=classpath:schema.sql

这个配置项决定建库文件的位置,注意classpath,之前我在网上查找资料都没有这个classpath,结果我的schema.sql文件放在哪都不好使,后来加上classpath才好用,文件放在resource下面就行了

我发现后面才是坑的地方,建立方法。

新建方法,首先要先删掉它,不然会报错,当然,方法里没有数据,自然想删就删,但是除此之外还有很多坑

drop function if exists `getChildrenProductName`;|
create function `getChildrenProductName`(orgid varchar(50))
returns varchar(4000)
BEGIN
DECLARE `oTemp` VARCHAR(4000);
DECLARE `oTempChild` VARCHAR(4000);
DECLARE `oTempName` VARCHAR(4000);
DECLARE `oTempChildName` VARCHAR(4000);
DECLARE i int;
SET oTemp = CAST(orgid AS CHAR);
SET oTempChild = CAST(orgid AS CHAR);
set oTempName = '$';
set oTempChildName = '';
set i = 0;
WHILE oTempChild IS NOT NULL
DO
if i>0 then
set oTempName = concat(oTempName,",",oTempChildName);
end if;
SET oTemp = CONCAT(oTemp,',',oTempChild);
set i = i +1;
SELECT GROUP_CONCAT(p.product_name,p.partnum) into oTempChildName FROM product p
left join bom b on b.PartID = p.PartID
 WHERE FIND_IN_SET(b.ParentPartID,oTempChild) > 0;
SELECT GROUP_CONCAT(p.PartID) INTO oTempChild FROM product p
left join bom b on b.PartID = p.PartID
 WHERE FIND_IN_SET(b.ParentPartID,oTempChild) > 0;
END WHILE;
RETURN oTempName;
END;|

我这个人做事是步步为营的,都是先在数据库里执行了sql语句能用才会写上去的,但是我发现在mysql中能使用,放到schema.sql语句中就不好使了。在网上找了半天资料,发现没有提到这个问题的

过程就不说了,折腾了半天,我debug才发现,springboot框架把默认是按;号来分割语句的,所以创建函数时,他就把整个创建的语句按;号分割了,自然就报错了,这就是我在上面使用 | 的原因

当然,这也要配置

spring.datasource.separator=|

这样就可以了

对了,还有插入数据的需要,因为我是后添加的数据,所以不能重复添加,只有不存在数据才能添加,这个方法是我网上找的,可以用

INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM table WHERE field = ?)

springboot项目中自己编写sql语句并调用

第一步:在 mapper 的接口中定义方法(使用到的PublishVo对象需要自己定义):

springboot如何初始化执行sql语句

第二步:在 mapper 对应的 xml 文件中写 SQL 语句:

springboot如何初始化执行sql语句

注意:xml 文件中 select 标签的 id 属性就是上一步在 mapper 接口中定义的那个方法名,resultType 就是返回的类型,在上一步的 mapper 接口中的返回类型是自定义的实体类型 PublishVo,因此就写上实体类 PublishVo 的全路径。

SQL语句的条件值要使用#,不能使用$,因为$会产生SQL注入问题。

第三步: 在 Controller 中编写 mapper 的调用

springboot如何初始化执行sql语句

第四步:编写 service:

springboot如何初始化执行sql语句

第五步:编写 service 的实现类:

springboot如何初始化执行sql语句

然后再前端写方法调用后端的接口即可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java实现简易的分词器功能
Jun 15 Java/Android
Java基础之线程锁相关知识总结
Jun 30 Java/Android
Mybatis-plus在项目中的简单应用
Jul 01 Java/Android
java如何实现socket连接方法封装
Sep 25 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
解析探秘fescar分布式事务实现原理
Feb 28 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Java设计模式之代理模式
Apr 22 Java/Android
解决Springboot PostMapping无法获取数据的问题
May 06 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 Java/Android
Java循环队列与非循环队列的区别总结
Jun 22 #Java/Android
springBoot基于webSocket实现扫码登录
Jun 22 #Java/Android
SpringBoot集成Redis,并自定义对象序列化操作
Java如何实现树的同构?
启动Tomcat时出现大量乱码的解决方法
详解java如何集成swagger组件
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
You might like
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python 实现矩阵按对角线打印
2019/11/29 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
HTML5的语法变化介绍
2013/08/13 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
祖国在我心中的演讲稿
2014/05/04 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
小平您好观后感
2015/06/09 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
js实现自动锁屏功能
2021/06/02 Javascript
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS