java面向接口编程的使用

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;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/83149342