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如何使用logback实现多环境配置?
Jun 16 Java/Android
详解Java实践之适配器模式
Jun 18 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
Netty分布式客户端接入流程初始化源码分析
Mar 25 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
java获取一个文本文件的编码(格式)信息
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中intval()等int转换时的意外异常情况
2013/06/21 PHP
浅析php工厂模式
2014/11/25 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python代码太长换行的实现
2019/07/05 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python进程池Pool应用实例分析
2019/11/27 Python
Python 解析xml文件的示例
2020/09/29 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
装修五一活动策划案
2014/01/23 职场文书
入党积极分子评语
2014/05/04 职场文书
爱祖国演讲稿
2014/05/04 职场文书
承诺书格式范文
2014/06/03 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers