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 相关文章推荐
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
总结一下关于在Java8中使用stream流踩过的一些坑
Jun 24 Java/Android
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
springboot layui hutool Excel导入的实现
Mar 31 Java/Android
JavaWeb Servlet开发注册页面实例
Apr 11 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 Java/Android
springboot读取resources下文件的方式详解
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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
动态添加js事件实现代码
2009/03/12 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
ES6的新特性概览
2016/03/10 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
python进阶教程之动态类型详解
2014/08/30 Python
Python中AND、OR的一个使用小技巧
2015/02/18 Python
整理Python中的赋值运算符
2015/05/13 Python
深入解析Python中的线程同步方法
2016/06/14 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
python如何实现int函数的方法示例
2018/02/19 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
详解python程序中的多任务
2020/09/16 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
小学生元旦广播稿
2014/02/21 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
开天辟地观后感
2015/06/09 职场文书
Hive常用日期格式转换语法
2022/06/25 数据库