描述:Service业务层基类,所有service都应该继承该类
@Service public abstract class BaseService> { /** * 日志类 */ public Logger log = Logger.getLogger(BaseService.class); protected Class modelClass; //M的反射类型 M model; //model对象 //在构造器将泛型绑定,并实例化 @SuppressWarnings("unchecked") public BaseService(){ try { Type genType = getClass().getGenericSuperclass(); if(genType instanceof ParameterizedType){ ParameterizedType type = (ParameterizedType) genType; modelClass = (Class) type.getActualTypeArguments()[0]; model = (M)modelClass.newInstance(); } } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); } } /** * 分页 */ public Page paginate(PageBean pageBean, Map paraMap) { return null; } /** * 新增保存 * @param m 需要保存的实体对象 * @return 生成的主键ID,如果返回0,说明新增失败 */ public Integer save(M m) throws Exception { //获取对象主键字段的名称,默认主键名称为 id String pkName = "id"; Table tb = (Table) m.getClass().getAnnotation(Table.class); if(tb != null && StrKit.notBlank(tb.name()) && StrKit.notBlank(tb.pk())){ pkName = tb.pk(); } if(m.save()){ return m.getInt(pkName); }else{ return 0; } } /** * 修改保存 * @param m 需要修改保存的实体对象 * @return 受影响的行数,如果返回 1 说明修改成功,如果返回 0 说明修改失败 */ public Integer update(M m) throws Exception { if(m.update()){ return 1; }else{ return 0; } } /** * 根据主键ID查询返回实体对象 * @param id 主键ID * @return */ public M findById(Integer id) { return model.findById(id); } /** * 根据主键ID单条删除对象 * @param id 主键ID * @return 受影响的行数,如果返回 1 说明删除成功,如果返回 0 说明删除失败 */ public Integer deleteById(Integer id) { if(model.deleteById(id)){ return 1; }else{ return 0; } } /** * 批量删除,待完善 * @param ids 主键ID以逗号隔开的字符串 * @return 受影响的行数 */ public Integer deleteByIds(String ids) { //获取对象主键字段的名称,默认主键名称为 id String tableName = modelClass.getSimpleName(); //暂时随便写的,待完善 String pkName = "id"; Table tb = (Table) model.getClass().getAnnotation(Table.class); if(tb != null && StrKit.notBlank(tb.name()) && StrKit.notBlank(tb.pk())){ tableName = tb.name(); pkName = tb.pk(); } return Db.update("delete from "+tableName+" where "+pkName+" in ("+ids+")"); } }