(九)springmvc+mybatis+dubbo+zookeeper分佈式架構 整合 - maven構建ant-framework核心代碼Base封裝

今天重點講解的是ant-framework核心代碼Base封裝過程。spring

由於涉及到springmvc、mybatis的集成,爲了使項目編碼更簡潔易用,這邊將基礎的BASE進行封裝,其中包括:BaseBean、BaseDao、BaseService、CRUD的基礎封裝、分頁組件的封裝、mybatis的mapper的基礎封裝,各類數據源支持的封裝等。mybatis

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集成方案,只須要保留接口便可),代碼以下:mvc

public interface BaseDao {  
    }

3. CrudDao的基礎封裝app

/** 
     * 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等)ide

/** 
     * 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);  
        }  
    }

5.架構代碼以下:this

文章內容不寫太多,但願你們可以掌握每個知識點,基礎的CRUD,BASE的封裝差很少都在這裏,後面會繼續補充,具體的業務和實現後面會講解到。編碼

資料和源碼來源code

相關文章
相關標籤/搜索