上一篇我们介绍《构建dubbo分布式平台-maven构建ant-framework核心代码annotation》,今天重点讲解的是ant-framework核心代码Base封装过程。
因为涉及到springmvc、mybatis的集成,为了使项目编码更简洁易用,这边将基础的BASE进行封装,其中包括:BaseBean、BaseDao、BaseService、CRUD的基础封装、分页组件的封装、mybatis的mapper的基础封装,各种数据源支持的封装等。
1. BaseEntity基础封装,代码如下:
- /**
- * Entity基础封装
- */
- public abstract class BaseEntity<T> implements Serializable {
- private static final long serialVersionUID = 1234567890987654321L;
- /**
- * 实体编号(唯一标识)
- */
- protected String id;
- /**
- * 当前实体分页对象
- */
- protected Page<T> page;
- /**
- * 是否插入新纪录
- */
- protected boolean isNewRecord = false;
- public BaseEntity() {
- }
- public BaseEntity(String id) {
- this();
- this.id = id;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- /**
- * 数据插入之前
- */
- public abstract void preInsert();
- /**
- * 更新数据之前
- */
- public abstract void preUpdate();
- /**
- * 是否是新记录(默认:false)
- */
- public boolean getIsNewRecord() {
- return isNewRecord || StringUtils.isBlank(getId());
- }
- /**
- * 是否是新记录(默认:false)
- */
- public void setIsNewRecord(boolean isNewRecord) {
- this.isNewRecord = isNewRecord;
- }
- /**
- * 全局变量对象
- */
- @JsonIgnore
- public Global getGlobal() {
- return Global.getInstance();
- }
- @Override
- public boolean equals(Object obj) {
- if (null == obj) {
- return false;
- }
- if (this == obj) {
- return true;
- }
- if (!getClass().equals(obj.getClass())) {
- return false;
- }
- BaseEntity<?> that = (BaseEntity<?>) obj;
- return null == this.getId() ? false : this.getId().equals(that.getId());
- }
- }
2. BaseDao的基础封装(这个很简单,因为使用的是mybatis集成方案,只需要保留接口即可),代码如下:
- public interface BaseDao {
- }
3. CrudDao的基础封装
- /**
- * DAO基础封装
- */
- public interface CrudDao<T> extends BaseDao {
- /**
- * 获取单条数据
- * @param id
- * @return
- */
- public T get(String id);
- /**
- * 获取单条数据
- * @param entity
- * @return
- */
- public T get(T entity);
- /**
- * 查询数据列表,如果需要分页,请设置分页对象,如:entity.setPage(new Page<T>());
- * @param entity
- * @return
- */
- public List<T> findList(T entity);
- /**
- * 查询所有数据列表
- * @param entity
- * @return
- */
- public List<T> findAllList(T entity);
- /**
- * 查询所有数据列表
- * @see public List<T> findAllList(T entity)
- * @return
- */
- @Deprecated
- public List<T> findAllList();
- /**
- * 插入数据
- * @param entity
- * @return
- */
- public int insert(T entity);
- /**
- * 更新数据
- * @param entity
- * @return
- */
- public int update(T entity);
- /**
- * 删除数据
- * @param id
- * @see public int delete(T entity)
- * @return
- */
- @Deprecated
- public int delete(String id);
- /**
- * 删除数据
- * @param entity
- * @return
- */
- public int delete(T entity);
- }
4. BaseService的基础封装(里面封装了基础的CRUD操作,包括基础get,find,insert,update等)
- /**
- * BaseService基础封装
- */
- @Transactional(readOnly = true)
- public abstract class CrudService<D extends CrudDao<T>, T extends DataEntity<T>> extends BaseService {
- /**
- * 持久层dao
- */
- @Autowired
- protected D dao;
- /**
- * 获取单条数据
- * @param id
- * @return
- */
- public T get(String id) {
- return dao.get(id);
- }
- /**
- * 获取单条数据
- * @param entity
- * @return
- */
- public T get(T entity) {
- return dao.get(entity);
- }
- /**
- * 查询列表数据
- * @param entity
- * @return
- */
- public List<T> findList(T entity) {
- return dao.findList(entity);
- }
- /**
- * 查询分页数据
- * @param page 分页对象
- * @param entity
- * @return
- */
- public Page<T> findPage(Page<T> page, T entity) {
- entity.setPage(page);
- page.setList(dao.findList(entity));
- return page;
- }
- /**
- * 保存数据(插入或更新)
- * @param entity
- */
- @Transactional(readOnly = false)
- public void save(T entity) {
- if (entity.getIsNewRecord()){
- entity.preInsert();
- dao.insert(entity);
- }else{
- entity.preUpdate();
- dao.update(entity);
- }
- }
- /**
- * 删除数据
- * @param entity
- */
- @Transactional(readOnly = false)
- public void delete(T entity) {
- dao.delete(entity);
- }
- }
文章内容不写太多,希望大家能够掌握每一个知识点,基础的CRUD,BASE的封装差不多都在这里,后面会继续补充,具体的业务和实现后面会讲解到。
欢迎大家跟我一起学习《构建dubbo分布式平台》,希望大家持续关注后面的文章!
愿意了解框架技术或者源码的朋友直接求求交流分享技术:2042849237
分布式的一些解决方案,有愿意了解的朋友可以找我们团队探讨
更多详细源码参考来源:http://minglisoft.cn/technology