文档章节

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

 

© 著作权归作者所有

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

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

ioufev
2016/11/07
627
0
OpenJWeb快速开发平台数据库设计(一)(Oracle)

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

迷途d书童
2012/03/09
318
0
分布式系统中的ID生成

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

chaun
2015/12/01
99
0
基于 YMP 框架实现的验证码模块--YMP-Captcha

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

有理想的鱼
2017/05/05
292
0
使用 Dockerfile定制Java Web镜像

一、前言 对使用 Docker 搭建 Java Web 运行环境(利用 commit 理解镜像构成 来源:黄勇 )博文的归纳: 1、启动容器: docker run <相关参数> <镜像 ID> <初始命令> -i:表示以“交互模式”运...

吴伟祥
11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
4
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
4
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部