(九)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 { 

        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.mzph.cn/news/699794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统推荐算法库使用--mahout初体验

文章目录 前言环境准备调用混合总结 前言 郑重声明&#xff1a;本博文做法仅限毕设糊弄老师使用&#xff0c;不建议生产环境使用&#xff01;&#xff01;&#xff01; 老项目缝缝补补又是三年&#xff0c;本来是打算直接重写写个社区然后给毕设使用的。但是怎么说呢&#xff…

数学家的趣闻轶事65则

目录 前言趣闻轶事65则参考文献 前言 有人的地方就有江湖&#xff0c;有江湖的地方就有故事。数学本身就是一个江湖&#xff0c;这个江湖也充满着血雨腥风和侠骨柔情&#xff0c;至今流传着各种各样的传说&#xff0c;其中不乏”马踏江湖潇潇事“&#xff0c;也有"何当共…

adb-连接模拟器和真机操作

目录 1. 连接模拟器&#xff08;夜神模拟器示例&#xff09; 1.1 启动并连接模拟器 1.2 开启调试模式 2. USB连接真机调试 2.1 usb数据线连接好电脑&#xff0c;手机打开调试模式 2.2 输入adb devices检测手机 3. Wifi连接真机调试 3.1 USB连接手机和电脑 3.2 运行 adb…

什么是抖音视频下载软件|视频批量下载|爬虫工具

抖音视频抓取软件是一款方便用户获取抖音平台上视频内容的工具。它具备以下主要功能&#xff1a; 批量视频提取&#xff1a;用户可以输入关键词&#xff0c;软件将自动搜索抖音平台上与关键词相关的视频&#xff0c;并将它们列出供用户选择和下载。用户可以随时停止搜索和下载过…

爬取m3u8视频

网址&#xff1a;https://www.bhlsm.com/cupfoxplay/609-3-1/ 相关代码&#xff1a; #采集网址&#xff1a;https://www.bhlsm.com/cupfoxplay/609-3-1/ #正常视频网站&#xff1a;完整视频内容 # pip install pycryptodomex #流媒体文件&#xff1a;M3U8&#xff08;把完整的…

Vue+SpringBoot打造校园失物招领管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 校园失物招领…

抖音视频抓取软件的优势|视频评论内容提取器|批量视频下载

抖音视频抓取软件在市场上的优势明显&#xff1a; 功能强大&#xff1a;我们的软件支持关键词搜索抓取和分享链接单一视频提取两种方式&#xff0c;满足用户不同的需求。同时&#xff0c;支持批量处理数据&#xff0c;提高用户获取视频的效率。 操作简单&#xff1a;我们的软件…

C#实用开发(14)--高清晰度字体和窗体分辨率问题。

新建winform程序是&#xff0c;又是会感觉到字体清晰度不够高。还有一种现象就是分辨率的问题&#xff0c;我们平常在自己的电脑开发是用125百分比的分辨率&#xff0c;实际部署的工控机是100&#xff0c;这就会导致分辨率不一致的问题。 可以通过新建应用程序清单&#xff0c;…

ABAP 导入Excel表示例程序

目录 ABAP 导入excel示例程序创建程序使用的结构上传下载模板 ABAP 导入excel示例程序 批量导入程序&#xff0c;需要使用到导入模板&#xff0c;首先需要创建程序&#xff0c;之后是需要创建excel导入模板&#xff0c;并且需要将excel导入模板上传到SAP系统里面&#xff0c;之…

2023 re:Invent 用 PartyRock 10 分钟构建你的 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢&#xff0c;每次都能带来一些最前沿的方向标&#xff0c;这次也不例外。在看完一些 keynote 和介绍之后&#xff0c;我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…

【数据结构】每天五分钟,快速入门数据结构(二)——链表

目录 一 构建一个单向链表 二 特点 三 时间复杂度 四 相关算法 1.判断链表是否成环及成环位置 2.链表反转 五 Java中的LinkedList 类 1.使用 2.LinkedList 方法 一 构建一个单向链表 // 设计链表结构class ListNode {int val;ListNode next;ListNode(){}ListNode(int…

LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序

【LetMeFly】2583.二叉树中的第 K 大层和&#xff1a;层序遍历 排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/kth-largest-sum-in-a-binary-tree/ 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k …

Oracle迁移到mysql-表结构的坑

1.mysql中id自增字段必须是整数类型 id BIGINT AUTO_INCREMENT not null, 2.VARCHAR2改为VARCHAR 3.NUMBER(16)改为decimal(16,0) 4.date改为datetime 5.mysql范围分区必须int格式&#xff0c;不能list类型 ERROR 1697 (HY000): VALUES value for partition …

【Java】RestClient的使用

RestClient的使用 先导入Maven坐标&#xff0c;要和elasticsearch和kibana的版本保持一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1<…

JAVA工程师面试专题-Mysql篇

一、基础 1、mysql可以使用多少列创建索引&#xff1f; 16 2、mysql常用的存储引擎有哪些 存储引擎Storage engine&#xff1a;MySQL中的数据、索引以及其他对象是如何存储的&#xff0c;是一套文件系统的实现。常用的存储引擎有以下&#xff1a; Innodb引擎&#xff1a;In…

单片机04__基本定时器__毫秒微秒延时

基本定时器__毫秒微秒延时 基本定时器介绍&#xff08;STM32F40x&#xff09; STM32F40X芯片一共包含14个定时器&#xff0c;这14个定时器分为3大类&#xff1a; 通用定时器 10个 TIM9-TIM1和TIM2-TIM5 具有基本定时器功能&#xff0c; 还具有输入捕获&#xff0c;输出比较功…

Django——ORM增删改查

基本对象 model.objects 创建数据 可以通过django编写的命令行方式快捷创建数据 python manage.py shell 如果对模型层有任何修改都需要重启shell&#xff0c;否则操作容易出错 在shell中我们需要先引入我们的模型&#xff0c;如from bookstore.models import Book 然后通过…

【接口加密】Java中的接口加密实践

目录 2.1 Java加密相关的基础知识 2.1.1 Java加密框架概述 2.1.2 Java加密常用算法介绍 2.2 Java中的接口加密实现 2.2.1 使用Java加密标准&#xff08;JCE&#xff09;实现接口加密 2.2.2 通过Bouncy Castle库实现接口加密 2.2.3 第三方加密工具的集成与应用 2.3 Java…

Uniapp-小程序简单的时间选择组件-年月日时分

文章目录 前言一、组件效果二、组件代码使用 总结 前言 uniapp小程序开发系列。本文实现一个简单时间选择控件。uniapp用个心仪时间控件真的麻烦。官方给得要么年月日&#xff0c;要么时分。产品只要年月日时分。这该怎么玩。旧项目没有引入ui框架&#xff0c;我也不想去引入&…

如何连接ACL认证的Redis

点击上方蓝字关注我 应用程序连接开启了ACL认证的Redis时与原先的方式有差别&#xff0c;本文介绍几种连接开启ACL认证的Redis的Redis的方法。 对于RedisACL认证相关内容&#xff0c;可以参考历史文章&#xff1a; Redis权限管理体系(一&#xff09;&#xff1a;客户端名及用户…