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 相关文章推荐
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Android Studio 计算器开发
May 20 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 Java/Android
基于Android10渲染Surface的创建过程
Aug 14 Java/Android
SpringBoot Http远程调用的方法
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 cookie使用方法学习笔记分享
2013/11/07 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
vue v-model的用法解析
2020/10/19 Javascript
python数据结构之二叉树的建立实例
2014/04/29 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
Python中psutil的介绍与用法
2019/05/02 Python
如何基于python测量代码运行时间
2019/12/25 Python
Python3 集合set入门基础
2020/02/10 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
医院院务公开实施方案
2014/05/03 职场文书
中国梦团日活动总结
2014/07/07 职场文书
年检委托书
2014/08/30 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
2016银行求职自荐信
2016/01/28 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
python中的getter与setter你了解吗
2022/03/24 Python