开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 1459|回复: 2

(九) 构建dubbo分布式平台-maven构建ant-framework核心代码Base封装

[复制链接]

0

精华

0

贡献

9

赞扬

帖子
59
软币
271
在线时间
10 小时
注册时间
2018-1-8
发表于 2018-3-9 15:14:51 | 显示全部楼层 |阅读模式
上一篇我们介绍《构建dubbo分布式平台-maven构建ant-framework核心代码annotation》,今天重点讲解的是ant-framework核心代码Base封装过程。

因为涉及到springmvc、mybatis的集成,为了使项目编码更简洁易用,这边将基础的BASE进行封装,其中包括:BaseBean、BaseDao、BaseService、CRUD的基础封装、分页组件的封装、mybatis的mapper的基础封装,各种数据源支持的封装等。

1. BaseEntity基础封装,代码如下:
[Java] 纯文本查看 复制代码
/**
 * 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集成方案,只需要保留接口即可),代码如下
[Java] 纯文本查看 复制代码
public interface BaseDao {
}

3. CrudDao的基础封装
[Java] 纯文本查看 复制代码
/**
 * 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等)
[Java] 纯文本查看 复制代码
/**
 * 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分布式平台》,希望大家持续关注后面的文章!
愿意了解框架技术或者源码的朋友直接求求交流分享技术:贰零四贰八四九贰叁柒

回复

使用道具 举报

0

精华

0

贡献

10

赞扬

帖子
36
软币
188
在线时间
4 小时
注册时间
2017-10-25
发表于 2018-3-9 15:23:55 | 显示全部楼层
思路清晰,写的不错!有用
回复

使用道具 举报

0

精华

0

贡献

5

赞扬

帖子
51
软币
211
在线时间
7 小时
注册时间
2017-9-26
发表于 2018-3-9 15:27:23 | 显示全部楼层
总结的很经典~授用了
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-17 03:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表