案例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. 使用工具 使用开发板: 普中科技开发…...
3步构建你的第二大脑:Obsidian知识管理系统实战指南
3步构建你的第二大脑:Obsidian知识管理系统实战指南 【免费下载链接】obsidian-template Starter templates for Obsidian 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-template 你是否曾为笔记杂乱无章而烦恼?是否在需要某个知识点时…...
3步实现电脑风扇智能控制:FanControl.HWInfo插件终极指南
3步实现电脑风扇智能控制:FanControl.HWInfo插件终极指南 【免费下载链接】FanControl.HWInfo FanControl plugin to import HWInfo sensors. 项目地址: https://gitcode.com/gh_mirrors/fa/FanControl.HWInfo 还在为电脑风扇的噪音烦恼吗?或者担…...
爆单实操课:从3C到美妆,跨境商家如何用AI神器搞定TikTok本土化
每天都有无数跨境卖家在各大社群里发问:怎么用ai生成带货视频,有哪些工具比较好用? 在 TikTok 这个极度依赖内容爆发的平台上,不同类目的产品对视频素材的需求千差万别。靠人工剪辑不仅效率低,且极难跨越本土化语言的障…...
开源项目remote2mac:用Windows远程桌面无缝控制macOS
1. 项目概述:远程桌面连接的另一条路如果你是一名需要在Windows电脑上远程控制macOS设备的开发者、设计师或者运维人员,那么“远程桌面”这个需求对你来说一定不陌生。传统的方案,比如微软的RDP(远程桌面协议)对Window…...
基于GAN的端到端ISP:用AI学习从RAW到RGB的图像处理革命
1. 项目概述:从“拍”到“算”的ISP革命在计算机视觉和图像处理领域,图像信号处理器(ISP)一直扮演着“幕后英雄”的角色。它负责将相机传感器捕捉到的原始、未经处理的RAW Bayer数据,转换为我们手机相册里那些色彩鲜艳…...
云端AI模型基准测试:从参数迷信到效能优先的选型实战
1. 项目概述:一次颠覆认知的云端AI模型基准测试作为一名长期在本地部署AI智能体(我用的是OpenClaw)的实践者,模型选型一直是我工作流中的核心决策。过去几个月,我默认使用的都是阿里云出品的qwen3.5:397b-cloud。这个模…...
图像识别与目标检测:从概念到实战的全面解析
1. 项目概述:从“认脸”到“找茬”的认知跃迁在计算机视觉这个行当里干了十几年,我见过太多刚入行的朋友,甚至是一些有经验的开发者,对“图像识别”和“目标检测”这两个词傻傻分不清楚。经常有人拿着一个“识别猫狗”的需求过来&…...
Mega:基于上下文工程的Brainbase平台AI开发效率革命
1. 项目概述:Mega,你的Brainbase平台AI工程专家如果你正在使用Claude Code、Cursor或者任何能读取文件的AI编程工具来构建基于Brainbase平台的对话式AI应用,那么你很可能遇到过这样的困境:你需要花费大量时间向AI解释Brainbase的架…...
当1000A牵引电流遇上微安级信号:高铁轨道电路中扼流变压器的‘抗干扰’实战解析
高铁轨道电路中扼流变压器的抗干扰设计与工程实践 电气化铁路的轨道电路系统面临着前所未有的电磁兼容挑战——如何在承载1000A级牵引电流的钢轨上,同时可靠传输微安级的信号电流?这个看似矛盾的需求,正是现代高铁信号系统设计的核心难题之一…...
Audacity音频编辑教程:免费开源音频处理软件的完整使用指南
Audacity音频编辑教程:免费开源音频处理软件的完整使用指南 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity Audacity是一款功能强大的免费开源音频编辑软件,支持录音、剪辑、混音和音频效果…...
