原则:

1. sql和代码分离,sql易于维护和 检查评审

2. 高度的自动化和封装,减少开发工作量

从原则上讲:

  • 也不能像jdbc那样,SQL和代码混写,不方便检查和审核;

  • 不推荐在代码中以任何方式组装任意SQL,比如Mybatis的Example用法,其实不过是sql拼接的语法糖,和sql与代码混写没多少区别(不方便检查和审核),不推荐使用;

  • 同样,类似于hibernate那样的对象操作方式,其实也是sql拼接的语法糖,不建议使用;

  • 要避免像hibernate那样过度封装,形成很多新的语法(HSQL),最关键是无法控制SQL质量。

总之,我们不推荐 以任何形式 自由地 生成自定义的SQL,不管是java代码(对象操作)也好,还是新语法(伪SQL)也好

我们建议的是,框架提供对日常简单SQL语句封装,这种情况下不需要写SQL。但对于较复杂的SQL,则直接写在配置文件中(xml),确保sql与代码分离,这样比较纯粹,就是直接通过sql去取数据,借助Mybatis完成数据实体的自动封装,以及代码的自动生成罢了。

​还考虑到了以下两点:

  • sql是一门最基础的语言,程序员们都应该熟练掌握;

  • 我们的工具,不能让程序员们忘记了SQL怎么写,这是原则,如果真的有一个工具,能够让程序员忘记SQL怎么写,我认为是百害而无益。

特别说明:

1、

​注意,我们是不推荐 程序员在代码中去自由的自定义SQL,以防止SQL质量不受控制,但是我们可以定义一些固定的SQL模板,让程序员们直接套用,这些SQL模板是经得起质量考验的,不会存在性能和安全隐患。这就是 Mybatis“通用Mapper”的功能。

所以,我们可以进一步增强mybatis的代码生成和自动封装功能:(国产开源的通用Mapper是一个榜样)

就通用Mapper而言,有如下几个改进方向:

  • 目前标准mapper只有11个方法,除掉了前面禁用的Example,是否够用,是否还能再添加一些常用的接口?这是一个改进方向(但是要坚持严格的原则,杜绝存在性能和安全隐患的sql模板)。

  • 另外,标准的mapper都是独立的,没有一个统一的父类,不方便在某些动态注入mapper的场景下使用,这一点局限性很大,是一个改进方向。

  • 还有,加入通用分页方法,PageHelper这种方法很好用,让sql只专注于业务,分页交给框架去处理。

  • 另外,id自动生成,insert和update部分数据没设置值时自动填充(比如 updateTime,createTime)。

我研发的企业级开发框架(FAST),就对 mabatis+通用mapper 进行了增强,具体可以查看 FAST框架的相关说明文档。

2、

​以上原则,已经禁用了通过Mybatis Example 或 Mybatis-Plus(或类似框架)在Java代码中组装SQL的用法。原因很简单,对个人项目而言,Java代码中组装SQL很方便、快捷,但是对企业团队、长期维护的项目来说,质量和可维护性堪忧。

我们的企业级开发框架中,​吸取了Mybatis-Plus的精华,去除了不合适团队开发的部分。

mybatis最佳实践相关推荐

  1. list mybatis批量保存_springboot2.x基础教程:集成mybatis最佳实践

    前面文章介绍过SpringBoot结合Jpa实现对数据库的操作.今天介绍下SprigBoot集成Mybatis的相关知识点.     Mybatis作为一个半自动化的ORM框架,根据条件动态拼接SQL ...

  2. MyBatis最佳实践之——MBG代码生成工具

    MyBatis也提供了一个代码生成器,叫做MyBatis Generator,简称MBG(它是MyBatis的一个插 件).我们只需要修改一个配置文件,使用相关的jar包命令或者Java代码就可以帮助 ...

  3. 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...

    数字化时代,数据库对任何企业而言都是其应用的核心资源.MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂.易于部署管理,且具有ACID特性.强大的SQL查询等特点,被各种业务系统作 ...

  4. boot jpa mysql postman spring_听说过spring-data-jdbc么?来个最佳实践

    本文的完整示例代码,见github仓库.小q只在文中介绍最关键的代码块. https://github.com/yuanluoji/purestart-springboot-data-jdbc 很多人 ...

  5. java replaceall正则表达式_编写高性能Java代码的最佳实践

    作者:Eugen Paraschiv 翻译:雁惊寒https://dzone.com 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践 ...

  6. spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...

    概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...

  7. Maven学习(六)————企业Maven项目最佳实践

    引言 在<Maven学习(三)----Maven核心概念(二)>中,学到了Maven 继承和 Maven 聚合的概念,这两个概念,解决的问题分别是: 1.解决一些公共依赖统一版本的问题. ...

  8. MBG配置详解及最佳实践

    2019独角兽企业重金招聘Python工程师标准>>> 为了在项目中引入MyBatis框架,最近一直在研究MyBatis的一套东西,MyBatis本身.MyBatis Spring. ...

  9. 高性能Java代码的最佳实践

    高性能Java代码的最佳实践 前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定 ...

最新文章

  1. 李德毅:“反用驾驶脑”测认知能力,谁说酒驾一定违规?
  2. Go 读取 yaml 文件并解析
  3. boost::sort模块float_sort 右移函子排序示例
  4. photoshop是用什么编程语言开发的_为什么中国开发不出流行的操作系统和编程语言?...
  5. php分布式的锁,laravel分布式并发锁
  6. datetime的文本时间处理
  7. Java 性能优化系列之1[设计与程序优化]
  8. Kano模型在用户调研中的应用——CRM工具调研实例
  9. band math函数_波段运算(bandmath)工具中常用的函数和实例.docx
  10. c语言质因数分解算法蓝桥杯,【算法】 蓝桥杯 基础练习 分解质因数
  11. 《人生十论》. 钱穆
  12. 程序员未来职业规划分析
  13. Unity打包生成APK文件提交应用宝踩坑记录
  14. MarkDown语法详解(Typora编辑器)
  15. 【论文笔记】CVPR2019_SiamMask
  16. java获取视频封面图片
  17. 【Python】如何通过官网下载和安装PythonPyCharm(Windows系统)
  18. Java 应该怎么学
  19. uniapp路由跳转的六种方式
  20. so easy,用 Python 实现图片转字符画

热门文章

  1. API跟单社区跟单技术经验
  2. android paho框架,Android Mqtt 客户端paho使用心得
  3. SqlServer DATEDIFF、datediff函数的使用实例
  4. 企业微信接口开启收费模式,意在第三方生态健康发展
  5. 增长黑客读书笔记(二)好产品是增长的根本
  6. 出货 开船查询 T-SQL
  7. 大数据设计方案V1.0
  8. OV5640摄像头开窗大小,输出窗口大小,帧率等设置
  9. idea创建项目教程
  10. 【消费战略】解读100个食品品牌丨红海缝隙杀出的乳品独角兽 “认养一头牛”!