在Java中,我比较ORM熟悉就只有Hibernate
和Mybatis
,其他的并未实践使用过,在这二者之间我更喜欢Mybatis
,因为它精简、灵活(毕竟我是上年纪的程序员,喜欢自己写SQL)。
刚才有提到Mybatis
,但是这里的重点是介绍Mybatis-Plus
,它是Mybatis
的增强版,如果要了解Mybatis
的细节的话请点击这里。
简介
据MyBatis-Plus官网介绍,MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这看上去挺香的,所以必须得尝尝。
这里涉及到的环境、组件如下:
- MariaDB 10.3.10
- Windows 10
- IntelliJ IDEA 2019.3.1
- 64 bit JDK 1.8.0_231
- Spring Boot 2.2.3.RELEASE
- Lombok 1.18.10
- Knife4j 2.0.1
- Mybatis-plus 3.3.0
- Druid
Spring Boot 整合Mybatis-Plus
我之前一直是直接用的Mybatis
,但是作为喜欢偷懒
的人,当然得想办法来提高我们的效率,所以就想着用Mybatis-Plus
来省去一些单表的CRUD操作再结合MyBatis-Plus
配套的AutoGenerator
代码生成器,就能为我们节省不少时间。
引入依赖包
首先,我们得引入Mybatis-Plus
和mariadb-java-client
等几个包:
1 | <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> |
在application.yml
配置我们的数据库连接信息:
1 | spring: |
这里我新建一个名为User
的实体,具体属性如下:
1 | @Data |
新建一个UserMapper
接口:
1 | public interface UserMapper extends BaseMapper<User> { |
在我们的启动类加上@MapperScan
来指定我们的Mapper
扫描目录:
1 | @MapperScan("com.eyiadmin.demo.mapper") |
我新建一个单元测试,来试试我们的UserMapper
的selectList
:
1 | @RunWith(SpringRunner.class) |
会看到Mybatis-Plus
为我取出的数据:
1 | 2020-01-20 09:44:14.125 TRACE org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:149) 2CNU7X5OLAUE004 --- [ main] c.e.d.m.U.selectList : <== Columns: username, password, enabled |
我们再试试Mybatis-Plus
为什么封装的Insert
:
1 | @Test |
可以看到日志:
1 | 2020-01-20 09:51:32.021 DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143) 2CNU7X5OLAUE004 --- [ main] c.e.d.m.U.insert : ==> Preparing: INSERT INTO users ( username, password, enabled ) VALUES ( ?, ?, ? ) |
其他高端操作请阅读相关文档https://mp.baomidou.com/guide/quick-start.html
Spring Boot整合Druid数据库连接池
在Spring Boot 2.X默认使用了HikariCP
作为数据库连接池,据说hikariCP
性能最高(hikariCP>druid>dbcp>c3p0),但是我更喜欢Druid
全面的功能和毫不逊色的性能。
开撸吧,首先当然还是引入我们的需要的Druid
依赖包:
1 | <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter --> |
接下来就是修改我们的的application.yml
配置:
1 | spring: |
可以看到我们的日志信息为:
1 | 2020-01-20 10:14:54.581 INFO com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2003) 2CNU7X5OLAUE004 --- [extShutdownHook] c.a.d.p.DruidDataSource : {dataSource-1} closing ... |
现在我们增加一个Controller
来获取Druid的监控数据:
1 | @RestController |
访问http://localhost:8080/druid/status
可以得到一个json:
1 | [{ |
我们还可以打开stat-view-servlet
,需要加入如下配置:
1 | spring: |
这是启动后,访问http://localhost:8080/druid/index.html
页面就会跳转到登录页面,输入我们配置的用户名和密码admin/admin
:
可以看到Druid
提供的功能是比较全面的,另外在第三张图可以看到我们的相关参数,大家也可以参照这个来配置连接池。
MyBatis-Plus的代码生成器
Mybatis有Generator工具为我们提高编码效率,MyBatis-Plus也不示弱,它也提供有MyBatis-Plus AutoGenerator 。在上面的简单实体只有3个属性,加入有几十个属性怎么办呢?这时候AutoGenerator就可以帮我们一个大忙。首先引入所需包:
1 | <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator --> |
新建CodeGenerator
类:
1 | // 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中 |
我用的官网提供的默认方式,运行后会生成对应的controller
、entity
、mapper
、service
代码。也支持自定义模版https://mp.baomidou.com/guide/generator.html
Knife4j的使用
这里我引入了Knife4j包:
1 | <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> |
新建一个SwaggerConfiguration
类配置我们的Swagger
:
1 | @Configuration |
新建一个名为UserController
的Controller
:
1 | @RequestMapping("/v1/user") |
启动起来,访问localhost:8080/doc.html
:
调用我们的接口,可以看到Druid
监控到了我们SQL语句的执行情况
过于Swagger也可以看看我之前的一篇文章Spring Boot集成Swagger
若有不足之处还望指正,多谢。欢迎感兴趣的朋友与我多多交流
参考
MyBatis-Plus
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
knife4j