案例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

五:总结

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


相关文章
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
114 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
27天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
1月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
63 3
|
1月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
51 0
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
55 10
|
2月前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
60 0
|
4月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
139 0
|
4月前
|
SQL 存储 关系型数据库
5大步骤+10个案例,堪称SQL优化万能公式
5大步骤+10个案例,堪称SQL优化万能公式
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
135 13