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 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
Java 中的 Unsafe 魔法类的作用大全
Jun 26 Java/Android
利用Java设置Word文本框中的文字旋转方向的实现方法
Jun 28 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Java 异步任务计算FutureTask
Apr 28 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
spring 项目实现限流方法示例
Jul 15 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 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
Express使用html模板的详细代码
2017/09/18 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
vue-cli的eslint相关用法
2017/09/29 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python文件夹与文件的操作实现代码
2014/07/13 Python
python实现贪吃蛇游戏
2020/03/21 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
校园招聘策划书
2014/01/09 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2014年销售工作总结
2014/12/01 职场文书
大学军训决心书
2015/02/05 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技