开源项目地址: 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;
}
}