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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

项目需求,要求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

 

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;
}

 

转载于:https://my.oschina.net/java1314/blog/839525

你可能感兴趣的:(javaweb使用自定义id,快速编码与生成ID)