文档章节

javaweb使用自定义id,快速编码与生成ID

尾生
 尾生
发布于 2017/02/15 20:25
字数 404
阅读 52
收藏 1

项目需求,要求id改变1++的自增策略,而是使用自定义的varchar类型,长度定位24;

规则:

订单id : ord + 随机数+ 时间戳 

渠道id : ch +随机数 +时间戳

等,可自行设置规则

工具类:

import java.util.Random;

public class IdUtil {

	private static final Random _Rand = new Random();
	private static final char[] _number = ("0123456789").toCharArray();
	
	/**
	 * 获取指定位数数字 
	 * @param length
	 * @return
	 */
	public static final String RandNum(int length){
		String rand = "";
		for(int i=0,s=_number.length;i<length;i++){
			rand = rand + _number[_Rand.nextInt(s)];
		}
		return rand;
	}
	
	/**
	 * 生成user_id 
         * 根据等级规则
	 * @return
	 */
	public static final String getUid(int levelCode)
	{
		// UID + 00 + 13 = 18位
		long time = System.currentTimeMillis();
		return "UID"+(levelCode<10?"0":"")+levelCode+time;
	}
	
	/**
	 * 生成广告id,16位,ADV + time13 
	 * @return
	 */
	public static final String getAdvId(){
		long time = System.currentTimeMillis();
		return "ADV"+time;
	}
	
	 
	
	/**
	 * log记录id 
	 * @return
	 */
	public static final String getLogId(){
		long time = System.currentTimeMillis();
		return "LOG" + time + RandNum(3);
	}
}

 

hibernatePo设置

项目中集成hibernate映射, 因此,我们必须把其相对应的Po的主键生成策略注释掉;

@Id
	//@GeneratedValue 主键生成策略
	@Column(name = "id", unique = true, nullable = false)
	public long getId() {
		return id;
	}

 

hibernateSave方法重载

在调用hibernate save对象前,调用工具类手动生成UUID,赋值到对象中,save即可;

这里是不同类型表,生成不同ID,更近instanceof 判断类型,而调用相对于的Id方法

public Serializable saveReturnIdByUUID(Object entity) {
		/** 
		 * XX表
		 */
		if(entity instanceof UserNamePo){ 
			UserNamePo tempPo = (UserNamePo) entity;
			tempPo.setUserId(IdUtil.getUid());
			logger.info("手动生成id策略: 生成id值为:"+ tempPo.getUserId() );
			return saveReturnId(tempPo);
		}
		/**
		 * XX表
		 */
		if(entity instanceof AdvertInfoPo){ 
			AdvertInfoPo tempPo = (AdvertInfoPo) entity;
			tempPo.setAdvId(IdUtil.getAdvId());
			logger.info("手动生成id策略: 生成id值为:"+ tempPo.getAdvId() );
			return saveReturnId(tempPo);
		} 
		
		return null;
}

 

© 著作权归作者所有

共有 人打赏支持
尾生
粉丝 15
博文 138
码字总数 54708
作品 0
杭州
程序员
私信 提问
Java微信扫码支付

前言:让我用Java写个微信扫码支付,身为小白,网上搜了好多文章,终于找到一个看得明白的,链接。表示人家讲的够详细了,现在自己要是实现一个,我觉得吧,可能入手比较乱。其实后来发现,代...

ioufev
2016/11/07
627
0
基于 YMP 框架实现的验证码模块--YMP-Captcha

Captcha 基于YMP框架实现的验证码模块,支持图片、邮件和短信三种验证类型,采用注解方式进行验证,配置简单、灵活,可自定义扩展; Maven包依赖 搭建模块工程 首先,你需要创建一个基于YMP...

有理想的鱼
2017/05/05
292
0
SpringMVC接口权限拦截器的实现

背景 每个网站都会和其它的公司或者平台有对接,有的公司内部的也会有接口的相互调用。但是接口的直接开放并不安全,必须有对应的令牌才能保证安全。令牌在什么时候去校验?自然是请求过来时...

文心丶雕龙
03/06
14
0
自定义注解和解析器实现ButterKnife(Demo

本文同步发布于搁置了一年的个人博客http://mrrobot97.me 相信绝大部分的Android开发者都曾使用过ButterKnife, 利用ButterKnife开发者可以快速的实现实体view与xml的绑定,此外还能绑定各种资...

mrrobot97
01/05
0
0
SpringBoot集成SpringSecurity(入门级)

Springboot集成SpringSecurity 目录创建于2017-12-18 Springboot集成SpringSecurity Demo 快速上手-初步入门: 创建单用户单角色的安全控制 添加依赖...

mmythos
2017/12/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最重要的是做什么,而不是怎么做。

最重要的是做什么,而不是怎么做。 做什么是战略,怎么做是战术。将军下令说,天黑前拿下这座山头,这是战略。手下的士兵可以不知道为什么要拿下这座山头,还非得是天黑之前,但士兵必须知道...

我是菜鸟我骄傲
33分钟前
0
0
w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
2
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
3
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部