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

五:总结

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


相关文章
|
8月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
8月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
10月前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
1130 3
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
420 10
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
1314 0
|
关系型数据库 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)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
568 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
386 9