皆非的万事屋

eladmin JPA转Mybatis与后端框架迭代更新历程

本文会持续记录博主对eladmin框架的完善以及转化mybatis plus的历程

[scode type="share"]2020年8月15日受腾飞学长委托,要为小组搭建一个之后要一直使用的后端管理系统框架,并以el admin为主,进行删改和重构,将原有的持久层框架jpa修改为mybatis plus[/scode]
[scode type="blue"]2020年8月16日正式开始转化[/scode]

[scode type="blue"]2020年8月17日比葫芦画瓢[/scode]

[scode type="blue"]2020年8月18日——jpa+mp计划[/scode]

[scode type="blue"]2020年8月19日——给eladmin提PR[/scode]

[scode type="blue"]2020年8月21日——理解jpa_mp中的security流程[/scode]

[scode type="blue"]2020年8月22日——master完成关联查询[/scode]

[scode type="blue"]2020年8月23日——完成主页面显示[/scode]

[scode type="blue"]2020年8月24日——验证权限管理[/scode]

[scode type="blue"]2020年8月25日——mp分支转化dept接口[/scode]

[scode type="blue"]2020年8月26日——mp分支转化menu接口[/scode]

[scode type="blue"]2020年8月27日——jpa_mp添加新模块tools[/scode]

[scode type="blue"]2020年8月28日——mp分支转化剩余接口[/scode]

[scode type="blue"]2020年8月29日——修改接口bug[/scode]

[scode type="blue"]2020年8月30日——重写文件上传[/scode]

[scode type="green"]有关jpa_mp分支的更新就到8月底了,剩下的优化和修复都在新院统战项目中进行了,本来这个分支就是过渡分支。纯mp分支由于在小组内部仓库,这里不做展示,后期都整合到了SMPE框架里。[/scode]

[scode type="green"]之后jpa_mp版框架成功应用于新院统战、平安科院、科研管理系统三个项目中,至此,小组框架第一版的搭建到此结束[/scode]


[scode type="yellow"]2020年11月12日——讨论第一版框架的问题,更新第二版[/scode]

讨论内容总结:

el-admin通用环境(marchsoft_api)问题

  1. mybatis @one、@many是否使用?
  2. mybatis的缓存和mp的分页插件有问题,mapper层加注解pageSize等信息有问题,service没问题。
  3. 系统用户查询相关比较复杂?
  4. 请求返回格式不统一
  5. 第三方依赖引入比较乱(重复引入,最小引入)
  6. 第三方以子库形式引入我们的主仓库,第三方维护文档
  7. 微信小程序和公众号分开
  8. 第三方服务不应该以接口的形式出现
  9. 框架缺少日志处理

平安科院后续:
星星:

  1. 缓存机制不清晰
    a. 存的什么?
    b. 什么时候存的?
  2. 持久层选择(jpa,mybatis)
  3. 部分功能使用复杂
  4. 直接修改数据库,有redis缓存,数据会存在问题(没走缓存)
  5. token签名验证太死了,不好做扩展

晓珊问题:

  1. 注释
  2. 框架使用手册,对于新手来说很难入手
  3. 没有搭框架,学到的东西很少

