(九)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.架构代码如下:

相关推荐
donk131414 小时前
React Native for OpenHarmony 实战:三方库 react-native-step-indicator 的鸿蒙化适配指南
分布式·react native·react.js·wpf·harmonyos
梅菲塔亚17 小时前
Ceph分布式存储
分布式·ceph
夕除18 小时前
redis--主从还是集群,内存
java·spring·mybatis
驭渊的小故事18 小时前
MyBatis-Plus 实战指南:从基础 CRUD 到条件构造器与自定义 SQL(二)
数据库·sql·mybatis
acrel718 小时前
Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用
分布式·光伏并网
程序 代码狂人19 小时前
金融数仓体系与核心业务知识详解
大数据·分布式·spark
java_nnnn21 小时前
Redis 初识:从单体架构到分布式架构的演进
redis·分布式·架构
Sayai21 小时前
Kafka 2.8→3.9.1 跨大版本升级实战:ZooKeeper 同步升级、数据目录迁移与回滚预案全流程
大数据·运维·分布式·zookeeper·kafka
敲上瘾1 天前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务