台州网站设计外包,wordpress 管理权限管理,肇庆自助网站建设系统,设计公司起名字大全mybatis-plus
#xff08;简化代码神器#xff09;
地址#xff1a;https://mp.baomidou.com/
目录
mybatis-plus
简介
特性
支持数据库
参与贡献
快速指南
1、创建数据库 mybatis_plus
2、导入相关的依赖
3、创建对应的文件夹
4、编写配置文件
5、编写代码
…mybatis-plus
简化代码神器
地址https://mp.baomidou.com/
目录
mybatis-plus
简介
特性
支持数据库
参与贡献
快速指南
1、创建数据库 mybatis_plus
2、导入相关的依赖
3、创建对应的文件夹
4、编写配置文件
5、编写代码
5.1、User实体类
5.2、mapper层
5.3、测试类扫描mapper层 6、测试 7、总结
常用注解
新增数据
修改数据
删除数据
条件操作
1、QueryWrapper
1.1、eq
1.2、like
1.3、ge
1.4、lt
1.5、gt
2、查询
3、删除
4、修改
5、新增
service层条件操作
1、查询
2、删除
3、新增
4、修改
总结 简介
MyBatis-Plus简称 MP是一个 MyBatis 的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。
愿景
我们的愿景是成为 MyBatis 最好的搭档就像 魂斗罗 中的 1P、2P基友搭配效率翻倍。 特性
无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本 CURD性能基本无损耗直接面向对象操作强大的 CRUD 操作内置通用 Mapper、通用 Service仅仅通过少量配置即可实现单表大部分 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 操作智能分析阻断也可自定义拦截规则预防误操作
支持数据库
mysql 、 mariaDB 、 oracle 、 db2 、 h2 、 hsql 、 DuckDB、 Derby、 Phoenix神州通用、虚谷、优炫
提示
任何能使用 MyBatis 进行增删改查并且支持标准 SQL 的数据库应该都在 MyBatis-Plus 的支持范围内具体支持情况如上。
如果您想要的数据库类型不在上面的列表欢迎给我们 PR 您的数据库方言。 参与贡献
欢迎各路好汉一起来参与完善 MyBatis-Plus我们期待你的 PR
贡献代码代码地址 MyBatis-Plus 欢迎提交 Issue 或者 Pull Requests维护文档文档地址 MyBatis-Plus-Doc 欢迎参与翻译和修订授权说明MyBatis-Plus LOGO 官方授权沟通邮件
快速指南
我们将通过一个简单的项目来阐述 MyBatis-Plus的强大功能在此之前您需要先了解以下几点
拥有 Java 开发环境以及相应 IDE熟悉 Spring Boot熟悉 Maven
使用第三方组件
1、导入对应的依赖
2、代码如何编写
步骤
1、创建数据库 mybatis_plus
现有一张 User 表其表结构如下
idnameageemail1小李18admin1baomidou.com2小陈20admin2baomidou.com3小徐28admin3baomidou.com4小贾21admin4baomidou.com5小张24admin5baomidou.com
其对应的数据库 sql 脚本如下
CREATE DATABASE IF NOT EXISTS mybatis_plus USE mybatis_plus;DROP TABLE IF EXISTS user;CREATE TABLE user (id BIGINT NOT NULL COMMENT 主键ID,name VARCHAR(30) DEFAULT NULL COMMENT 姓名,age INT DEFAULT NULL COMMENT 年龄,email VARCHAR(50) DEFAULT NULL COMMENT 邮箱,PRIMARY KEY (id)
) ENGINEINNODB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;INSERT INTO user(id,name,age,email) VALUES
(1,小李,18,admin1baomidou.com),
(2,小陈,20,admin2baomidou.com),
(3,小徐,28,admin3baomidou.com),
(4,小贾,21,admin4baomidou.com),
(5,小张,24,admin5baomidou.com);
2、导入相关的依赖
完整的pom文件复制粘贴即可
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.17/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIddemo/artifactIdversion0.0.1-SNAPSHOT/versionnamedemo/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scopeversion8.0.26/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.1.1/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project说明我们使用mybatis-plus可以节省我们大量的代码尽量不要同时导入mybatis和mybatis-plus
3、创建对应的文件夹
pojo-mapper-service-controller
4、编写配置文件
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_plus?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaizeroDateTimeBehaviorconvertToNull
spring.datasource.usernameroot
spring.datasource.passwordroot
#连接数据库mybatis-plus.type-aliases-packagecom.example.demo.pojo
mybatis-plus.configuration.map-underscore-to-camel-casefalse
mybatis-plus.mapper-locationsclasspath:mapper/*.xml
mybatis-plus.configuration.auto-mapping-behaviorfull
#mybatis相关的配置
5、编写代码 5.1、User实体类
package com.example.demo.pojo;import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** p* * /p** author author* since 2024-12-15*/
Data
EqualsAndHashCode(callSuper false)
Accessors(chain true)
TableName(user)
public class User implements Serializable {private static final long serialVersionUID 1L;/*** 主键ID*/TableId(value id, type IdType.AUTO)private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮箱*/private String email;}5.2、mapper层
package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.pojo.User;/*** p* Mapper 接口* /p** author author* since 2024-12-15*/
//在对应的Mapper上继承基本的类baseMapper
public interface UserMapper extends BaseMapperUser {//所有的CRUD已经编写完成//不需要像以前的配置一些xml}此时编写完这两个之后就可以开始进行测试了至于之前的mapper.xml文件现在无需进行编写
5.3、测试类扫描mapper层
package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;MapperScan(com.example.demo.mapper)
SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}6、测试
package com.example.demo;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;SpringBootTest
class DemoApplicationTests {AutowiredUserMapper userMapper;Testvoid contextLoads() {ListUser users userMapper.selectList(null);for (User user : users) {System.out.println(user.toString());}}}直接在测试类中编写以上代码selectList中为null原因是需要传入一个QueryWrapper条件管理的对象
而传入一个null值表示不需要任何条件所以是全查 此时控制台就会将所有的数据都输出 完整的代码示例请移步Spring Boot 快速启动示例 [Spring MVC 快速启动示例] 7、总结
通过以上几个简单的步骤我们就实现了 User 表的查找功能甚至连 XML 文件都不用编写
从以上步骤中我们可以看到集成MyBatis-Plus非常的简单只需要引入 starter 工程并配置 mapper 扫描路径即可。但 MyBatis-Plus 的强大远不止这些功能想要详细了解 MyBatis-Plus 的强大功能那就继续往下看吧 配置日志
在application.xml文件中写入这句代码
mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl
常用注解
TableName(表名)
当表名与实体类名不一致时可以在实体类上加入TableName声明
TableId声明属性为表中的主键若属性名称不为默认id
TableFieId(字段) 当实体类属性与表字段不一致时可以用来声明
TableName(表名)
public class User{TableIdprivate Long userId;TableFieId(name)private String realName} 新增数据
我们需要配置主键自增
1、实体类字段上 TableIdtype IdType.AUTO
/*** 主键ID*/TableId(value id, type IdType.AUTO)private Long id; 编写一个Test测试类 Testpublic void insert(){User user new User();user.setName(小明);user.setAge(18);user.setEmail(admin1baomidou.com);userMapper.insert(user);} 这边也是同样直接调用自带的insert方法插入完后执行selectList方法查看是否成功 此时可以看到确实多了一条数据并且就是刚刚插入的数据
修改数据
Testpublic void update(){User user new User();user.setName(小明);user.setAge(18);user.setEmail(admin6baomidou.com);user.setId(6L);userMapper.updateById(user);}
修改数据时需要传入一个id而调用的方法也需要使用updateById的方法并且是根据在实体类中设置的主键来判断的所以说实体类的注解很关键(如果我们设置了其他的位主键那么就会根据其他的来进行修改) 执行完毕后使用selectList再次查询查看是否成功修改 数据已成功修改
删除数据 这边为我们提供了很多的删除方法而我们用的最多的也就是第二种deleteById单个删除
也是非常简单只需要添加一条代码就可以了
Testpublic void delete(){userMapper.deleteById(6);}
里面的值也就是我们需要删除的数的id我们现在把刚刚添加的删除
执行方法后再次使用selectList方法查询 可以看到已经成功删除 条件操作
上面的增删查改操作都仅仅是很普通的操作那么现在我们对操作进行优化可以有更加高级的操作
1、QueryWrapper
在查询中上方展示的是全查现在展示带条件的查询
并且以下的方法可以使用多个表示同时带多个条件
1.1、eq 表示等于查询在数据库中表示 “” Testvoid contextLoads() {QueryWrapperUser qwnew QueryWrapper();qw.eq(name,小李);ListUser users userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}
这段代码就可以实现查询为name的列name列里面是小李的 这样查询结果就是name为小李的一行
1.2、like 在数据库中表示 “like”也就是模糊查询 Testvoid contextLoads() {QueryWrapperUser qwnew QueryWrapper();qw.like(name,小);ListUser users userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}}
这样就可以将name中包含 “小” 的每一行都输出 执行方法后可以看到确实将每一条name中包含了 “小” 的都输出了
1.3、ge 与gt相似此代码表示在数据库中age列大于等于19的都会输出 此时只输出了四条因为有一条的age是小于19的所以不会输出
1.4、lt 表示小于在age这个列中小于19的都会输出 Testvoid contextLoads() {QueryWrapperUser qwnew QueryWrapper();qw.lt(age,19);ListUser users userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}} 此时只输出了age小于19的数据
1.5、gt 表示大于在age这个列中大于19的都会输出 Testvoid contextLoads() {QueryWrapperUser qwnew QueryWrapper();qw.gt(age,19);ListUser users userMapper.selectList(qw);for (User user : users) {System.out.println(user.toString());}} 此时只输出了age大于19的数据
方法太多这里表示不完详细的请看官网
2、查询
selectList()根据qw类来当做参数根据条件查询
selectBatchIds()可以有多个id将多个id全查出来
selectById()单查只能有一个id查询一条数据
selectCount():查数量将qw类的条件当做参数根据条件查询将数量查出来
selectByMap():传递一个Map集合集合中的key是列名value是值
selectMaps():传递一个qw类再传递一个Map集合将两个的条件一起结合
selectObjs()即使在查询中指定了多个字段selectObjs 方法也只会返回查询结果中每个记录的第一个字段的值结果以 ListObject 的形式返回
selectOne():如果查询结果有多条数据那么会抛出异常如果没有数据则返回 null
selectPage():分页查询使用传递一个Ipage类以及一个qw类 3、删除 delete():传递一个qw类如果qw中没有任何条件那么就会全部删除
deleteById():传递一个id可以是字符串也可以是数字等根据在实体类中的主键来进行删除
deleteBatchIds():传递多个id同样可以是字符串或数字等表示同时删除多条数据
deleteByMap():传递一个Map集合key表示列value表示值可以同时删除多个
4、修改 update中只有两个方法也非常的简单
update():根据qw条件进行修改
updateById():传入一个实体类直接根据实体类的信息进行修改修改主键所在的列
5、新增 insert只有一个方法也是无需多说
insert():传入一个实体类直接增加实体中的信息 service层条件操作
刚刚所有的操作都是在mapper层实现的所以说大多部分只有一些方法而service层有更多的方法供我们使用
1、查询 在service层中方法也与mapper层有所不同这里的查询方法变成了list()
但是与之前的都基本相似这里就不多介绍了因为都差不多
2、删除 删除方法也有所不同从delete变成了remove并且都与mapper层相似所以也不过多介绍了
3、新增 新增方法从insert变成了save并且也比之前多了很多
saveBatch():一次性增加多条数据批量新增
saveOrUpdate():这个在项目中使用最频繁因为他只需要一个方法就可以实现新增或修改实现原理也很简单传入一个实体类如果有id那么就是修改如果没有id那么就是新增
saveOrUpdateBatch():同样有id则修改无id则新增可以批量操作
4、修改 修改的方法也很多不过大多方法一看就知道什么意思所以只介绍部分方法
updateBatchByid():批量修改可以传入一个集合里面都是实体类的信息
lambdaUpdate():使用 Lambda 表达式来描述要更新的实体类对象的字段和条件从而实现更加简洁和类型安全的更新操作 总结
那么mybatis-plus的使用就都介绍完了是不是非常简便呢这也就是mybatis-plus为什么要推出的原因就是因为sql代码太难写了所以使用了mybatis-plus就可以极大的简化我们的开发
如果想更深入的了解mybatis-plus可以前往官网查看MyBatis-Plus 为简化开发而生 (baomidou.com)
制作不易有问题可联系作者或者直接在评论声明作者看到会第一时间解决