案例06-复用思想的接口和SQL

简介: 复用思想的接口和SQL

一:背景介绍

       在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我们从数据库读或者存数据一样。我们想要什么数据就从数据库中获取什么样的数据。没有考虑是否浪费了资源的开销。代码是不是复用的问题。

f865d2525c3d40f5ae754c8aa7330569.png

        以上两个图都是没有体现复用思想的例子。两个类似的业务场景写了两个接口、两个接口、两个实现类、两个sql,下面我们将上面的代码进行改造。

二:概念说明

复用思想

       复用思维的核心理念是“不要重复造轮子”,即避免重复编写相同或类似的代码,而是寻找已有的解决方案并进行适当的修改和调整以满足新的需求。复用思维可以应用于不同层次和领域的软件开发,包括代码级别、模块级别、组件级别和架构级别。

       「 代码级别 」复用思维可以通过创建函数、类和库来实现。开发人员可以编写通用的函数或类,将其封装成库,并在需要时引用它们,避免重复编写相同的代码。这样可以提高代码的可维护性和可重用性,并减少开发和测试的工作量。

       「 模块级别 」复用思维可以通过将已有的模块或组件应用于新的项目中来实现。开发人员可以将已经开发和测试过的模块或组件作为独立的模块,并在新的项目中进行集成和配置。这样可以节省开发时间和成本,并提高项目的稳定性和可靠性。

       「 组件级别 」复用思维可以通过使用现有的软件组件或框架来实现。开发人员可以使用第三方库、开源组件或商业框架来构建应用程序,而不是从头开始编写所有的代码。这样可以加快开发速度,降低开发风险,并提供更好的功能和性能。

       「 架构级别 」复用思维可以通过定义和应用标准化的架构模式和设计原则来实现。开发人员可以使用已有的架构模式(如MVC、MVVM等)和设计原则(如单一职责原则、开闭原则等)来指导项目的架构设计和实现。这样可以提高系统的可扩展性、可维护性和可重用性。

接口

       在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。简单理解为向外提供统一的行为。

三:思路&方案

       两个接口都是都是实现查询在线人员的情况,区别在去两个接口的入参不同。这里我们可以通过使用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>
     **/
    @Override
    public 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_by
        FROM  tar_course_content_info
        WhERE
        is_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>

效果展示

7ac67fab6ff74b70b1b97dccab1615fb.png

42c8bb66f12f4541983b16ff02471992.png

2.Mapper层sql语句的复用

代码实现

73f4f9a54cb9460d9bca8b0550e47b29.png

效果展示

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

938cd3d75b104530b6aa425cdc7695e2.png

379bf4aa82ba42d2826ced8af83f0f2f.png

五:总结

       面向对象的三个特征是封装继承和多态,封装的目的就是让代码复用性强。便于后期的维护。所以在进行编码之前首先要考虑的就是我们写的代码有没有通用性和抽象性。是不是别人有类似的业务的时候能复用我们写的代码。编写的代码更加的有价值。


相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
8天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
16天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
SQL
sql server案例总结
sql server案例总结
11 0
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
|
3月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
33 0
|
16天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
26天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0