(九)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - maven构建ant-framework核心代码Base封装

今天重点讲解的是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 {

}

  1. 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);

}

  1. 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);

``}

}

5.架构代码如下:

相关推荐
cts6181 小时前
Milvus分布式数据库工作职责
数据库·分布式·milvus
2401_831501732 小时前
Linux之Zabbix分布式监控篇(二)
数据库·分布式·zabbix
cui_win11 小时前
Kafka 配置参数详解:ZooKeeper 模式与 KRaft 模式对比
分布式·zookeeper·kafka
liux352813 小时前
Zabbix 分布式监控系统架构设计与优化
分布式·zabbix
cui_win15 小时前
深入理解 Kafka 核心:主题、分区与副本的协同机制
网络·分布式·kafka
淦暴尼15 小时前
基于spark的二手房数据分析可视化系统
大数据·分布式·数据分析·spark
设计师小聂!16 小时前
尚庭公寓----------分页查询
java·开发语言·spring·maven·mybatis
黄雪超18 小时前
Kafka——无消息丢失配置怎么实现?
大数据·分布式·kafka
无问81719 小时前
RabbitMQ概述和工作模式
分布式·rabbitmq·ruby
秋秋棠1 天前
MyBatis延迟加载(Lazy Loading)之“关联查询”深度解析与实践
java·mybatis