讨论问题结果:

  1. mybatis @one、@many是否使用?
    讨论结果:不建议使用
    ● join查询:查询时候可以使用join连接查询,支持最多3张表join查询
    ● 业务组装:将多张表的信息返回到业务层,然后利用for循环语句组装数据,效率比@One,@many要快
    ● 利用缓存:可以使用@one和@many,第一次查询时效率慢些,但对接下来查询,会直接从缓存中查询,不用走数据库
  2. mybatis的缓存和mp的分页插件有问题,mapper层加注解pageSize等信息有问题,service没问题。
    讨论结果:
    ● 不用mybatis-plus 的分页插件,找其他插件。
    ● 小组自己开发分页插件
    调研结论:
  3. 分页插件没有问题
  4. 默认业务mapper类加二级缓存,指定Radis
  5. 默认业务service不再添加Radis缓存
  6. 对应mapper开二级缓存,允许使用@one/@many
  7. 系统用户查询相关比较复杂?
    讨论结果:暂时未定
  8. 请求返回格式不统一?
    讨论结果:
    ● 返回的状态码用枚举,返回值不定死
  9. 第三方依赖引入比较乱(重复引入,最小引入)
    讨论结果:
  10. 不随意引用第三方模块插件、引用前需大家确人 (note by lqc)
  11. 去掉现有重复引用,保留安全的
  12. 放置位置
    a. 在common文件下放置与业务无关的工具类,通用方法封装
    b. 在tools文件下放置与业务相关的工具类,如:短信工具类,封装接口工具类(hik API)
  13. 需要有使用说明手册
  14. 第三方以子库形式引入我们的主仓库,第三方维护文档
    讨论结果:
  15. 第三方库需要维护使用文档
  16. 我们的第三方围绕着(基于其项目结构)eladmin开发,服务以模块形式存在
  17. 微信公众号模块
    a. 消息队列分离到项目业务,公众号模块只对外提供使用接口
  18. 三方服务不应该以接口的形式出现
    讨论结果:
  19. 对外需不需要提供服务接口,如果不需要,封装成业务工具类放在tools下
  20. 微信小程序和公众号分开
  21. 造成配置信息混乱的解决方法
    a. 在配置属性前加 前缀

    wx:
      #微信公众号
      mp:
      #微信小程序
      miniapp:
  22. 框架缺少日志处理
    框架日志侧重对敏感业务日志进行收集。
    讨论结果:
  23. 日志位置
    a. 失败出(必)
    b. 敏感操作,增删改
  24. 信息(内容)
    a. 不输出无用信息,主(谁)谓(动词)宾(对谁)状补(干了什么,怎么样了)
    b. 输出信息中包含自己的唯一信息(邮箱、名字缩写如lqc)
    c. 本地调试可以打印SQL结果,上线不允许打印,但可打印执行的SQL语句
  25. 格式待定……
  26. 等级
    a. 框架中常用日志等级(从低到高): Debug->Info->warning->Error
    b. 各日志等级使用

     i. Debug: 在本地开发中使用,可打印任何打印信息
     ii. Info:打印业务日志
     iii. Error:报错,业务预期/非预期错误,站在业务角度:需要关注的程序异常都用此等级打印

    c.

  27. 缓存机制不清晰(存的什么?什么时候存的?)
    讨论结果:
  28. 存放缓存的地方需说明,维护一个文档
  29. 缓存集中放在一处(redis)
  30. 修改数据库要在群中通知一下大家, 这个规定放在维护文档中
  31. 使框架业务不依赖与redis,部分可依赖(登录、排行榜)
    问题遗留:
  32. redis和springboot环境中有两份缓存,找出两份的原因(内存机制中,mybatis,redis)
  33. 持久层选择(jpa,mybatis)
    讨论结果:改成完全 mybatis plus
  34. 部分功能使用复杂
    由于jpa和mybatis共存原因引起,后期改成mybatis plus可缓解。
  35. 直接修改数据库,有redis缓存,数据会存在问题(没走缓存)
    同问题 10
  36. token签名验证太死了,不好做扩展
    token只提供了读取方法,未提供设置方法,想对其修改比较麻烦,如果有个设置的方法会更好(更方便)。
  37. 注释
    讨论结果:
  38. Controller层有swagger注释的可不加注释
  39. 类、接口、方法至少需要注明:作者、时间、日期,描述功能
  40. 在必要处,如分支等地方
  41. 在改别人代码时,在注释中加入自己修改的名字和修改日期
  42. 框架使用手册,对于新手来说很难入手
    讨论结果:基本的文档是必须的
  43. 没有搭框架,学到的东西很少
    尝试着去搭一下,先会用然后再搭建;
    多多向下传承,搭建过整合过的带带新人;
  44. 项目单元测试
    之前没有进行,之后需要规范。
    单元测试目前统一是测试业务层
  45. 内置角色
    系统中固定不能删除的角色
  46. 数据加密
    如果后端负责全部的加密解密工作可能不好做,把解密放在前端会好点,和前台约定
  47. 测试问题
  48. 需要在开发时使用相应的测试号进行测试
  49. 没有单元测试(同问题18)
  50. 代码规范问题
    a. 对报错的警告也要处理
    b. 推荐使用阿里巴巴java插件对代码检查
  51. 第二版框架整合安排
  52. 把一版框架改成mybatis plus(花费1~2天),近期有项目用这个环境
  53. 第二版改成mybatis plus的,并解决以上出现的问题
  54. 框架搭建完毕,经过测试没有问题,把咱们的环境放到github上

[scode type="red"]这次讨论之后便是确定了框架第二版的更新方向,但是由于up主要于12月26日参加2021考研,所以这次便没有参与第二版的开发,交接给组内另一位大佬管理,并正式命名为SMPE框架[/scode]


[scode type="share"]博主考研结束后,于2021年1月10日继续参与后端框架的更新中,主要处理缓存问题[/scode]
[scode type="blue"]2021年1月10日,讨论SMPE框架目前遗留的问题[/scode]

[scode type="blue"]2021年1月11日~12日,开发新注解@Query[/scode]
[scode type="blue"]2021年1月13日~14日,讨论缓存维护并整合SMPE[/scode]

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »