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

文章介绍了在Java开发中如何运用复用思想,通过接口和MyBatis的动态SQL实现Controller层接口及Mapper层SQL语句的复用,提高代码效率和可维护性。通过示例展示了如何改造代码,以一个通用的SQL查询处理不同的业务场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一:背景介绍

二:概念说明

复用思想

接口

三:思路&方案

四:过程

 1.Controller层接口的复用

代码实现

Controller层

IService层

ServiceImpl层

Mapper层

效果展示

2.Mapper层sql语句的复用

代码实现

 效果展示

五:总结


一:背景介绍

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

         以上两个图都是没有体现复用思想的例子。两个类似的业务场景写了两个接口、两个接口、两个实现类、两个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>

效果展示

 

 

2.Mapper层sql语句的复用

代码实现

 效果展示

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

五:总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武梓龙_Wzill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值