案例06-复用思想的接口和SQL
目录
一:背景介绍
二:思路&方案
三:过程
1.Controller层接口的复用
2.Mapper层sql语句的复用
四:总结
一:背景介绍
我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我们从数据库读或者存数据一样。我们想要什么数据就从数据库中获取什么样的数据。没有考虑是否浪费了资源的开销。代码是不是复用的问题。
以上两个图都是没有体现复用思想的例子。两个类似的业务场景写了两个接口、两个接口、两个实现类、两个sql,下面我们将上面的代码进行改造。
二:思路&方案
两个接口都是都是实现查询在线人员的情况,区别在去两个接口的入参不同。这里我们可以通过使用mybatis的动态SQL进行实现。
三:过程
1.Controller层接口的复用
Controller层
/** @description:查询课程内容* @author: 武梓龙* @date: 2023/3/7 16:00* @param: [courseContent]* @return: java.util.List<com.wangwei.mvc.entity.CourseContentEntity>**/@PostMapping("/queryCourseContent")public List<CourseContentEntity> queryCourseContent(@RequestBody CourseContentEntity courseContent){return iCourseContentService.queryCourseContent(courseContent);}
IService层
public interface ICourseContentService {List<CourseContentEntity> queryCourseContent(CourseContentEntity courseContent);
}
ServiceImpl层
/** @description:查询课程内容* @author: 武梓龙* @date: 2023/3/7 15:57* @param: [courseContent]* @return: java.util.List<com.wangwei.mvc.entity.CourseContentEntity>**/@Overridepublic List<CourseContentEntity> queryCourseContent(CourseContentEntity courseContent) {return courseContentMapper.queryCourseContentRecord(courseContent);}
Mapper层
List<CourseContentEntity> queryCourseContentRecord(CourseContentEntity courseContentEntity);<!--通用查询语句--><select id="queryCourseContentRecord" resultMap="courseContentMap" >SELECT id,course_assembly_id,assembly_content,create_time,created_id,created_by,update_time,updated_id,updated_byFROM tar_course_content_infoWhEREis_delete=0<if test="id != null"> and id = #{id} </if><if test="courseAssemblyId != null">and course_assembly_id = #{courseAssemblyId}</if><if test="assemblyContent != null">and assembly_content = #{assemblyContent}</if><if test="createdBy != null">and created_by = #{createdBy}</if><if test="updatedBy != null">and updated_by = #{updatedBy}</if><if test="remark != null">and remark = #{remark}</if></select>
结果


2.Mapper层sql语句的复用

结果
通过编写通用sql我们对于用一个表的查询(其他的增删改也是可以的)就只需要一个sql语句就可以了,通过传入的参数不同,我们得到的结果也会不同。以下是同一个sql语句传入两个参数和传输三个参数的结果。


