借用Redis生成主键实现所有类新增不再需要手动配置主键,序列什么的通通GG

开源项目地址github开源链接

光想想都有点小兴奋呢,至少节约了几个人天吧,而且避免了出错,一旦需要修改了非常方便

所有service继承该baseservice,几乎不再需要考虑主键的事情了,单笔插入多笔插入通通帮你搞定,so easy~

KeyGenerate代码:使用redis生成数据库主键自增

废话不多,最后一句,上代码~

/**
 * 基础Service实现类
 * @author LeiYong
 *
 * @param <T>
 */
public  class BaseServiceImpl<T extends BaseModel> implements BaseService<T> {

	protected BaseMapper<T> baseMapper;

	private T baseData;
	@Autowired
	protected KeyGenerate keyGenerate;
	
	
	public BaseMapper<T> getBaseMapper() {
		return baseMapper;
	}

	public void setBaseMapper(BaseMapper<T> baseMapper) {
		this.baseMapper = baseMapper;
	}

	public Page<T> selectByEmail(String email){
		List<Model> conditions = MyBatisUtil.parseBase("email,=,"+email);
		return getBaseMapper().selectExtend(conditions, null, null);
	}
	@Override
	public T insertSelective(T data) {
		setPk(data);
		int result = baseMapper.insertSelective(data);
		if (result==1) {
			return data;
		}
		return null;
	}
	@Override
	public int insertBatch(List<T> list) {
		ArrayUtil.foreach(list,(T t,int i) -> setPk(t));
		return baseMapper.insertBatch(list);
	}


	@Override
	public int deleteByPK(String orgPk,String pk) {
		return baseMapper.deleteByPrimaryKey(orgPk,pk);
	}
	@Override
	public int deleteByBatch(String orgPk,String[] pks) {
		return  baseMapper.deleteByBatch(orgPk,pks);
	}
	@Override
	public int updateByPK(T data) {
		
		return baseMapper.updateByPrimaryKey(data);
	}
	@Override
	public int updateEnable(String orgPk, String status, String pk) {
		return baseMapper.updateState(orgPk, "enable", status, pk);
	}

	@Override
	public int updateEnables(String orgPk, String status, String... pks) {
		return baseMapper.updateStates(orgPk, "enable", status, pks);
	}
	/**
	 * 根据主键pk查询基本信息
	 */
	@Override
	public T findByPK(String orgPk,String pk) {
		return  baseMapper.selectByPrimaryKey(orgPk,pk);
	}

	@Override
	public Page<T> findByPage(T queryInfo, int pageNum, int pageSize,String orderBy) {
		PageHelper.startPage(pageNum, pageSize);
		return baseMapper.selectAllByCondition(queryInfo,orderBy);
	}
	
	@Override
	public Page<T> findAll(T queryInfo, String orderBy) {
		return baseMapper.selectAllByCondition(queryInfo,orderBy);
	}
	public Page<T> findByPage(List<Model> conditions, int pageNum, int pageSize, String order) {
		PageHelper.startPage(pageNum, pageSize);
		return getBaseMapper().selectExtend(conditions, null, order);
	}

	public Page<T> findAll(List<Model> conditions, String order) {
		return getBaseMapper().selectExtend(conditions, null, order);
	}
	/**
	 * 设置pk主键
	 * @param t
	 */
	public boolean setPk(T t){
		KeyGenerateEnum em = getKeyGenerateEnum();
		if (em != null) {
			Field idField = ReflectionUtil.findField(t.getClass(), "id", Long.class);
			//如果不存在id元素则采用String方式生成
			if (idField == null) {
				t.setPk(keyGenerate.generateStringKey(em));
			} else {
				//如果存在id元素则生成Long类型主键
				try {
					idField.setAccessible(true);
					idField.set(t, keyGenerate.generateLongKey(em));
				} catch (IllegalArgumentException | IllegalAccessException e) {
					throw new RuntimeException("生成主键遇到错误");
				}
			}
			return true;
		}
		return false;
	}
	/**
	 * 获取枚举类型
	 * @return
	 */
	public KeyGenerateEnum getKeyGenerateEnum(){
		Class<?> cls = ReflectionUtil.getGenericSuperclass(this.getClass());
		if (cls!=null) {
			KeyGenerateEnum em = KeyGenerateEnum.valueOf(cls.getSimpleName());
			return em;
		}
		return null;
	}
	
	public T getBaseData() {
		return baseData;
	}

	public void setBaseData(T baseData) {
		this.baseData = baseData;
	}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值