当前位置: 首页 > news >正文

案例06-没有复用思想的接口和sql--mybatis,spring

目录

    • 一、背景
    • 二、思路&方案
      • 问题1优化
      • 问题2优化
    • 三、总结
    • 四、升华

一、背景

写这篇文章的目的是通过对没有复用思想接口的代码例子优化告诉大家,没有复用思想的代码不要写,用这种思维方式和习惯来指导我们写代码。
项目中有两处没有复用思想代码,如下:
1、通过查看代码可以发现。接口findOnlineUesr和findAllOnlineUser两个接口的返回类型是相同的,只是一个有入参,另一个没有入参。这种情况我们可以通过一个通用的接口解决这些问题。
在这里插入图片描述
2、通过查看代码我们发现。这条动态sql里。course_id = #{course_id} 出现了多次。我们完全可以将这个功能的抽出来。而不是重复的事情做3次。
在这里插入图片描述

二、思路&方案

此番写这篇博客只为三件事:复用!!! 复用!!!还是复用!!!!

问题1优化

针对问题一。我们实现一个接口。下面将会把代码从
Controller==>IService==>ServiceImple==>mapper 。整个流程依次展示出来。
Controller

    @PostMapping("/queryCourseContent")public List<CourseContentEntity> queryCourseContent(@RequestBody CourseContentEntity courseContent){return iCourseContentService.queryCourseContent(courseContent);}

IService

  List<CourseContentEntity> queryCourseContent(CourseContentEntity courseContent);

ServiceImpl

    @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>

下面进行测试
一开始的两个接口一个是为了查询所有的信息,一个是为了查询某个具体班级的人员

1、获取所有课程
在这里插入图片描述
在这里插入图片描述
2、获取某个人创建的课程
在这里插入图片描述

可以观察到数据结构是一样的,我们改造后的接口是没有问题的。

问题2优化

优化前
仔细分析下面代码我们可以发现:它是提供了四种不同的where查询,而这四种查询都是使用 = 来做的。我们完全没有必要使用 choose、when、otherwise、标签。使用if做一个通用查询就可以

select id,user_id,user_name,questionnaire_id,activity_name,course_id,class_id,user_answer,start_time,update_time,remark,is_deletefrom`arpro_user_answer`<where><choose><when test="id !='' and id != null">and id=#{id}</when><when test="user_answer !='' and user_answer != null">user_answer=#{user_answer}and course_id = #{course_id}and class_id = #{class_id}</when><when test="questionnaire_id !='' and questionnaire_id != null">and questionnaire_id=#{questionnaire_id}and course_id = #{course_id}and class_id = #{class_id}</when><otherwise>and course_id = #{course_id}and class_id = #{class_id}and is_delete = 0</otherwise></choose></where>

优化后:

        select id,user_id,user_name,questionnaire_id,activity_name,course_id,class_id,user_answer,start_time,update_time,remark,is_deletefrom`arpro_user_answer`<where>is_delete = 0<if test="id !='' and id !=null"> and id = #{id} </if><if test="userAnswer !='' and userAnswer !=null"> and user_answer = #{userAnswer} </if><if test="courseId !='' and courseId !=null"> and course_id = #{courseId} </if><if test="classId !='' and classId !=null"> and class_id = #{classId} </if><if test="userAnswer !='' and userAnswer !=null"> and user_answer = #{userAnswer} </if></where>

三、总结

通过这种通用sql的方式。我们避免了重复的代码,降低了出错的概率。在代码的整洁度上也是明显的提高。

四、升华

大道至简,思考怎么才能用最简单的代码写出最牛的效果。

http://www.lryc.cn/news/36552.html

相关文章:

  • 如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南
  • 怎么做才能不丢消息?
  • 前端基础(十六)_数组对象
  • 数据结构-带头双向循环链表
  • 3 问 6 步,极狐GitLab 帮助企业构建高效、安全、合规的 DevSecOps 文化
  • SPA(单页应用)知多少
  • Selenium实战【远程控制】【JAVA爬虫】
  • 图片动画化应用中的动作分解方法
  • 我又和redis超时杠上了
  • 一文带你吃透MySQL数据库!
  • [学习笔记] 2. 数据结构
  • [学习笔记] 3. 算法进阶
  • 做自媒体真的能赚到钱吗?真的能赚到几十万吗?
  • QT使用QListWidget显示多张图片
  • python 打印进度条
  • 【微小说】大学日记
  • ArrayList扩容机制解析
  • jsp-----web应用与开发
  • 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
  • php设计模式-组合模式的运用
  • 一文教会你如何简单使用Fegin进行远程服务调用
  • OpenAI——CLIPs(代码使用示例)
  • 什么样的人更适合创业?那类人创业更容易成功?
  • JavaApi操作ElasticSearch(强烈推荐)
  • NFT的前景,元宇宙的发展
  • C#基础教程20 预处理器指令
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束
  • 国外SEO策略指南:确保你的网站排名第一!
  • Tik Tok新手秘籍,做好五点可轻松起号
  • 【Linux】网络入门