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

news/2024/4/19 20:39:29/

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

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

       

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

 


http://www.ppmy.cn/news/1360394.html

相关文章

ChatGPT/GPT4科研应用与AI绘图及论文写作

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

ACM题解Day6 | 质数素数模块 | 完数难题

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门算法 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽…

T-Dongle-S3开发笔记——分区表

参考&#xff1a; ESP32之 ESP-IDF 教学&#xff08;十三&#xff09;—— 分区表_esp32分区表-CSDN博客 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 分区表是 ESP32 划分内部 flash 闪存的清单&#xff0c;它将 flash 划分为多个不同功能的区域用于…

智慧公厕是什么?智慧公厕是构建智慧城市的环境卫生基石

随着城市化进程的不断加速&#xff0c;城市人口密度和流动性也逐渐增大&#xff0c;对城市公共设施的需求与日俱增。而在这些公共设施中&#xff0c;公厕作为城市基础设施中不可或缺的一环&#xff0c;对城市的环境卫生和市民生活质量起着举足轻重的作用。如何提高公厕的管理效…

挑战杯 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

强大的文本绘图——PlantUML

PlantUML是一款开源工具&#xff0c;它允许用户通过简单的文本描述来创建UML图&#xff08;统一建模语言图&#xff09;。这种方法可以快速地绘制类图、用例图、序列图、状态图、活动图、组件图和部署图等UML图表。PlantUML使用一种领域特定语言&#xff08;DSL&#xff09;&am…

如何利用maven进行依赖管理

Maven 提供了强大的依赖管理功能,让我们能够轻松管理项目的依赖关系,确保项目能够正确地构建和运行。以下是关于 Maven 依赖管理的一些重要特点 声明依赖 我们可以在项目的 POM 文件中声明项目所依赖的外部库或者其他模块。通过在 <dependencies> 元素下添加 <dep…

springboot+vue网站开发02-前端页面的渲染代码展示

springbootvue网站开发02-前端页面的渲染代码展示&#xff01;经过上面2个小节的分享&#xff0c;我们已经准备好了前端渲染所需要的数据接口了。可以给大家正常返回新闻分类的信息了。 下面给大家看看&#xff0c;前端vue网站开发的代码&#xff0c;已经渲染的业务流程是什么。…

前后端分离项目跨域问题解决方案

一、CorsFilter 代码解读 Component这个类被标记为Spring组件&#xff0c;表示它将由Spring容器进行管理。 Order(Ordered.HIGHEST_PRECEDENCE)这个注解表明这个组件的加载顺序&#xff0c;Ordered.HIGHEST_PRECEDENCE表示最高优先级&#xff0c;将在其他过滤器之前执行。 W…

校招面试Java、springboot、mysql基本问题

这里有一些常见的Java、Spring Boot和MySQL面试问题&#xff1a; Java面试问题&#xff1a; Java中的基本数据类型有哪些&#xff1f;什么是Java中的自动装箱和拆箱&#xff1f;什么是面向对象编程&#xff1f;Java中的面向对象编程有哪些特性&#xff1f;Java中的异常处理机…

redmine旧系统迁移到docker中

redmine旧系统迁移到docker中 起因新的改变安装尝试处理插件问题自己的镜像 起因 旧系统是Linux&#xff0c;迁移redmine可谓是非常麻烦&#xff0c;安装redmine可是一个非人的折磨。 新的改变 使用docker做好一个环境&#xff0c;以后有需要的时候直接使用即可&#xff0c;…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

【Web前端笔记11】JavaScript基础与变量

前言 11 JavaScript基础与变量 一、Js简介 1、JavaScript核心部分&#xff1a; 2、有非常广泛的使用领域 3、JavaScript与ECMAScript的关系 4、JavaScript版本 二、JavaScript名词解释 三、变量命名规则 四、变量类型 六大基本数据类型&#xff1a; 1、数字类型 2、…

汽车研发与制造中英文对照

1、技术开发概念和定义 FPDS&#xff08;Ford Product Development System&#xff09;福特产品开发系统 threetype chassis 三类底盘 inter-citybus 长途客车 PassengerVehicle 乘用车 MPV&#xff08;Multi-PurposeVehicle&#xff09;多用途汽车 SUV&#xff08;Sports Uti…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

C语言-指针初学速成

1.指针是什么 C语言指针是一种特殊的变量&#xff0c;用于存储内存地址。它可以指向其他变量或者其他数据结构&#xff0c;通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存&#xff0c;以及进行复杂的数据操作。在C语言中&#…

k8s(2)

目录 一.二进制部署k8s 常见的K8S安装部署方式&#xff1a; k8s部署 二进制与高可用的区别 二.部署k8s 初始化操作&#xff1a; 每台node安装docker&#xff1a; 在 master01 节点上操作; 准备cfssl证书生成工具:&#xff1a; 执行脚本文件&#xff1a; 拉入etcd压缩包…

ArcgisForJS如何使用ArcGIS Server发布的切片地图服务?

文章目录 0.引言1.准备海量地理数据2.ArcGIS Server发布切片地图服务3.ArcgisForJS使用ArcGIS Server发布的切片地图服务 0.引言 ArcGIS Server是一个由Esri开发的地理信息系统&#xff08;GIS&#xff09;服务器软件&#xff0c;它提供了许多功能&#xff0c;包括发布切片地图…

「Python系列」Python标准库

文章目录 一、 os 模块&#xff1a;文件和目录操作二、 sys 模块&#xff1a;与Python解释器交互三、 datetime 模块&#xff1a;日期和时间处理四、 json 模块&#xff1a;处理JSON数据五、 re 模块&#xff1a;正则表达式六、 time模块1. 获取当前时间2. 延迟执行&#xff08…