四:总结
面向对象的三个特征是封装继承和多态,封装的目的就是让我们的代码复用性强。便于后期的维护。所以在我们进行编码之前首先要考虑的就是我们写的代码有没有通用性和抽象性。是不是别人有类似的业务的时候能复用我们写的代码。让我们编写的代码更加的有价值。
相关文章:
案例06-复用思想的接口和SQL
目录 一:背景介绍 二:思路&方案 三:过程 1.Controller层接口的复用 2.Mapper层sql语句的复用 四:总结 一:背景介绍 我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我…...
【Java学习笔记】17.Java 日期时间(2)
前言 本章继续介绍Java的日期时间。 Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案…...
【学习Docker(八)】Docker Canal的安装与卸载
座右铭:《坚持有效输出,创造价值无限》 最近想了解下canal,自行搭建并完成数据同步。经过了几天的踩坑之旅,今天终于搭建成功了。 环境:canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL 创建存放目录 mkdir /docker-localm…...
python的django框架从入门到熟练【保姆式教学】第三篇
在前两篇博客中,我们介绍了Django框架的模型层和数据库迁移功能。本篇博客将重点介绍Django的视图层(View),并讲解如何创建视图函数和URL路由。 视图层(View) Django的视图层是Django应用程序的另一个核心…...
Open3D(C++) Ransac拟合球体(详细过程版)
目录 一、算法原理1、计算流程2、参考文献二、代码实现三、结果展示一、算法原理 1、计算流程 空间球方程: ( x − a ) 2 + ( y − b...
Antlr Tool与antlr runtime的版本一致性问题
1. 意外的问题 在学习Antlr4的visitor模式时,使用IDEA的Antlr插件完成了Hello.g4文件的编译,指定的package为com.sunrise.hello 使用visitor模式遍历语法解析树,遍历过程中打印hello语句 public class HelloVisitorImpl extends HelloBaseVi…...
嵌入式中CAN测试自动化方法分析
can的基础知识 CAN是什么? CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类…...
基于c++、opencv、cuda、Visual Studio编程
一、前言 opencv自带的支持的cuda的函数不少,但是不一定够用,而且已经支持的函数有些还不是十分的完善。所以更多的时候还需要编写自己的kernel以进行加速自定义处理。如果基于opencv进行计算机视觉相关开发工作,那么熟悉c++、opencv、cuda编程是避免不了的环节。 二、准备工…...
MATLAB——DFT(离散傅里叶变换)
题目1: 已知有限长序列x(n)为: x(n)[0,1,2,3,4,5,6,7,8,9],求x(n)的DFT和IDFT。要求 1)画出序列傅里叶变换对应的|X(k)|和arg[X(k)]图形。 2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较。 知识点: DF…...
高端Zynq ultrascale+使用GTH回环测试 提供2套工程源码和技术支持
这目录1、前言2、GTH 高速收发器介绍GTH 高速收发器结构参考时钟的选择和分配GTH 发送端GTH 接收端3、vivado工程详解4、上板调试验证5、福利:工程代码的获取1、前言 Xilinx系列FPGA内置高速串行收发器,配有可配置的IP方便用户调用,按照速度…...
入门(Createing a scene)
这一部分将对three.js来做一个简要的介绍 首先将开始搭建一个场景,其中包含一个正在旋转的立方体 梦开始的地方 在开始使用threeJS之前,我们需要创建一个HTML文件来显示它(将下列HTML代码保存为你电脑上的一个HTML文件然后在你的浏览器中打…...
Unity入门精要03---透明效果
本节知识架构 1.渲染顺序与渲染队列 如果采用了透明度混合即要是实现半透明效果,那么就要关闭深度写入,那么此时渲染顺序就会变得非常非常重要,不然会出现不正确的遮挡效果。具体的分析可见书中解释 一句话概括就是因为没有写入深度…...
一文解码:如何在人工智能热潮下实现产业“智”变
近期由ChatGPT有关人工智能的话题引发了全民热议,在这股子浪潮下,讨论最多的话题就是ChatGPT的出现会为我们带来怎样的技术变革?是否会改变我们目前的生产方式?对于未来人工智能技术的发展,我们该如何客观看待…...
webshell管理工具-菜刀的管理操作
什么是webshell Webshell是一种运行在Web服务器上的脚本程序,通常由黑客使用来绕过服务器安全措施和获取对受攻击服务器的控制权。Webshell通常是通过利用Web应用程序中的漏洞或者弱密码等安全问题而被植入到服务器上的。 一旦Webshell被植入到服务器上࿰…...
dl----算法常识100例
1.depthwise卷积&&Pointwise卷积 depthwise与pointwise卷积又被称为Depthwise Separable Convolution,与常规卷积不同的是此卷积极大地减少了参数数量,同时保持了模型地精度,depthwise操作是先进行二维平面上地操作,然后利…...
京东百亿补贴,不要把方向搞偏了
出品 | 何玺 排版 | 叶媛 我吐槽来了。 3月6日0时,京东正式加入百亿补贴战局。那么,京东百亿补贴力度如何?用户又有什么反馈?我们一起来看看。 01 京东百亿补贴实测 京东百亿补贴上线的第一天,玺哥就亲自进行了体…...
Java中的static与final关键字
一、static关键字 static修饰位置表示含义变量表示这是一个类变量,类加载时分配在堆中方法静态方法,不依赖于对象可直接通过类标识访问代码块静态代码块,只在类加载初始化阶段时执行一次内部类静态嵌套类,表示只是放在外部类的文…...
开学新装备 - 学生党是否该入手 MacBook
学生党是否该入手 macbook 这个问题,相信许多人在许多社区都有看到过类似讨论。只不过,许多讨论都掺杂了信仰、智商税、不懂、不熟悉未来需求等各种因素,导致内容空洞价值不大。这篇文章,抛开了所有非理性因素,详细的告…...
【前端技巧】ESLint忽略检查行和文件
Author:Outman Date:2023-03-10 ESLint忽略检查行和文件 一、注释方式 1.注释忽略 —— 块注释 /* eslint-disable */ console.log(test); /* eslint-enable */2.注释忽略 —— 忽略指定规则项 /* eslint-disable no-alert, no-console */ alert(tes…...
单片机学习笔记之点阵(8x8)
心血来潮,想捡一下丢了很久的单片机,纪录一下单片机学习简单的点阵显示,及踩到的䟘,找到吃灰很久的普中科技开发板(非广告,为毕设学习买的)。 1. 使用工具 使用开发板: 普中科技开发…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...
华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
day51 python CBAM注意力
目录 一、CBAM 模块简介 二、CBAM 模块的实现 (一)通道注意力模块 (二)空间注意力模块 (三)CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...
