一 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. html实现鼠标悬停变成手型实现方式

    1.采用a标签实现的方式 <a href="javascript:void()">内容</a> 2.采用CSS实现的方式 // 变手形 oElement.s ...

  2. struts下载文件

  3. BZOJ4519 CQOI2016不同的最小割(最小割+分治)

    最小割树:新建一个图,包含原图的所有点,初始没有边.任取两点跑最小割,给两点连上权值为最小割的边,之后对于两个割集分别做同样的操作.最后会形成一棵树,树上两点间路径的最小值即为两点最小割.证明一点都不 ...

  4. WampServer3.0允许局域网访问配置教程

    wamp server 下的Apache默认设置是不允许外网访问和局域网访问的,而直接搜索 wamp局域网访问配置,出现都是一些旧版本的wamp的配置信息,最新版本3.0.X需要使用以下配置方法: 配 ...

  5. 【BZOJ2118】墨墨的等式(最短路)

    [BZOJ2118]墨墨的等式(最短路) 题面 BZOJ 洛谷 题解 和跳楼机那题是一样的. 只不过走的方式从\(3\)种变成了\(n\)种而已,其他的根本没有区别了. #include<ios ...

  6. zookeeper的安装及共享锁的应用

         Zookeeper的安装及共享锁的应用 1.zookeeper的安装 1.1  下载安装包 Wget http://mirror.bit.edu.cn/apache/zookeeper/zo ...

  7. RabbitMQ 运转流程

    生产者发送消息 1.生产者连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel) 2.生产者声明一个交换器,并设置相关属性,比如交换机类型.是否持 ...

  8. 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目

    本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...

  9. MongoDB用户授权和管理

    转载于https://blog.csdn.net/yu757371316/article/details/55210536 1.mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过sh ...

  10. asp.net获取当前页面的url地址

    设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...