使用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题目描述如下: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 思路: 最开始想到的是使用排序,排序之后就很容易找到非重复元素了. ...
 
随机推荐
- html实现鼠标悬停变成手型实现方式
			
1.采用a标签实现的方式 <a href="javascript:void()">内容</a> 2.采用CSS实现的方式 // 变手形 oElement.s ...
 - struts下载文件
 - BZOJ4519 CQOI2016不同的最小割(最小割+分治)
			
最小割树:新建一个图,包含原图的所有点,初始没有边.任取两点跑最小割,给两点连上权值为最小割的边,之后对于两个割集分别做同样的操作.最后会形成一棵树,树上两点间路径的最小值即为两点最小割.证明一点都不 ...
 - WampServer3.0允许局域网访问配置教程
			
wamp server 下的Apache默认设置是不允许外网访问和局域网访问的,而直接搜索 wamp局域网访问配置,出现都是一些旧版本的wamp的配置信息,最新版本3.0.X需要使用以下配置方法: 配 ...
 - 【BZOJ2118】墨墨的等式(最短路)
			
[BZOJ2118]墨墨的等式(最短路) 题面 BZOJ 洛谷 题解 和跳楼机那题是一样的. 只不过走的方式从\(3\)种变成了\(n\)种而已,其他的根本没有区别了. #include<ios ...
 - zookeeper的安装及共享锁的应用
			
Zookeeper的安装及共享锁的应用 1.zookeeper的安装 1.1 下载安装包 Wget http://mirror.bit.edu.cn/apache/zookeeper/zo ...
 - RabbitMQ 运转流程
			
生产者发送消息 1.生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel) 2.生产者声明一个交换器,并设置相关属性,比如交换机类型.是否持 ...
 - 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目
			
本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...
 - MongoDB用户授权和管理
			
转载于https://blog.csdn.net/yu757371316/article/details/55210536 1.mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过sh ...
 - asp.net获取当前页面的url地址
			
设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...