MyBatis 本是apache的⼀个开源项⽬iBatis, 2010年这个项⽬由apache software foundation迁移到了google code,并且改名为MyBatis 。iBATIS⼀词来源于“internet”和“abatis”的组合,是⼀个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data AccessObjects(DAO)。
MyBatis 是⽀持定制化 SQL、存储过程以及⾼级映射的优秀的持久层框架。MyBatis 避免了⼏乎所有的 JDBC 代码和⼿⼯设置参数以及抽取结果集。MyBatis 使⽤简单的 XML 或注解来配置和映射基本体,将接⼝和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis是iBatis的升级版,⽤法有很多的相似之处,但是MyBatis进⾏了重要的改进。例如:1、Mybatis实现了接⼝绑定,使⽤更加⽅便。
在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射⽂件, ⽽Mybatis实现了DAO接⼝与xml映射⽂件的绑定,⾃动为我们⽣成接⼝的具体实现,使⽤起来变得更加省事和⽅便。2、对象关系映射的改进,效率更⾼
3、MyBatis采⽤功能强⼤的基于OGNL的表达式来消除其他元素。
MyBatis的框架架构
对于IBatis与MyBatis的区别就不再多说了,感兴趣的朋友可以研究⼀下。原理详解:
MyBatis应⽤程序根据XML配置⽂件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地⽅,⼀处是配置⽂件,⼀处是Java代码的注解,获取⼀个SqlSession。SqlSession包含了执⾏sql所需要的所有⽅法,可以通过SqlSession实例直接运⾏映射的sql语句,完成对数据的增删改查和事务提交等,⽤完之后关闭SqlSession。
MyBatis的优缺点
优点就不说了,很长时间的框架了。有些项⽬还在⽤。缺点:
1、编写SQL语句时⼯作量很⼤,尤其是字段多、关联表多时,更是如此。2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
3、框架还是⽐较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要⾃⼰写的,⼯作量也⽐较⼤,⽽且不太容易适应快速数据库修改。4、⼆级缓存机制不佳。
Mybatis-Plus
学过mybatis的⼩伙伴肯定知道早期的mybatis需要写很多Mapper.xml⽂件,这种⽅式导致的缺陷也很明显。
由于需求导致 Entity需要增减⼀个字段,那么与此同时需要修改Mapper.xml⽂件。导致牵⼀发⽽动全⾝(总之⿇烦!!)
在新版本mybatis3中虽然脱离了使⽤Mapper.xml⽂件,代替的⽅式是通过注解开发,把Sql语句写在了注解上。但是这种⽅式依然需要修改Sql语句(需要寻找注解),依然没有解决之前遗留的问题。
因此Mybatis-plus诞⽣了,它的出现就是为了解决这个问题,全过程中不需要写Sql代码,这样减少了开发⼯作量。
有⽤过MyBatis-Plus(简称MP)的都知道它是⼀个MyBatis的增强⼯具,旨在MyBatis的基础上只做增强不做改变,为简化开发、提⾼效率⽽⽣.Mybatis Plus:国⼈团队苞⽶⾖在Mybatis的基础上开发的框架,在Mybatis基础上扩展了许多功能,荣获了2018最受欢迎国产开源软件第5名。
Mybatis Plus Generator:同样为苞⽶⾖开发,⽐Mybatis Generator更加强⼤,⽀持功能更多,⾃动⽣成Entity、Mapper、Service、Controller等。
特点:
⽆侵⼊:只做增强不做改变,引⼊它不会对现有⼯程产⽣影响,如丝般顺滑
损耗⼩:启动即会⾃动注⼊基本 CURD,性能基本⽆损耗,直接⾯向对象操作
强⼤的 CRUD 操作:内置通⽤ Mapper、通⽤ Service,仅仅通过少量配置即可实现单表⼤部分 CRUD 操作,更有强⼤的条件构造器,满⾜各类使⽤需求
⽀持 Lambda 形式调⽤:通过 Lambda 表达式,⽅便的编写各类查询条件,⽆需再担⼼字段写错
⽀持主键⾃动⽣成:⽀持多达 4 种主键策略(内含分布式唯⼀ ID ⽣成器 - Sequence),可⾃由配置,完美解决主键问题⽀持 ActiveRecord 模式:⽀持 ActiveRecord 形式调⽤,实体类只需继承 Model 类即可进⾏强⼤的 CRUD 操作⽀持⾃定义全局通⽤操作:⽀持全局通⽤⽅法注⼊( Write once, use anywhere )
内置代码⽣成器:采⽤代码或者 Maven 插件可快速⽣成 Mapper 、 Model 、 Service 、 Controller 层代码,⽀持模板引擎,更有超多⾃定义配置等您来使⽤
内置分页插件:基于 MyBatis 物理分页,开发者⽆需关⼼具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件⽀持多种数据库:⽀持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件:可输出 Sql 语句以及其执⾏时间,建议开发测试时启⽤该功能,能快速揪出慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可⾃定义拦截规则,预防误操作
组件依赖:
⾸先我们要通过Maven引⼊mybatis-plus 开源组件,在pom.xml⽂件加⼊下⾯的代码:
后⾯的⾃⼰百度就不说了,项⽬中⾃⼰集成。 ⽐较
Mybatis-Plus是⼀个Mybatis的增强⼯具,它在Mybatis的基础上做了增强,却不做改变。我们在使⽤Mybatis-Plus之后既可以使⽤Mybatis-Plus的特有功能,⼜能够正常使⽤Mybatis的原⽣功能。Mybatis-Plus(以下简称MP)是为简化开发、提⾼开发效率⽽⽣,但它也提供了⼀些很有意思的插件,⽐如SQL性能监控、乐观锁、执⾏分析等。
Mybatis虽然已经给我们提供了很⼤的⽅便,但它还是有不⾜之处,实际上没有什么东西是完美的,MP的存在就是为了稍稍弥补Mybatis的不⾜。在我们使⽤Mybatis时会发现,每当要写⼀个业务逻辑的时候都要在DAO层写⼀个⽅法,再对应⼀个SQL,即使是简单的条件查询、即使仅仅改变了⼀个条件都要在DAO层新增⼀个⽅法,针对这个问题,MP就提供了⼀个很好的解决⽅案,之后我会进⾏介绍。另外,MP的代码⽣成器也是⼀个很有意思的东西,它可以让我们避免许多重复性的⼯作。. 总结
Mybatis-Plus简化了单表操作,不⽤写sql,⼀些复杂的单表sql也可以通过api搞出来,多表联合查询、⼀些复杂的sql,还是需要xml来实现其实差别不⼤,只是有些简单的增删改查就没必要去写mapper.xml了⽽已,mp的接⼝已经定义了。还有就是多了⼀些api构造sql语句⽽已,核⼼东西没变。
看到很多同学都在说可以不⽤⾃⼰写xml,其实mybatis官⽅有提供代码⽣成器mybatis-generator,⽽且⽆侵⼊性,⽣成代码后,还是
mybatis代码,没有多⼀层封装。很多同学⽤了MP才知道有代码⽣成器,其实mybatis官⽅也有。Mybatis Generator:⾃动为Mybatis⽣成简单的增删改查sql语句的⼯具。
MP就仿佛,你开着⼀辆名叫MyBayis的⼿动挡汽车,然后请了⼀个叫MP的⼈坐在副驾驶帮你挂档。当然对于团队使⽤,管理严格的的项⽬,还是可以⽤MP的,应该他确实减少了很多的⼯作量。
因篇幅问题不能全部显示,请点此查看更多更全内容