文档章节

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
博文 137
码字总数 54687
作品 0
杭州
程序员
Java微信扫码支付

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

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

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

有理想的鱼
2017/05/05
292
0
OpenJWeb快速开发平台数据库设计(一)(Oracle)

/ TABLENO:0010 * TABLENAME:序列号信息表(COMM_CONFIG) * TABLE DESC:为保证序列号生成与数据库无关,本系统单独建表存储不同序列号的当前值。本表只存储一条记录 * AUTHOR:王保政 * DATE:2...

迷途d书童
2012/03/09
288
0
SpringBoot集成SpringSecurity(入门级)

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

mmythos
2017/12/30
0
0
分布式系统中的ID生成

问题 在分布式系统中常遇到ID生成问题: 场景1,在分库分表中需要保证某类ID唯一,这样使用主键自增的策略就不再合适 场景2,需要某类ID需要具有同一特性来标识 诸如此类。 方案 有很多解决方...

chaun
2015/12/01
99
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
8分钟前
0
0
大数据技术的发展趋势

大数据领域已经涌现出了大量新的技术,它们成为大数据采集、存储、处理和呈现的有力武器。这些技术下一步将如何发展?它们之中哪些技术 将广为流行?又会诞生哪些新的技术? 技术趋向多样化,...

董黎明
11分钟前
1
0
谷歌浏览器插件入门示例

实现:任何网址实现图片下载和获取当前域名的cookies的json字符串。 图片下载是给小白用的,可以选中批量下载,获取cookies 是为了方便程序员调试用。 获取cookies: git地址: https://gite...

NLGBZJ
13分钟前
2
0
152. Maximum Product Subarray - LeetCode

Question 152. Maximum Product Subarray Solution 题目大意:求数列中连续子序列的最大连乘积 思路:动态规划实现,现在动态规划理解的还不透,照着公式往上套的,这个问题要注意正负,需要...

yysue
13分钟前
0
0
IDEA工具 jdk,tomcat,maven 配置

设置JDK、tomcat、maven的版本 一、JDK      如果下拉列表没有,SDKS ---> + ----> 选择下载的JDK目录 ---> APPLY OK    二、tomcat 三、Maven    四、生成 git 本地创库...

君千殇520
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部