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 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
详解Java实践之建造者模式
Jun 18 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 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
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
详谈python http长连接客户端
2017/06/12 Python
Python简单实现控制电脑的方法
2018/01/22 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python socket处理client连接过程解析
2020/03/18 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
校园歌咏比赛主持词
2014/03/18 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
财务年终工作总结大全
2019/06/20 职场文书
Golang: 内建容器的用法
2021/05/05 Golang