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 elasticsearch安装以及部署教程
Jun 28 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
springboot 自定义配置 解决Boolean属性不生效
Mar 18 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
SpringBoot详解整合Redis缓存方法
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中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
js表单验证实例讲解
2016/03/31 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
文明社区申报材料
2014/08/21 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
辞职书格式样本
2015/02/26 职场文书