parent
6d2d5c7da7
commit
8416665ce3
@ -0,0 +1,75 @@ |
||||
package com.company.project.core; |
||||
|
||||
|
||||
import org.apache.ibatis.exceptions.TooManyResultsException; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import tk.mybatis.mapper.entity.Condition; |
||||
|
||||
import java.lang.reflect.Field; |
||||
import java.lang.reflect.ParameterizedType; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 基于通用MyBatis Mapper插件的Service接口的实现 |
||||
*/ |
||||
public abstract class AbstractService<T> implements Service<T> { |
||||
|
||||
@Autowired |
||||
protected Mapper<T> mapper; |
||||
|
||||
private Class<T> modelClass; // 当前泛型真实类型的Class
|
||||
|
||||
public AbstractService() { |
||||
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); |
||||
modelClass = (Class<T>) pt.getActualTypeArguments()[0]; |
||||
} |
||||
|
||||
public void save(T model) { |
||||
mapper.insertSelective(model); |
||||
} |
||||
|
||||
public void save(List<T> models) { |
||||
mapper.insertList(models); |
||||
} |
||||
|
||||
public void deleteById(Integer id) { |
||||
mapper.deleteByPrimaryKey(id); |
||||
} |
||||
|
||||
public void deleteByIds(String ids) { |
||||
mapper.deleteByIds(ids); |
||||
} |
||||
|
||||
public void update(T model) { |
||||
mapper.updateByPrimaryKeySelective(model); |
||||
} |
||||
|
||||
public T findById(Integer id) { |
||||
return mapper.selectByPrimaryKey(id); |
||||
} |
||||
|
||||
@Override |
||||
public T findBy(String property, Object value) throws TooManyResultsException { |
||||
try { |
||||
T model = modelClass.newInstance(); |
||||
Field field = modelClass.getDeclaredField(property); |
||||
field.setAccessible(true); |
||||
field.set(model, value); |
||||
return mapper.selectOne(model); |
||||
} catch (ReflectiveOperationException e) { |
||||
throw new ServiceException(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
public List<T> findByIds(String ids) { |
||||
return mapper.selectByIds(ids); |
||||
} |
||||
|
||||
public List<T> findByCondition(Condition condition) { |
||||
return mapper.selectByCondition(condition); |
||||
} |
||||
|
||||
public List<T> findAll() { |
||||
return mapper.selectAll(); |
||||
} |
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.company.project.core; |
||||
|
||||
import tk.mybatis.mapper.common.BaseMapper; |
||||
import tk.mybatis.mapper.common.ConditionMapper; |
||||
import tk.mybatis.mapper.common.IdsMapper; |
||||
import tk.mybatis.mapper.common.special.InsertListMapper; |
||||
|
||||
/** |
||||
* 定制版MyBatis Mapper插件接口,如需其他接口参考官方文档自行添加。 |
||||
*/ |
||||
public interface Mapper<T> |
||||
extends |
||||
BaseMapper<T>, |
||||
ConditionMapper<T>, |
||||
IdsMapper<T>, |
||||
InsertListMapper<T> { |
||||
} |
@ -0,0 +1,11 @@ |
||||
package com.company.project.core; |
||||
|
||||
/** |
||||
* 项目常量 |
||||
*/ |
||||
public final class ProjectConstant { |
||||
public static final String BASE_PACKAGE = "com.company.project";//项目基础包名称,根据自己的公司项目修改
|
||||
public static final String MAPPER_PACKAGE = BASE_PACKAGE + ".dao";//Mapper所在包
|
||||
public static final String MODEL_PACKAGE = BASE_PACKAGE + ".model";//Model所在包
|
||||
public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.Mapper";//Mapper插件基础接口的完全限定名
|
||||
} |
@ -0,0 +1,49 @@ |
||||
package com.company.project.core; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
|
||||
/** |
||||
* 统一API响应结果封装 |
||||
*/ |
||||
public class Result { |
||||
private int code; |
||||
private String message; |
||||
private Object data; |
||||
|
||||
public Result setCode(ResultCode resultCode) { |
||||
this.code = resultCode.code; |
||||
return this; |
||||
} |
||||
|
||||
public int getCode() { |
||||
return code; |
||||
} |
||||
|
||||
public Result setCode(int code) { |
||||
this.code = code; |
||||
return this; |
||||
} |
||||
|
||||
public String getMessage() { |
||||
return message; |
||||
} |
||||
|
||||
public Result setMessage(String message) { |
||||
this.message = message; |
||||
return this; |
||||
} |
||||
|
||||
public Object getData() { |
||||
return data; |
||||
} |
||||
|
||||
public Result setData(Object data) { |
||||
this.data = data; |
||||
return this; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return JSON.toJSONString(this); |
||||
} |
||||
} |
@ -0,0 +1,18 @@ |
||||
package com.company.project.core; |
||||
|
||||
/** |
||||
* 响应码枚举,参考HTTP状态码的语义 |
||||
*/ |
||||
public enum ResultCode { |
||||
SUCCESS(200),//成功
|
||||
FAIL(400),//失败
|
||||
UNAUTHORIZED(401),//未认证(签名错误)
|
||||
NOT_FOUND(404),//接口不存在
|
||||
INTERNAL_SERVER_ERROR(500);//服务器内部错误
|
||||
|
||||
public int code; |
||||
|
||||
ResultCode(int code) { |
||||
this.code = code; |
||||
} |
||||
} |
@ -0,0 +1,27 @@ |
||||
package com.company.project.core; |
||||
|
||||
/** |
||||
* 响应结果生成工具 |
||||
*/ |
||||
public class ResultGenerator { |
||||
private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS"; |
||||
|
||||
public static Result genSuccessResult() { |
||||
return new Result() |
||||
.setCode(ResultCode.SUCCESS) |
||||
.setMessage(DEFAULT_SUCCESS_MESSAGE); |
||||
} |
||||
|
||||
public static Result genSuccessResult(Object data) { |
||||
return new Result() |
||||
.setCode(ResultCode.SUCCESS) |
||||
.setMessage(DEFAULT_SUCCESS_MESSAGE) |
||||
.setData(data); |
||||
} |
||||
|
||||
public static Result genFailResult(String message) { |
||||
return new Result() |
||||
.setCode(ResultCode.FAIL) |
||||
.setMessage(message); |
||||
} |
||||
} |
@ -0,0 +1,22 @@ |
||||
package com.company.project.core; |
||||
|
||||
import org.apache.ibatis.exceptions.TooManyResultsException; |
||||
import tk.mybatis.mapper.entity.Condition; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Service 层 基础接口,其他Service 接口 请继承该接口 |
||||
*/ |
||||
public interface Service<T> { |
||||
void save(T model);//持久化
|
||||
void save(List<T> models);//批量持久化
|
||||
void deleteById(Integer id);//通过主鍵刪除
|
||||
void deleteByIds(String ids);//批量刪除 eg:ids -> “1,2,3,4”
|
||||
void update(T model);//更新
|
||||
T findById(Integer id);//通过ID查找
|
||||
T findBy(String property, Object value) throws TooManyResultsException; //通过某个成员属性查找,value需符合unique约束
|
||||
List<T> findByIds(String ids);//通过多个ID查找//eg:ids -> “1,2,3,4”
|
||||
List<T> findByCondition(Condition condition);//根据条件查找
|
||||
List<T> findAll();//获取所有
|
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.company.project.core; |
||||
|
||||
/** |
||||
* 服务(业务)异常如“ 账号或密码错误 ”,该异常只做INFO级别的日志记录 @see WebMvcConfigurer |
||||
*/ |
||||
public class ServiceException extends RuntimeException { |
||||
public ServiceException() { |
||||
} |
||||
|
||||
public ServiceException(String message) { |
||||
super(message); |
||||
} |
||||
|
||||
public ServiceException(String message, Throwable cause) { |
||||
super(message, cause); |
||||
} |
||||
} |
Loading…
Reference in new issue