核心功能1: 代码生成器
hibernate框架可以反向生成实体类,从而节省代码时间.
反向生成即通过读取数据库中的字段名和字段类型,在指定的代码包下生成entity/bean的java代码.
mybatis下本身是一个非常纯粹的ORM框架,没有提供反向映射的功能.
mybatis-plus的核心功能之一,即代码生成器(http://mp.baomidou.com/#/generate-code).
通过对代码生成器的编写,提供从entity到controller的一键生成.在前后端分离的场景下,基本够用.
通过自定义配置,还可以直接生成前端vm模板.
对于生成的service层和controller并没有实际意义,毕竟实际的业务逻辑还是要根据需求去写的.
生成的entity配合mybatis-plus和lomok食用风味更佳.
spring-boot整合
1.pom依赖
添加依赖:
```
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>最新版本号</version>
</dependency>
```
需要干掉的依赖:
```
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- pageHelper分页插件 若不使用mybatis-plus分页,可以先不替换-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
```
2.修改application.yml
干掉mybatis节点的配置.
添加mybatis-plus的配置节点.参考 http://mp.baomidou.com/#/spring-boot
添加配置文件 MybatisPlusConfig 参考 http://mp.baomidou.com/#/install
由于maven依赖版本不一致,可能有细微差别.
至此,springboot可以正常启动完毕.
之后需要修改dao层,使用mybatis-plus提供的函数,根据业务逻辑自行修改.
轻微踩坑:
整合完毕后报错sqlSessionFactory Bean Created Error.
spring整体框架使用IOC的核心思想.所以spring存在各种配置文件,来对bean之间的关系进行依赖注入.
自下而上从别是dataSource, sqlSessionFactory/TransactionManager, Dao...
springboot通过读取配置文件中的spring.databases.xxx属性的配置进行dataSource的生成.
mybatis集成springboot的依赖,即<artifactId>mybatis-spring-boot-starter</artifactId>中,
包含MybatisAutoConfiguration,在包含此以来下,sqlsession及相关Bean不需要配置.
引入Mybatis-plus后,需要重新配置.(http://mp.baomidou.com/#/install)
坑:
- 由于写getter/setter实在好麻烦,所以引入了lomok.
mybatis-plus样例代码中也使用了lomok的data注解.原本以为两者一起食用风味更加,然并卵.
实体类很多都有isDeleted字段,来标记数据库中一份数据是否被逻辑删除.
lomok为这些标记字段生成的setter/getter函数名为:setIsDeleted/getIsDeleted.个人觉得十分合理.
然而,mybatis-plus自带的insert方法,对前缀为is,且为boolean类型的字段做了去前缀处理,即:mybatis-plus需要的getter函数为getDeleted.
如果没有,直接GG.
mybaits-plus官网给出的解决方案比较丧病: jdbc:mysql://127.0.0.1:3306/mp?tinyInt1isBit=false (http://mp.baomidou.com) 实测后并没有什么卵用.
现阶段的改进方案是: 1 明确给出mybatis-plus需要的get函数.
2 https://stackoverflow.com/questions/42619986/lombok-annotation-getter-for-boolean-field 将Boolean对象封装类型改为原生类型boolean。