一 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函数解决项目中编码非重复问题的实现方案!的更多相关文章

  1. Eclipse解决项目中找不到Maven Dependencies

    项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...

  2. IOS-在ARC项目中使用非ARC框架或者类库

    1.在ARC项目中使用非ARC框架或者类库 IOS 4引入了Automatic Reference Count(ARC),编译器可以在编译时对obj-c对象进行内存管理. 之前,obj-c的内存管理方 ...

  3. Java实现Mysql的 substring_index 函数功能

    Java实现Mysql数据库中 substring_index函数 前言: 由于hive中没有这个 substring_index函数,所以就自定义一个udf函数来调用使用.(不通过hive使用时可以 ...

  4. 解决项目中.a文件的冲突

    .a文件是静态文件,有多个.o文件组合而成的,在ios项目开发中,当引用第三方库的时候,时不时的会碰到诸如库冲突.库包含了某些禁用的API等问题,而这些库往往都被打包成了静态库文件(即 .a文件)来使 ...

  5. 解决项目中EF5.0升级到EF6.0无法安装包的方法

    今天在vs2012上新建了一个mvc4的项目,mvc4中默认的Entity Framework是5.0的版本,如下所示: 或者:,但是项目中有些要用到EF6.0的相关方法,用EF5.0实在繁琐,于是在 ...

  6. 解决项目中找不到Maven Dependencies

    项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies,自己百度了, 发现解决不了,最后发现在.classpath和 ...

  7. arc项目中使用非arc文件

    因为之前没有ARC机制,好多比较好的类库都是使用的非ARC,或是有些大牛还是不喜欢用ARC,封装的类也是非ARC的,想要在自己的ARC项目中使用这些非ARC类库,只需要简单的设置一下就可以了. 1.在 ...

  8. 【iOS开发】在ARC项目中使用非ARC文件

    ARC的出现应该说是开发者的一大福利,苹果是推荐使用的,但是因为之前没有ARC机制,好多比较好的类库都是使用的非ARC,或是有些大牛还是不喜欢用ARC,封装的类也是非ARC的,想要在自己的ARC项目中 ...

  9. leecode第二天-使用异或找出数组中的非重复元素

    leecode题目描述如下: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 思路: 最开始想到的是使用排序,排序之后就很容易找到非重复元素了. ...

随机推荐

  1. python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)

    ############################################################################################# ###### ...

  2. BZOJ5006 THUWC2017随机二分图(概率期望+状压dp)

    下称0类为单边,1类为互生边,2类为互斥边.对于一种匹配方案,考虑其出现的概率*2n后对答案的贡献,初始为1,如果有互斥边显然变为0,否则每有一对互生边其贡献*2.于是有一个显然的dp,即设f[S1] ...

  3. hdu-3308 LCIS (线段树区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. 查看Mysql正在执行的事务、锁、等待

    一.关于锁的三张表(MEMORY引擎) ## 当前运行的所有事务 mysql> select * from information_schema.innodb_trx\G; ********** ...

  5. BZOJ3835 [Poi2014]Supercomputer 【斜率优化】

    题目链接 BZOJ3835 题解 对于\(k\),设\(s[i]\)为深度大于\(i\)的点数 \[ans = max\{i + \lceil \frac{s[i]}{k}\} \rceil\] 最优 ...

  6. P4051 [JSOI2007]字符加密 解题报告

    P4051 [JSOI2007]字符加密 题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不 ...

  7. BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 )

    BZOJ.4034 [HAOI2015]树上操作 ( 点权树链剖分 线段树 ) 题意分析 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 ...

  8. 解题:POI 2014 Ant colony

    题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> # ...

  9. 1.Qt简介

    附件列表 1.Qt简介.png

  10. 【Asp.net入门2-01】C#基本功能

    C#是一种功能强大的语言,但并不是所有程序员都熟悉我们将在本书中讨论的所有功能.因此, 本章将介绍优秀的Web窗体程序员需要了解的C#语言功能. 本章仅简要介绍每一项功能.有关C#语言本身的知识不是本 ...