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 相关文章推荐
分析并发编程之LongAdder原理
Jun 29 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
Jan 22 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
Spring Security动态权限的实现方法详解
Jun 16 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 Java/Android
Spring中bean集合注入的方法详解
Jul 07 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
详解Angularjs filter过滤器
2016/02/06 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
跟老齐学Python之开始真正编程
2014/09/12 Python
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
感恩的演讲稿
2014/05/06 职场文书
住宅使用说明书
2014/05/09 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
甲午大海战观后感
2015/06/02 职场文书
php实例化对象的实例方法
2021/11/17 PHP
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js