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 @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
Java方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
Java多条件判断场景中规则执行器的设计
Jun 26 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 Java/Android
正则表达式拆分url实例代码
Feb 24 Java/Android
Java并发编程之原子性-Atomic的使用
Mar 16 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
Apr 24 Java/Android
Java 异步任务计算FutureTask
Apr 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
PyQt5响应回车事件的方法
2019/06/25 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
前处理组长岗位职责
2014/03/01 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android