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中的static关键字
Jun 14 Java/Android
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
java多态注意项小结
Oct 16 Java/Android
带你了解Java中的ForkJoin
Apr 28 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
Android开发手册TextInputLayout样式使用示例
Jun 10 Java/Android
java.util.NoSuchElementException原因及两种解决方法
Jun 28 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 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中array_merge和array相加的区别分析
2013/06/17 PHP
php中{}大括号是什么意思
2013/12/01 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
简单了解Django ContentType内置组件
2019/07/23 Python
python实发邮件实例详解
2019/11/11 Python
logging level级别介绍
2020/02/21 Python
python 写一个性能测试工具(一)
2020/10/24 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
金融专业推荐信
2013/11/14 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
公司回复函格式
2015/07/14 职场文书
技能培训通讯稿
2015/07/18 职场文书
2019大学生实习报告
2019/06/21 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
Redis 限流器
2022/05/15 Redis
数据设计之权限的实现
2022/08/05 MySQL