java面向接口编程:
业务模型基类 主要是放置创建人更新人等属性
public class BizModelBase {
private Integer createUser;
private String createUserName;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private Integer updateUser;
private String updateUserName;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String orgDataCode;
private String orgName;
private String orgManagerDataCode;
private String createAppId;
}
@Table(name="se_install_train")
public class InstallTrain extends BizModelBase{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer trainId;
private Integer checkId;
private String installApplyNumber;
}
接口
public interface InstallTrainMapper extends Mapper<InstallTrain>{
}
public interface Mapper<T> extends
BaseMapper<T>,
ExampleMapper<T>,
RowBoundsMapper<T>,
Marker {
}
public interface BaseMapper<T> extends
BaseSelectMapper<T>,
BaseInsertMapper<T>,
BaseUpdateMapper<T>,
BaseDeleteMapper<T> {
}
public interface BaseSelectMapper<T> extends
SelectOneMapper<T>,
SelectMapper<T>,
SelectAllMapper<T>,
SelectCountMapper<T>,
SelectByPrimaryKeyMapper<T>,
ExistsWithPrimaryKeyMapper<T> {
}
public interface SelectOneMapper<T> {
/**
* 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
*
* @param record
* @return
*/
@SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
T selectOne(T record);
}
public interface SelectByPrimaryKeyMapper<T> {
/**
* 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
*
* @param key
* @return
*/
@SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
T selectByPrimaryKey(Object key);
}
public class BaseSelectProvider extends MapperTemplate {
public BaseSelectProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
/**
* 查询
*
* @param ms
* @return
*/
public String selectOne(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
//修改返回值类型为实体类型
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectAllColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.whereAllIfColumns(entityClass, isNotEmpty()));
return sql.toString();
}
/**
* 查询
*
* @param ms
* @return
*/
public String select(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
//修改返回值类型为实体类型
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectAllColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.whereAllIfColumns(entityClass, isNotEmpty()));
sql.append(SqlHelper.orderByDefault(entityClass));
return sql.toString();
}
/**
* 查询
*
* @param ms
* @return
*/
public String selectByRowBounds(MappedStatement ms) {
return select(ms);
}
/**
* 根据主键进行查询
*
* @param ms
*/
public String selectByPrimaryKey(MappedStatement ms) {
final Class<?> entityClass = getEntityClass(ms);
//将返回值修改为实体类型
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectAllColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.wherePKColumns(entityClass));
return sql.toString();
}
/**
* 查询总数
*
* @param ms
* @return
*/
public String selectCount(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectCount(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.whereAllIfColumns(entityClass, isNotEmpty()));
return sql.toString();
}
/**
* 根据主键查询总数
*
* @param ms
* @return
*/
public String existsWithPrimaryKey(MappedStatement ms) {
Class<?> entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectCountExists(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.wherePKColumns(entityClass));
return sql.toString();
}
/**
* 查询全部结果
*
* @param ms
* @return
*/
public String selectAll(MappedStatement ms) {
final Class<?> entityClass = getEntityClass(ms);
//修改返回值类型为实体类型
setResultType(ms, entityClass);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.selectAllColumns(entityClass));
sql.append(SqlHelper.fromTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.orderByDefault(entityClass));
return sql.toString();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.userprofilemanager.installtrain.dao.InstallTrainMapper">
</mapper>
业务层
public interface InstallCheckService extends BaseService<InstallCheck>{
InstallCheck update(InstallCheck entity, String acceptdetails);
}
public interface BaseService<T>{
/**
* 根据Id查询实体
* @param id
* @return
*/
T getById(Object id);
/**
* 根据条件查询
* @param receiveParameterModel
* @return
*/
PageModel<T> getList(ReceiveParameterModel receiveParameterModel);
/**
* 插入实体
* @param entity
* @return
*/
T insert(T entity);
/**
* 更新实体
* @param entity
* @return
*/
T update(T entity);
/**
* 更新null值
* @param entity
* @return
*/
T updateNull(T entity) ;
void delete(List<Object> obj);
}
实现层
@Service
public class InstallTrainServiceImpl extends BaseServiceImpl<InstallTrainMapper,InstallTrain> implements InstallTrainService{
}
public class BaseServiceImpl<M extends Mapper<T>, T> implements BaseService<T> {
@Autowired
protected M mapper;
public T getById(Object id) {
return mapper.selectByPrimaryKey(id);
}
public PageModel<T> getList(ReceiveParameterModel receiveParameterModel) {
PageModel<T> pageModel = null;
if (receiveParameterModel != null) {
Class<T> clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Example example = ExampleUtil.getExample(clazz, receiveParameterModel);
if (receiveParameterModel.getPage() == null || receiveParameterModel.getRows() == null) {
Integer total = mapper.selectCountByExample(example);
List<T> list = mapper.selectByExample(example);
pageModel = new PageModel<T>(total, list);
}
if (receiveParameterModel.getPage() != null && receiveParameterModel.getRows() != null) {
PageHelper.startPage(receiveParameterModel.getPage(), receiveParameterModel.getRows());
pageModel = new PageModel<T>(mapper.selectByExample(example));
}
}
return pageModel;
}
public T insert(T entity) {
mapper.insert(entity);
return entity;
}
public T update(T entity) {
mapper.updateByPrimaryKeySelective(entity);
return entity;
}
public T updateNull(T entity) {
mapper.updateByPrimaryKey(entity);
return entity;
}
public void delete(List<Object> obj) {
obj.forEach(ob -> mapper.deleteByPrimaryKey(ob));
}
}
controller
@RestController
@RequestMapping("/installtrain")
public class InstallTrainController extends BaseController<InstallTrainService,InstallTrain>{
}
public class BaseController <M extends BaseService<T>,T> {
@Autowired
protected M service;
/*当前登录用户的登录的appid
*
* */
protected String getAppId()
{
HttpServletRequest request = getRequest();
return request.getHeader(Constant.APPID);
}
/*获取当前登录用户token
*
* */
protected String getToken()
{
HttpServletRequest request = getRequest();
return request.getHeader(Constant.TOKEN);
}
/*获取当前登录用户信息
*
* */
protected SessionData getCurrUserData()
{
return CacheUtil.GetSessionData(getRequest().getHeader(Constant.APPID),getRequest().getHeader(Constant.TOKEN));
}
protected HttpServletRequest getRequest()
{
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attributes.getRequest();
}
/**
* 添加实体
* @param entity
* @return
* @throws IllegalAccessException
*/
@PostMapping("/add")
public AssembleJSON add(T entity) throws IllegalAccessException {
Field[] declaredFields = entity.getClass().getDeclaredFields();
Field field = null;
for (Field declaredField : declaredFields) {
boolean annotationPresent = declaredField.isAnnotationPresent(Id.class);
if (annotationPresent) {
field = declaredField;
break;
}
}
if (field.getType() == String.class) {
field.setAccessible(true);
field.set(entity, CommonUtils.getUUID());
}
if(entity instanceof BizModelBase)
{
SessionData sessionData =getCurrUserData();
BizModelBase m =(BizModelBase)entity;
m.setCreateUser(sessionData.getUserId());
if (m.getCreateTime() == null) {
m.setCreateTime(new Date());
}
m.setCreateUserName(sessionData.getUserName());
m.setUpdateUser(sessionData.getUserId());
m.setUpdateUserName(sessionData.getUserName());
if (m.getUpdateTime() == null) {
m.setUpdateTime(new Date());
}
m.setOrgDataCode(sessionData.getOrgDataCode());
m.setOrgManagerDataCode(sessionData.getOrgManageDataCode());
m.setOrgName(sessionData.getOrgName());
m.setCreateAppId(sessionData.getAppid());
}
service.insert(entity);
return AssembleJSON.SUCCESS(entity);
}
/**
* 不更新null值
* @param entity
* @return
*/
@PostMapping("/upd")
public AssembleJSON update(T entity) {
if(entity instanceof BizModelBase)
{
SessionData sessionData =getCurrUserData();
BizModelBase m =(BizModelBase)entity;
m.setUpdateUser(sessionData.getUserId());
m.setUpdateUserName(sessionData.getUserName());
if (m.getUpdateTime() == null) {
m.setUpdateTime(new Date());
}
}
service.update(entity);
return AssembleJSON.SUCCESS(entity);
}
/**
* 更新空值
* @param entity
* @return
*/
@PostMapping("/updNull")
public AssembleJSON updateNull(T entity) {
if(entity instanceof BizModelBase)
{
SessionData sessionData =getCurrUserData();
BizModelBase m =(BizModelBase)entity;
m.setUpdateUser(sessionData.getUserId());
m.setUpdateUserName(sessionData.getUserName());
if (m.getUpdateTime() == null) {
m.setUpdateTime(new Date());
}
}
service.updateNull(entity);
return AssembleJSON.SUCCESS(entity);
}
/**
* 根据id查询
* @param id
* @return
*/
@GetMapping("/getById/{id}")
public AssembleJSON getById(@PathVariable Object id) {
if (id == null) {
return AssembleJSON.FAILURE("参数错误!",id);
}
Class<T> clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Field idField = getIdField(clazz);
if (idField.getType() == Integer.class) {
id = Integer.parseInt(id.toString());
}
return AssembleJSON.SUCCESS(service.getById(id));
}
/**
* 根据条件进行查询
* @param receiveParameterModel
* @return
*/
@PostMapping("/query")
public AssembleJSON getList(ReceiveParameterModel receiveParameterModel) {
return AssembleJSON.SUCCESS(service.getList(receiveParameterModel));
}
/**
* 删除实体
* @param ids
* @return
*/
@PostMapping("/del")
public AssembleJSON delete(String ids){
if (StringUtil.isEmpty(ids)) {
return AssembleJSON.FAILURE("参数错误",ids);
}
String[] split = ids.split(",");
List<Object> list = new ArrayList<>();
Class<T> clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[1];
Field idField = getIdField(clazz);
if (idField.getType() == Integer.class) {
if (split != null && split.length > 0) {
for (String s : split) {
list.add(Integer.parseInt(s));
}
}
}else {
list = Arrays.asList(split);
}
service.delete(list);
return AssembleJSON.SUCCESS;
}
private Field getIdField(Class<T> clazz) {
Field[] declaredFields = clazz.getDeclaredFields();
Field field = null;
for (Field declaredField : declaredFields) {
boolean annotationPresent = declaredField.isAnnotationPresent(Id.class);
if (annotationPresent) {
field = declaredField;
break;
}
}
return field;
}
}