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输出Hello World完美过程解析
Jun 13 Java/Android
Win10系统下配置Java环境变量
Jun 13 Java/Android
Spring Data JPA使用JPQL与原生SQL进行查询的操作
Jun 15 Java/Android
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
Java比较两个对象中全部属性值是否相等的方法
Aug 07 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 Java/Android
OpenFeign实现远程调用
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
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
JavaScript闭包详解
2015/02/02 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
python海龟绘图实例教程
2014/07/24 Python
Python类属性的延迟计算
2016/10/22 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python如何实现图片压缩
2020/09/11 Python
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
会计主管岗位职责
2014/01/03 职场文书
美术专业自荐信
2014/07/07 职场文书
工厂标语大全
2014/10/06 职场文书
信访维稳承诺书
2015/05/04 职场文书
道歉信怎么写
2015/05/12 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers