Mybatis和MybatisPlus的区别与联系
Mybatis-Plus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影。Mybatis-Plus又简称(MP)是为简化开发,提高开发效率而生正如官网所说的,
快速与SpringBoot整合基础入门
导入必须依赖
- MybatisPlus整合SpringBoot的场景启动器jar
1 | xml复制代码 <dependency> |
- 连接mysql的驱动jar
1 | xml复制代码<dependency> |
注意这里没有指定
mysql-connector-java
jar包版本时SpringBoot会默认为我们指定一个版本
配置数据源
1 | xml复制代码#---------------数据库连接配置-------------- |
简单CRUD
编写实体类与数据库映射
实体类Student
与数据库表student
对应
1 | JAVA复制代码package cn.soboys.springbootmybatisplus.bean; |
编写mapper(dao)与数据库交互
接口StudentMapper
具体实现由mybatis代理实现
1 | java复制代码package cn.soboys.springbootmybatisplus.mapper; |
编写service实现具体业务
- 接口
IStudentService
1 | java复制代码package cn.soboys.springbootmybatisplus.service; |
- 实现类
StudentServiceImpl
1 | java复制代码package cn.soboys.springbootmybatisplus.service.impl; |
编写controller主程序
1 | java复制代码package cn.soboys.springbootmybatisplus.controller; |
向数据库里添加一个学生
我们看到返回结果是true 代表添加成功
根据学生id修改刚刚添加学生信息
我们看到也修改成功返回true,注意这里修改时候多传一个studentId 参数,就是通过学生id找到对应的学生在进行修改。
查询所有的学生信息
根据学生id删除学生信息
我们看到返回true代表删除成功
根据id获取某个学生信息
到这里单张表最基本的crud功能都可以正常使用
SpringBoot整合进阶使用
我们看到上面完成了最基本整合使用很多地方还可以进一步优化
简化实体bean
我们看到上面整合方式Student
实体类包含很多getter,setter方法,和一些不非必要的映射注解可以适当的简化
- 导入jar包
lombok
这里没有写版本默认用springboot给我们指定的一个版本
1 | java复制代码<dependency> |
lombok
可以通过注解@Data
帮我们自动生成getter,setter 方法我们只需要在对应实体类上添加上这个注解就可以去掉代码中冗余getter,setter 方法。
简化实体bean与数据库映射注解
我们看到上面整合方式Student
实体类包含@TableName
注解和很多@TableField
注解其实遵守MybatisPlus中java实体类与数据库映射规则可以适当简化默认MybatisPlus会把大驼峰命名法(帕斯卡命名法)转换为数据库对应下划线命名方法
例如实体类名为:OwnUser,会给你对应到数据库中的own_user表
字段StudentId ,会给你对应数据库表中student_id 的字段
所以最终实体类可以简化成如下代码
1 | java复制代码package cn.soboys.springbootmybatisplus.bean; |
简化mapper扫描
上面整合方式会在每个mapper接口类中添加@Mapper
注解进行扫描这样会很麻烦造成冗余,我们可以直接在SpringBoot启动类上添加@MapperScan
批量扫描mapper 包,当然我们也可以在其他任意配置类上添加@MapperScan
批量扫描mapper 包,但一般会在SpringBoot启动类上添加(本质SpringBoot启动类也是配置类),
这样配置比较集中,有意义,也不需要额外去写一个无意的配置类
1 | java复制代码package cn.soboys.springbootmybatisplus; |
这样就可以不用单独在每个mapper接口类添加@Mapper
注解进行扫描
数据库连接池配置
上面我们只是进行了简单的数据库连接配置,但是在真正实际应用中都会使用数据库连接池提高数据连接效率,减少不必要数据库资源开销 具体配置如下
1 | xml复制代码#---------------数据库连接配置-------------- |
MybatisPlus配置
我们看到上面整合只是简单crud,单张表的操作,我们的service,mapper 没有写任何方法只是继承了MybatisPlus 的通用 Mapper,BaseMapper
,通用service接口IService
以及实现ServiceImpl
就具备了基础的crud方法,但是当遇到多表复杂条件查询时候,就需要单独写sql,这时候就需要单独配置了mapper.xml
文件了
1 | xml复制代码#--------------------mybatisPlus配置------------------ |
分页插件使用
在MybatisPlus中也为我们分页做了相关处理我们要做相关配置才能正常使用
SpringBoot配置类
1 | java复制代码package cn.soboys.springbootmybatisplus.config; |
StudentMapper类
1 | java复制代码/** |
studentMapper.xml
1 | xml复制代码<!-- 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页--> |
IStudentService 接口
1 | java复制代码/** |
StudentServiceImpl 实现类
1 | java复制代码@Override |
StudentController 主程序调用
1 | java复制代码 /** |
这里需要传递分页等相关信息,可以自己封装一个分页查询通用对象PageRequest
1 | java复制代码package cn.soboys.springbootmybatisplus; |
我们看到正常分页查询每页显示2条第1页
第2页
代码生成器
我们知道Mybatis可以通过配置生成基础的实体映射bean
,简化我们开发时间,不必要写繁琐的映射bean包括一堆属性,MybatisPlus也有自己的代码生成器AutoGenerator
,通过简单配置,我们可以快速生成完整的model
,service
,mapper
,不需要自己去写然后继承通用mapper,service官网原话如下
添加依赖
1 | xml复制代码 <!--生成器依赖--> |
自定义生成器代码
1 | java复制代码package cn.soboys.springbootmybatisplus; |
运行后的结果
我们看到运行成功已经正常生成我们需要的目录结构
这个模版是通用模版只需要,稍微改一下自己需要生成数据库
,包
,目录
就可以使用了
SpringBoot整合高阶使用
调试打印应sql
在开发中我们常常需要调试代码,需要看看生成sql
是否正确,这个时候就需要在控制台打印sql
导入依赖
1 | pom复制代码<!-- https://mvnrepository.com/artifact/p6spy/p6spy --> |
配置文件配置
1 | properties复制代码#url 改为p6spy开头的连接url |
spy配置文件
1 | properties复制代码#3.2.1以上使用 |
我们看到通过简单配置控制台成功打印出运行sql
本文转载自: 掘金