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 21 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
Java中常用解析工具jackson及fastjson的使用
Jun 28 Java/Android
JavaWeb Servlet实现网页登录功能
Jul 04 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
Log4j.properties配置及其使用
Aug 02 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 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:风雨欲来 路在何方?
2006/10/09 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
网上抓的一个特效
2007/05/11 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
使用cx_freeze把python打包exe示例
2014/01/24 Python
python 生成器协程运算实例
2017/09/04 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
python db类用法说明
2020/07/07 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
护士的自我鉴定
2014/02/07 职场文书
如何写好竞聘报告
2019/04/03 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android