查看原文
其他

Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂

2018-02-04 java思维导图 开源中国


相关阅读:



摘要: Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。


mybatis-plus 与 mybatis


mybatis


 Mybatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。



但mybatis有个让我比较头疼的一个问题是sql工作量很大,尤其是字段多的时候。虽然说单表的增删改查操作可以通过mybatis generator工具来生成(或者自己写模板工具生成),但项目开发的过程中总免不了要新添加新字段,这些工具就帮不了我了,我得把新字段写到原来的所有增删改查的sql中。这是个痛苦的过程,特别是当你重复了很多次之后。


mybatis的单表操作也是贼麻烦的事,因为筛选的条件可能会各种各样,所以你不得不写很多动态sql来兼容查询条件,这也让我不能集中精力去处理业务。


每当这时候,我怀念Hibernate了。嘿嘿,Hibernate加字段就贼简单,单表操作也是贼方便。但我依然不喜欢用Hibernate,哈哈。


mybatis-plus


而mybatis-plus这样一个框架,一种集mybatis与hibernate的优点一起的框架。它提供了hibernate的单表CRUD操作的方便同时,又保留了mybatis的特性。


先来看看官方怎么解释mybatis-plus的:


  • Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。



  • 我们的愿景是成为Mybatis最好的搭档,就像 Contra Game 中的1P、2P,基友搭配,效率翻倍。



带问题去学习,请思考


  • mybatis-plus怎么实现单表URUD操作?

  • mybatis-plus的底层实现原理是什么?

  • mybatis-plus与其他同类框架如mybatis helper有很什么优势?

  • 如何集成mybatis-plus快速搭建一个spring boot项目。


特性



从上图可以看出,mybatis-plus不仅仅封装了基本的CRUD操作,还内置了防SQL注入操作、常用的分页插件,还有我最喜欢的ActiveRecord模式。


用过jfinal的人应该都知道ActiveRecord是啥。Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。


常用实体注解


MP通过ORM模式封装了常用的CRUD操作,自然少不了实体注解,先来看看都有哪些注解



其中实体无注解化设置可以如下处理:


  • 当数据库的表字段名是驼峰命名时无需注解处理。

  • 或者全局配置: 下划线命名 dbColumnUnderline 设置 true , 大写 isCapitalMode 设置 true


但其实我压根就没管过手写过这些注解,使用mp代码生成器自动生成主体后直接覆盖原来的就行了,减少人工的失误,方便快捷。至于@Version与@KeySequence这两个注解,貌似我还真没用过。嘿嘿。。。


简化 CRUD


前面已经说了mp已经简化了mybatis的单表基本操作,先来看看。



相比两种写法,我更喜欢ActiveRecord的模式写法,因为我不用注入userMapper,new了一个对象之后直接调用方法操作就行了。


复杂的查询也很简单,新建一个EntityWrapper作为查询对象,Wrapper接口封装了很多常用的方法。几乎sql能写出来的条件调用Wrapper的方法就能表现出来。



架构原理


参考答案略。


不过我建议你去mp官网或者这里看看,哈哈 -> mybatis-plus 实践及架构原理.pdf


mybatis plus代码生成器 与 mybatis generator


说起mybatis plus代码生成器的代码,我记得以前这这篇文章中介绍过



现在再拿来用下哈。原理其实很简单,定义好velocity模板(当然你也可以自定义),然后传参数渲染模板生成对应的文件。


我建议你生成的位置最好不要直接覆盖原来的文件,你可能已经有过修改,直接覆盖的话会导致丢失。



而mybatis generator生成的代码就是基本的增删改查和实体。模板好像改不了,灵活性明显不够。


mp插件拓展


mp不仅仅帮我们实现了基本的增删改查操作,同时还扩展了很多实用的插件。让开发的过程更加简单。



分页插件 按如下步骤:


  • 自定义查询语句分页(自己写sql/mapper)

  • spring 注入 mybatis 配置分页插件



  • UserMapper.java 方法内容



  • UserServiceImpl.java 调用翻页方法,需要 page.setRecords 回传给页面



  • UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页



逻辑删除插件


逻辑删除的效果 ---> 会在mp自带查询和更新方法的sql后面,追加『逻辑删除字段』=『LogicNotDeleteValue默认值』 删除方法: deleteById()和其他delete方法, 底层SQL调用的是update tbl_xxx set 『逻辑删除字段』=『logicDeleteValue默认值』

配置如下:


  1. 修改 集成 全局注入器为 LogicSqlInjector



  1. application.yml全局注入值: logicDeleteValue // 逻辑删除全局值 logicNotDeleteValue // 逻辑未删除全局值



  1. 逻辑删除的字段需要注解 @TableLogic



spring整合mybatis-plus的优秀案例


  • 基本集成案例 mybatisplus-spring-boot

  • Java EE(J2EE)快速开发框架 SpringWind

  • SSM 后台框架 KangarooAdmin

  • JAVA分布式快速开发基础平台 iBase4J

  • 又一个 SSM 后台管理框架 framework

  • 猫宁Morning公益商城 Morning

  • 简单实用的权限系统 spring-shiro-training Shiro 案例



推荐阅读

从 Python 迁移到 3.x 操作指南

Nginx 系列实用教程:性能

GitHub 代码仓库数据解读:热度最高编程语言

教育部:AI、算法、开源硬件等进入全国高中新课标

2017 年度码云新增项目排行榜 TOP 50,为它们打“call

点击“阅读原文”查看更多精彩内容

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存