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 相关文章推荐
Java各种比较对象的方式的对比总结
Jun 20 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Netty分布式客户端处理接入事件handle源码解析
Mar 25 Java/Android
mapstruct的用法之qualifiedByName示例详解
Apr 06 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
Android Gradle 插件自定义Plugin实现注意事项
Jun 16 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
Spring Boot实现文件上传下载
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验证码 附调用方法
2016/06/02 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
常用DOM整理
2015/06/16 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python中实现输入一个整数的案例
2020/05/03 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
药物学专业学生的自我评价
2013/10/27 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
房地产推广策划方案
2014/05/19 职场文书
项目经理任命书内容
2014/06/06 职场文书
学生逃课检讨书
2015/02/17 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers