javaweb使用自定义id,快速编码与生成ID
博客专区 > 尾生 的博客 > 博客详情
javaweb使用自定义id,快速编码与生成ID
尾生 发表于10个月前
javaweb使用自定义id,快速编码与生成ID
  • 发表于 10个月前
  • 阅读 50
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 不适用mysql or hibernate的增策略,而是使用自身的id

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

 

标签: Java Java EE Hibernate
共有 人打赏支持
粉丝 15
博文 123
码字总数 52010
×
尾生
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: