mybatis最佳实践
原则:
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最佳实践相关推荐
- list mybatis批量保存_springboot2.x基础教程:集成mybatis最佳实践
前面文章介绍过SpringBoot结合Jpa实现对数据库的操作.今天介绍下SprigBoot集成Mybatis的相关知识点. Mybatis作为一个半自动化的ORM框架,根据条件动态拼接SQL ...
- MyBatis最佳实践之——MBG代码生成工具
MyBatis也提供了一个代码生成器,叫做MyBatis Generator,简称MBG(它是MyBatis的一个插 件).我们只需要修改一个配置文件,使用相关的jar包命令或者Java代码就可以帮助 ...
- 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...
数字化时代,数据库对任何企业而言都是其应用的核心资源.MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂.易于部署管理,且具有ACID特性.强大的SQL查询等特点,被各种业务系统作 ...
- boot jpa mysql postman spring_听说过spring-data-jdbc么?来个最佳实践
本文的完整示例代码,见github仓库.小q只在文中介绍最关键的代码块. https://github.com/yuanluoji/purestart-springboot-data-jdbc 很多人 ...
- java replaceall正则表达式_编写高性能Java代码的最佳实践
作者:Eugen Paraschiv 翻译:雁惊寒https://dzone.com 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践 ...
- spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...
概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...
- Maven学习(六)————企业Maven项目最佳实践
引言 在<Maven学习(三)----Maven核心概念(二)>中,学到了Maven 继承和 Maven 聚合的概念,这两个概念,解决的问题分别是: 1.解决一些公共依赖统一版本的问题. ...
- MBG配置详解及最佳实践
2019独角兽企业重金招聘Python工程师标准>>> 为了在项目中引入MyBatis框架,最近一直在研究MyBatis的一套东西,MyBatis本身.MyBatis Spring. ...
- 高性能Java代码的最佳实践
高性能Java代码的最佳实践 前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定 ...
最新文章
- 李德毅:“反用驾驶脑”测认知能力,谁说酒驾一定违规?
- Go 读取 yaml 文件并解析
- boost::sort模块float_sort 右移函子排序示例
- photoshop是用什么编程语言开发的_为什么中国开发不出流行的操作系统和编程语言?...
- php分布式的锁,laravel分布式并发锁
- datetime的文本时间处理
- Java 性能优化系列之1[设计与程序优化]
- Kano模型在用户调研中的应用——CRM工具调研实例
- band math函数_波段运算(bandmath)工具中常用的函数和实例.docx
- c语言质因数分解算法蓝桥杯,【算法】 蓝桥杯 基础练习 分解质因数
- 《人生十论》. 钱穆
- 程序员未来职业规划分析
- Unity打包生成APK文件提交应用宝踩坑记录
- MarkDown语法详解(Typora编辑器)
- 【论文笔记】CVPR2019_SiamMask
- java获取视频封面图片
- 【Python】如何通过官网下载和安装PythonPyCharm(Windows系统)
- Java 应该怎么学
- uniapp路由跳转的六种方式
- so easy,用 Python 实现图片转字符画