网站首页 > 教程文章 正文
前言:
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上进行了扩展,旨在简化MyBatis的操作并提高开发效率。适用于各种需要进行数据库操作的场景,特别是需要频繁进行CRUD操作的场景。它简化了MyBatis的使用,使得开发者可以更加专注于业务逻辑的实现,而不是过多关注底层的数据库操作。
一、主要特性
- 无侵入性:MyBatis-Plus只做增强不做改变,引入它不会对现有工程产生影响。
- 损耗小:启动即会自动注入基本CURD(Create、Read、Update、Delete),性能基本无损耗,直接面向对象操作。
- 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求。
- 支持Lambda形式调用:通过Lambda表达式,方便地编写各类查询条件,无需再担心字段写错。
- 支持主键自动生成:支持多达4种主键策略(内含分布式唯一ID生成器-Sequence),可自由配置,完美解决主键问题。
- 支持ActiveRecord模式:实体类只需继承Model类即可进行强大的CRUD操作。
- 支持自定义全局通用操作:支持全局通用方法注入(Write once, use anywhere)。
- 内置代码生成器:采用代码或者Maven插件可快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,还有超多自定义配置。
- 内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询,支持多种数据库。
- 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。
- 内置全局拦截插件:提供全表delete、update操作智能分析阻断,也可自定义拦截规则,预防误操作。
二、框架结构
MyBatis-Plus的框架结构主要包括以下几个部分:
- 核心模块:包括BaseMapper接口、BaseService接口等,提供了基础的CRUD操作。
- 条件构造器:用于构建复杂的查询条件,包括SelectOne、SelectList、SelectPage、Update、Delete等方法。
- 代码生成器:可以自动生成Mapper、Model、Service、Controller等层的代码,提高开发效率。
- 插件体系:包括分页插件、性能分析插件、全局拦截插件等,提供了丰富的扩展功能。
三:使用示例
创建springboot项目,引入mvn依赖,配置....
项目结构:
- 1.引入依赖
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 2.配置yml文件
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
username: root
password: 123456
#mybatis-plus配置
mybatis-plus:
# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
# 例如 com.**.**.mapper
mapperPackage: com.study.mapper
# 对应的 XML 文件位置
mapperLocations: classpath*:mapper/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.study.domain
global-config:
dbConfig:
# 主键类型
# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
# 如需改为自增 需要将数据库表全部设置为自增
idType: ASSIGN_ID
configuration:
#sql执行日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 3.创建实体
@Data
@TableName("t_user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
}
- 4.创建mapper接口,继承mybatis-plus提供BaseMapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
- 5.创建service接口,继承mybatis-plus提供IService接口
public interface IUserService extends IService<User> {
}
- 6.创建service实现类,继承mybatis-plus提供ServiceImpl类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
- 7.初体验
a.controller:
@RestController
@RequiredArgsConstructor
public class UserController {
private final IUserService userService;
@GetMapping("/query/{id}")
public User queryById(@PathVariable Integer id) {
return userService.getById(id);
}
}
b.数据库:
c.结果:
四:其他用法
- 1.lambda用法
a.代码示例:根据名称模糊搜索
@RestController
@RequiredArgsConstructor
public class UserController {
private final IUserService userService;
@GetMapping("/queryName")
public List<User> queryName(String name) {
LambdaQueryWrapper<User> lqw = Wrappers.lambdaQuery();
lqw.like(!StringUtils.isBlank(name), User::getName, name);
return userService.list(lqw);
}
}
b.结果
- 2.分页
a.创建配置类
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
b.代码示例
@RestController
@RequiredArgsConstructor
public class UserController {
private final IUserService userService;
@GetMapping("/queryPage")
public IPage<User> queryPage(String name) {
LambdaQueryWrapper<User> lqw = Wrappers.lambdaQuery();
lqw.like(!StringUtils.isBlank(name), User::getName, name);
IPage<User> page = new Page<>();
page.setCurrent(1);
page.setSize(10);
IPage<User> result = userService.page(page, lqw);
return result;
}
}
c.结果
还有非常多的用法 ,自行试试
猜你喜欢
- 2024-12-25 mybatis-plus-join编码实现Join联表查询,真香!
- 2024-12-25 SpringBoot咋使用PageHelper实现数据分页?
- 2024-12-25 MyBatis-Plus中如何使用ResultMap
- 2024-12-25 通过Mybatis Plus实现代码生成器,常见接口实现讲解
- 2024-12-25 SpringBoot集成mybatis-plus springboot集成mybatisplus的配置
- 2024-12-25 MyBatis-Plus码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
- 2024-12-25 MyBatis Plus—CRUD 接口 mybatis plus typehandler
- 2024-12-25 聊聊关于Mybatis分页操作PageHelper及实现原理?
- 2024-12-25 Springboot+MybatisPlus实现用户CRUD操作(后端实现)
- 2024-12-25 MybatisPlus方法详细使用,实现无SQL式开发
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)