为了账号安全,请及时绑定邮箱和手机立即绑定

mybatis-plus的一些tips

标签:
Java Oracle

一些在使用springcloudmybatis-plus中遇到的小问题以及解决方法

oracle 列转行 LISTAGG和WM_CONCAT

对于将一列多值合并成一行问题,oracle提供了wmsys.wm_concatlistagg函数处理此问题。但是使用那一个函数具体得看数据库的版本
WMSYS.WM_CONCAT: 依赖WMSYS用户

LISTAGG: 11g2才提供的函数,不支持distinct

select listagg(多行转单行的列,分隔符) within group(order by 按哪一列分组) from tmp t group by 按哪一列分组  

用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来,非常方便

例子:

select * from SONG_INFO ALBUMS_INFO  

查出表的数据如图所示:
SQLfirst.png
现在我需要让两行中的名字合并成一行,并用“+”连接起来

select listagg(t.SONG_NAME, '+') within group (order by t.SONG_RD) as BelongSinger  
from (select * from SONG_INFO ALBUMS_INFO) t group by t.SONG_RD  

结果:
SQLSecond.png

mybatis-plus使用枚举类型

对于在代码中定义枚举类型,最好实现 IEnum 接口,并在配置文件中配置好扫描枚举类型的位置,否则会报下面的的错误。

java.lang.IllegalArgumentException: No enum constant com.content.enums.BusinessType.8  
at java.lang.Enum.valueOf(Enum.java:238) ~[na:1.8.0_144]  

配置文件设置:

mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler  
mybatis-plus.type-enums-package=com.content.enums  

具体可以参考:mybatis-plus官网

mybatis-plus关键字

对于oracle中定义的实体名称和数据库中的关键字冲突,强烈建议不要使用关键字作为实体名称,因为自己使用注解@TableField,也不一定能够解决。
比如:我在使用validate这个关键字的时候,就无法正常的解释过去

关键字.png

oracle序列

在java中使用update,并且主键是一个自增序列的话,如果另外有一个程序在批量导入数据,可能会导致休闲主键冲突的情况,这就是因为数据在导入的时候序列已经增长了,但是java代码还是使用自己原来每增长之前的序列,导致了冲突。

解决办法:

  1. 先得到当前的序列
  2. 获取数据库中数据的id最大值
  3. 设置增长序列下一次增长为数据库中id最大值减去当前序列
  4. 运行一次获取下一序列值
  5. 设置序列下一次增长为1
SELECT seq_t_test.CURRVAL FROM DUAL -- 获取当前序列值  
alter sequence seq_t_test increment by n -- n表示最大id值减去当前序列值  
SELECT seq_t_test.NEXTVAL FROM DUAL -- 增长一次  
  
alter sequence seq_t_test increment by 1 -- 设置回每次增长1  
SELECT seq_t_test.CURRVAL FROM DUAL  
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
17
获赞与收藏
99

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消