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 11 Java/Android
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
SpringBoot整合JWT的入门指南
Jun 29 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Java 轮询锁使用时遇到问题
May 11 Java/Android
Android中View.post和Handler.post的关系
Jun 05 Java/Android
Java中的Kotlin 内部类原理
Jun 16 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Python实现k-means算法
2018/02/23 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
python读取图片任意范围区域
2019/01/23 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
工商管理专业应届生求职信
2013/11/04 职场文书
高一政治教学反思
2014/01/28 职场文书
幼儿教师研修感言
2014/02/12 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL