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

相关推荐
程序猿阿伟15 小时前
《分布式追踪Span-业务标识融合:端到端业务可观测手册》
分布式
曾经的三心草16 小时前
redis-9-集群
java·redis·mybatis
识君啊16 小时前
MyBatis-Plus 逻辑删除导致唯一索引冲突的解决方案
java·spring boot·mybatis·mybatis-plus·唯一索引·逻辑删除
消失的旧时光-194317 小时前
第十六课实战:分布式锁与限流设计 —— 从原理到可跑 Demo
redis·分布式·缓存
若水不如远方17 小时前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法
架构师刘伟17 小时前
MyBatis-Dynamic 进阶:无需实体类的全动态数据建模
mybatis
那我掉的头发算什么18 小时前
【Mybatis】Mybatis-plus使用介绍
服务器·数据库·后端·spring·mybatis
会算数的⑨18 小时前
Kafka知识点问题驱动式的回顾与复习——(一)
分布式·后端·中间件·kafka
张小凡vip18 小时前
Kafka--使用 Kafka Connect 导入/导出数据
分布式·kafka
回忆是昨天里的海18 小时前
kafka概述
分布式·kafka