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 相关文章推荐
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
剑指Offer之Java算法习题精讲二叉树专项训练
Mar 21 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
Java 数组的使用
May 11 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 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过滤危险html代码
2008/08/18 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
PHP队列用法实例
2014/11/05 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python构建深度神经网络(续)
2018/03/10 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
django rest framework 自定义返回方式
2020/07/12 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
Python 操作 MySQL数据库
2020/09/18 Python
internal修饰符起什么作用
2013/12/16 面试题
机电专业毕业生推荐信
2013/11/10 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
环保倡议书格式范文
2014/05/14 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
停电通知范文
2015/04/16 职场文书
标枪加油稿
2015/07/22 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
golang连接MySQl使用sqlx库
2022/04/14 Golang
python数字图像处理之图像的批量处理
2022/06/28 Python