哈喽~大家好,MyBatis-Plus介绍与项目起步讲解。
🥇个人主页:个人主页
🥈 系列专栏:【Java框架】
🥉与这篇相关的文章:
Springboot 整合与文件配置 Springboot 整合与文件配置_程序猿追的博客-CSDN博客 springboot 项目起步讲解及自动装配原理 springboot 项目起步讲解及自动装配原理_程序猿追的博客-CSDN博客 Java 框架的一些文件配置 Java 框架的一些文件配置_程序猿追的博客-CSDN博客
目录
一、前言
MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。
MyBatisPlus的官网为: https://mp.baomidou.com/
1、特性(官网提供)
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作,BaseMapper
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,简单的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 操作智能分析阻断,也可自定义拦截规则,预防误操作
二、快速开始
1、创建项目
Spring Initializr
勾选要使用的技术
导入依赖
-
<dependency>
-
<groupId>com.alibaba
</groupId>
-
<artifactId>druid-spring-boot-starter
</artifactId>
-
<version>1.2.12
</version>
-
</dependency>
yml配置
-
spring:
-
datasource:
-
type: com.alibaba.druid.pool.DruidDataSource
-
driver-class-name: com.mysql.cj.jdbc.Driver
-
url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
-
username: root
-
password: 123456
-
# 开启mp的日志(输出到控制台)
-
mybatis-plus:
-
configuration:
-
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
实体类
-
import lombok.*;
-
-
//lombok
-
-
@Data
-
public
class
User {
-
private Long id;
-
private String name;
-
private String password;
-
private Integer age;
-
private String tel;
-
}
dao 层
-
@Mapper
-
public
interface
UserDao
extends
BaseMapper<User> {
-
}
主启动类
-
//@MapperScan("com.itxzw.dao")
-
@SpringBootApplication
-
public
class
Mybatisplus01QuickstartApplication {
-
-
public
static
void
main
(String[] args) {
-
SpringApplication.run(Mybatisplus01QuickstartApplication.class, args);
-
}
-
-
}
说明:Dao接口要想被容器扫描到,有两种解决方案:
方案一:在Dao接口上添加
@Mapper
注解,并且确保Dao处在引导类所在包或其子包中
该方案的缺点是需要在每一Dao接口中添加注解
方案二:在引导类上添加
@MapperScan
注解,其属性为所要扫描的Dao所在包
该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,
@Mapper
就可以不写。
编写测试类
-
@Test
-
void
testGetAll
() {
-
List<User> userList = userDao.selectList(
null);
-
System.out.println(userList);
-
}
效果
我们点击 selectList 进去看下,发现这是个接口 里面有 insert、delete、update等,这不就是crud吗?
2、新建
-
@Test
-
void
testSave
(){
-
User
user
=
new
User();
-
user.setName(
"阿萨德");
-
user.setPassword(
"驱蚊器无");
-
user.setAge(
12);
-
user.setTel(
"123123123");
-
userDao.insert(user);
-
}
效果
3、单个查询
-
@Test
-
void
testGetById
(){
-
User
user
= userDao.selectById(
1586705016340967426L);
-
System.out.println(user);
-
}
4、修改
-
@Test
-
void
testUpdate
(){
-
User
user
=
new
User();
-
user.setId(
1586705016340967426L);
-
user.setName(
"Tom8请问88");
-
user.setPassword(
"tom12312888");
-
userDao.updateById(user);
-
}
5、删除
-
@Test
-
void
testDelete
(){
-
userDao.deleteById(
1586705016340967426L);
-
}
这里我们分析一下
参数类型为什么是一个序列化类?
从这张图可以看出
String和Number是Serializable的子类,
Number又是Float,Double,Integer等类的父类,
能作为主键的数据类型都已经是Serializable的子类,
MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。
6、分页
基础的增删改查就已经学习完了,刚才我们在分析基础开发的时候,有一个分页功能还没有实现,在MP中如何实现分页功能,就是咱们接下来要学习的内容。
分页查询使用的方法是:
IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
IPage:用来构建分页查询条件
Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage
IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+h,会找到其有一个实现类为
Page
。
-
@Test
-
void
testGetByPage
(){
-
//IPage对象封装了分页操作相关的数据
-
IPage
page
=
new
Page(
2,
3);
-
userDao.selectPage(page,
null);
-
System.out.println(
"当前页码值:"+page.getCurrent());
-
System.out.println(
"每页显示数:"+page.getSize());
-
System.out.println(
"一共多少页:"+page.getPages());
-
System.out.println(
"一共多少条数据:"+page.getTotal());
-
System.out.println(
"数据:"+page.getRecords());
-
}
分页拦截器
-
@Configuration
-
public
class
MpConfig {
-
@Bean
-
public MybatisPlusInterceptor
mpInterceptor
(){
-
//1.定义Mp拦截器
-
MybatisPlusInterceptor
mpInterceptor
=
new
MybatisPlusInterceptor();
-
//2.添加具体的拦截器
-
mpInterceptor.addInnerInterceptor(
new
PaginationInnerInterceptor());
-
return mpInterceptor;
-
}
-
}
效果
不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!
转载:https://blog.csdn.net/aasd23/article/details/127758263