使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!
一 SUBSTRING_INDEX函数介绍
作用:按关键字截取字符串
substring_index(str,delim,count)
说明:substring_index(被截取字段,关键字,关键字出现的次数)
例:select substring_index("她说,我是个好人,怎么办",",",2);
结国如图:
会从关键字第二次出现的位置开始截取.
但是如果次数是负数,则会从后往前截取,比如
从后面开始到,第二次出现的位置往前截取,这样就为编码方式提供了很好的实现技术支持!
二 编码思路
取要编码的名字的首字母大写,数字就是数字加下划线,后面再拼数字,从0开始,如果有重复的就加一,所以在保存数据的时候,得先去数据库里查询相同编码的下划线后面的数字,然后取个最大值,没有就取0,最后新数据的编码后面的数字就是这个最大值加一,可能有点绕,看代码就行:
String jianpin = PinYinUtil.getFirstSpell(roleName).toUpperCase();
//简拼相同的截取后面的数字取最大的一个
Integer maxJanpinNum = 0;
maxJanpinNum = getMaxJanpinNum(jianpin,projectId);
//设置字典编码
pmRole.setRoleCode(jianpin + "_" + maxJanpinNum);
dao.save(pmRole);
这一段是主逻辑,我们再看获取数字的方法代码:
public Integer getMaxJanpinNum(String jianpin,String projectId) {
Map<String, Object> param = new HashMap<>();
param.put("jianpin", jianpin);
param.put("projectId", projectId);
//简拼相同的截取后面的数字取最大的一个
Object maxJanpinNum = dao.getOneBySQL("pm.project.getMaxJanpinNum",param);
if(maxJanpinNum==null){
return 0;
}
return Integer.parseInt(maxJanpinNum.toString())+1;
}
最后我们再看这个sql:
<select id="getMaxJanpinNum" resultType="Integer">
<![CDATA[
select max(SUBSTRING_INDEX(t.dict_code,'_',-1)) from app_dict t where t.dict_code like concat(#{jianpin},'%') and dict_code=#{dictcode}
]]>
</select>
无非就是根据拼音模糊检索前缀相同编码的编码,然后利用这个函数从后往前截取到最后这个数字,再取数字中最大的一个,这样,不同的拼音最后一个肯定是0,然后依次累加,这样就解决了编码重复的问题.
使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!的更多相关文章
- Eclipse解决项目中找不到Maven Dependencies
项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...
- IOS-在ARC项目中使用非ARC框架或者类库
1.在ARC项目中使用非ARC框架或者类库 IOS 4引入了Automatic Reference Count(ARC),编译器可以在编译时对obj-c对象进行内存管理. 之前,obj-c的内存管理方 ...
- Java实现Mysql的 substring_index 函数功能
Java实现Mysql数据库中 substring_index函数 前言: 由于hive中没有这个 substring_index函数,所以就自定义一个udf函数来调用使用.(不通过hive使用时可以 ...
- 解决项目中.a文件的冲突
.a文件是静态文件,有多个.o文件组合而成的,在ios项目开发中,当引用第三方库的时候,时不时的会碰到诸如库冲突.库包含了某些禁用的API等问题,而这些库往往都被打包成了静态库文件(即 .a文件)来使 ...
- 解决项目中EF5.0升级到EF6.0无法安装包的方法
今天在vs2012上新建了一个mvc4的项目,mvc4中默认的Entity Framework是5.0的版本,如下所示: 或者:,但是项目中有些要用到EF6.0的相关方法,用EF5.0实在繁琐,于是在 ...
- 解决项目中找不到Maven Dependencies
项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies,自己百度了, 发现解决不了,最后发现在.classpath和 ...
- arc项目中使用非arc文件
因为之前没有ARC机制,好多比较好的类库都是使用的非ARC,或是有些大牛还是不喜欢用ARC,封装的类也是非ARC的,想要在自己的ARC项目中使用这些非ARC类库,只需要简单的设置一下就可以了. 1.在 ...
- 【iOS开发】在ARC项目中使用非ARC文件
ARC的出现应该说是开发者的一大福利,苹果是推荐使用的,但是因为之前没有ARC机制,好多比较好的类库都是使用的非ARC,或是有些大牛还是不喜欢用ARC,封装的类也是非ARC的,想要在自己的ARC项目中 ...
- leecode第二天-使用异或找出数组中的非重复元素
leecode题目描述如下: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 思路: 最开始想到的是使用排序,排序之后就很容易找到非重复元素了. ...
随机推荐
- Spring(1):Spring简介
一句话概括: Spring是一种轻量级控制反转IoC和面向切面AOP的容器框架 初衷: 使用接口编程而不是类 为javabean提供一个更好的应用配置框架 javabean是一种规范而不是技术.是指符 ...
- D-query SPOJ - DQUERY(模板莫队)
题意: 给定一个序列,询问m次,每次求出区间 [ L,R ] 有多少个不同数字. 套模板就好了...但我不大明白....我的写法为什么不行...唉... #include <iostream&g ...
- Make a Crystal UVA - 11014 (容斥定理)
题意:给定一个NxNxN的正方体,求出最多能选几个整数点,使得任意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O),那么所 ...
- Alpha 冲刺 —— 十分之九
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...
- mac 使用tree命令
下载软件包: http://mama.indstate.edu/users/ice/tree/ 安装说明: http://www.qiansw.com/mac-os-x-install-tree-co ...
- 解题:AHOI2017/HNOI2017 礼物
题面 先不管旋转操作,只考虑增加亮度这个操作.显然这个玩意的影响是相对于$x,y$固定的,所以可以枚举增加的亮度然后O(1)算出来.为了方便我们把这个操作换种方法表示,只让一个手环改变$[-m,m]$ ...
- [NOI2011]阿狸的打字机——AC自动机之fail树的利用
Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...
- luoguP2123 皇后游戏——微扰法的应用与排序传递性的证明
题目背景 还记得 NOIP 2012 提高组 Day1 的国王游戏吗?时光飞逝,光阴荏苒,两年 过去了.国王游戏早已过时,如今已被皇后游戏取代,请你来解决类似于国王游 戏的另一个问题. 题目描述 皇后 ...
- 【Asp.net入门3-05】处理JSON数据
- WebStorm 使用webpack打包(build) Vue 静态资源无法访问(路径不对)问题
在WebStorm中使用webpack打包 (命令npm run build) 后生成在项目的dist目录下,在浏览器打开,静态资源js.css等无法加载.因为打包时,资源使用了绝对路径. 解决: 打 ...