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各种比较对象的方式的对比总结
Jun 20 Java/Android
Java多条件判断场景中规则执行器的设计
Jun 26 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
java设计模式--原型模式详解
Jul 21 Java/Android
关于springboot 配置date字段返回时间戳的问题
Jul 25 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
java版 联机五子棋游戏
May 04 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
volatile保证可见性及重排序方法
Aug 05 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获取linux命令结果的实例
2017/03/13 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
Seajs源码详解分析
2019/04/02 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
快速查询Python文档方法分享
2017/12/27 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
python批量获取html内body内容的实例
2019/01/02 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
Python连接mysql方法及常用参数
2020/09/01 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
高三霸气励志标语
2014/06/24 职场文书
设计师求职信
2014/07/01 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
教师教育教学随笔
2015/08/15 职场文书
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
Nginx HTTP跳转至HTTPS
2022/05/15 Servers