唐山乾正建设工程材料检测公司网站,手机企业wap网站,湖南关键词网络科技有限公司,礼品网站如何做目录一、背景二、思路方案问题1优化问题2优化三、总结四、升华一、背景
写这篇文章的目的是通过对没有复用思想接口的代码例子优化告诉大家#xff0c;没有复用思想的代码不要写#xff0c;用这种思维方式和习惯来指导我们写代码。 项目中有两处没有复用思想代码#…
目录一、背景二、思路方案问题1优化问题2优化三、总结四、升华一、背景
写这篇文章的目的是通过对没有复用思想接口的代码例子优化告诉大家没有复用思想的代码不要写用这种思维方式和习惯来指导我们写代码。 项目中有两处没有复用思想代码如下 1、通过查看代码可以发现。接口findOnlineUesr和findAllOnlineUser两个接口的返回类型是相同的只是一个有入参另一个没有入参。这种情况我们可以通过一个通用的接口解决这些问题。 2、通过查看代码我们发现。这条动态sql里。course_id #{course_id} 出现了多次。我们完全可以将这个功能的抽出来。而不是重复的事情做3次。
二、思路方案
此番写这篇博客只为三件事复用 复用还是复用
问题1优化
针对问题一。我们实现一个接口。下面将会把代码从 ControllerIServiceServiceImplemapper 。整个流程依次展示出来。 Controller PostMapping(/queryCourseContent)public ListCourseContentEntity queryCourseContent(RequestBody CourseContentEntity courseContent){return iCourseContentService.queryCourseContent(courseContent);}IService ListCourseContentEntity queryCourseContent(CourseContentEntity courseContent);
ServiceImpl Overridepublic ListCourseContentEntity queryCourseContent(CourseContentEntity courseContent) {return courseContentMapper.queryCourseContentRecord(courseContent);}
重点 mapper
ListCourseContentEntity queryCourseContentRecord(CourseContentEntity courseContentEntity);!-- 通用查询语句--select idqueryCourseContentRecord resultMapcourseContentMap SELECT id,course_assembly_id,assembly_content,create_time,created_id,created_by,update_time,updated_id,updated_byFROM tar_course_content_infoWHEREis_delete0if testid ! null and id #{id} /ifif testcourseAssemblyId ! nulland course_assembly_id #{courseAssemblyId}/ifif testassemblyContent ! nulland assembly_content #{assemblyContent}/ifif testcreatedBy ! nulland created_by #{createdBy}/ifif testupdatedBy ! nulland updated_by #{updatedBy}/ifif testremark ! nulland 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_deletefromarpro_user_answerwherechoosewhen testid ! and id ! nulland id#{id}/whenwhen testuser_answer ! and user_answer ! nulluser_answer#{user_answer}and course_id #{course_id}and class_id #{class_id}/whenwhen testquestionnaire_id ! and questionnaire_id ! nulland questionnaire_id#{questionnaire_id}and course_id #{course_id}and class_id #{class_id}/whenotherwiseand 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_deletefromarpro_user_answerwhereis_delete 0if testid ! and id !null and id #{id} /ifif testuserAnswer ! and userAnswer !null and user_answer #{userAnswer} /ifif testcourseId ! and courseId !null and course_id #{courseId} /ifif testclassId ! and classId !null and class_id #{classId} /ifif testuserAnswer ! and userAnswer !null and user_answer #{userAnswer} /if/where
三、总结
通过这种通用sql的方式。我们避免了重复的代码降低了出错的概率。在代码的整洁度上也是明显的提高。
四、升华
大道至简思考怎么才能用最简单的代码写出最牛的效果。