当前位置: 首页 > news >正文

Springboot整合MyBatisplus和快速入门

MyBatisPlus

MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatisPlus的官方网址: MyBatis-Plus 🚀 为简化开发而生

快速入门

导入起步依赖

首先创建一个boot项目,导入MyBatisPlus依赖:

SpringBoot 2:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.11</version>
</dependency>

SpringBoot 3:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.11</version>
</dependency>

注意:导入MyBatisPlus依赖后不要导入其他MyBatis的依赖,因为MyBatisPlus的依赖中包含了mybatis的依赖,避免版本冲突导致的报错。

 顺便再启用一下lombok:

        <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

编写yml配置文件

spring:datasource:password: 123456driver-class-name: com.mysql.cj.jdbc.Driverusername: rooturl: jdbc:mysql://localhost:3306/ssm_pro?serverTimezone=Asia/Shanghai

编写实体类

MyBatisPlus提供了几个注解用于解决表和实体类对应的问题:

注解说明
@TableName用于指定该类对应的表名
@TableId用于指定表中的主键字段信息
@TableField                 指定表中普通字段的信息

编写与数据库表对应的实体类:

@Data    //lombok提供get、set方法
@TableName("`tb_user`")   //与数据库表名对应
public class User {private Integer id;private String name;private String gender;private Integer age;private String address;private String qq;private String email;private String photo;
}

编写mapper接口

    使用MyBatisPlus无需编写mapper.xml文件,也无需在配置文件中配置mybatis,只需创建一个接口继承BaseMapper即可,并且也无需在里面写sql语句就能进行简单的增删改查操作,注意还需要加上@Mapper注解

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

编写测试类

    这里就只展示MyBatisPlus的使用,就不编写service等类。

@SpringBootTest
class MybatisPlusApplicationTests {@AutowiredUserMapper userMapper;@Testvoid contextLoads() {//查询单个User user1 = userMapper.selectById(2);System.out.println("查询单个"+user1);//查询所有List<User> list = userMapper.selectList(null);System.out.println("查询所有");System.out.println(list);//添加数据User user2 = new User();user2.setName("李白");user2.setAge(20);user2.setGender("男");user2.setEmail("d3333ahs");userMapper.insert(user2);//更新数据user2.setAge(32);userMapper.updateById(user2);//删除数据userMapper.deleteById(2);}}

注意事项:使用insert方法时,需要注意实体类中的主键要设置

@TableId(type = IdType.AUTO)

否则插入的id会出现异常

更新时使用updateById,会自动根据传入的实体类的id进行更新。如果使用update方法,会更新所有的数据。

条件构造器

    在实际开发中,对于数据库的增删改查操作会更加复杂,MyBatisPlus自带的方法并不能满足我们所需的操作,这个时候就要使用条件构造器Wrapper。

    Wrapper 类是构建复杂查询和更新条件的关键工具。它允许开发者以链式调用的方式构造 SQL 的 WHERE 子句,提供了极大的灵活性和便利性。

条件构造器的核心类:

类型特点适用场景
QueryWrapper基础条件构造器简单条件查询
LambdaQueryWrapper类型安全的Lambda表达式构造器避免字段硬编码
UpdateWrapper更新条件构造器字段更新操作
LambdaUpdateWrapperLambda风格的更新构造器类型安全的更新操作

条件构造器的常用方法

方法说明
eq(R column, Object val)WHERE column= 'val'
ne(R column, Object val)WHERE column<> 'val'
gt(R column, Object val)WHERE column> val
ge(R column, Object val)WHERE column>= val
lt(R column, Object val)WHERE column< val
le(R column, Object val)WHERE column<= val
between(R column, Object val1, Object val2)WHERE column BETWEEN val1 AND val2
notBetween(R column, Object val1, Object val2)WHERE column NOT BETWEEN val1 AND val2

like(R column, Object val)

WHERE column LIKE '%val%'

notLike(R column, Object val)

WHERE column NOT LIKE '%val%'

likeLeft(R column, Object val)

columnLIKE '%val'

likeRight(R column, Object val)

WHERE column LIKE 'val%'
isNull(R column)WHERE column IS NULL

in(R column, Collection<?> value)

in(R column, Object... values)

WHERE column IN (value)

 示例

  • 查询年龄大于20的姓名和性别
  • 查询年龄小于30并且名字中带有“张”记录
  • 将地址为湖南的记录改为四川
        //查询年龄大于20的姓名和性别QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","gender").gt("age",20);List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);//查询年龄小于30并且名字中带有“张”记录QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();queryWrapper1.lt("age",30).like("name","张");List<User> users1 = userMapper.selectList(queryWrapper1);System.out.println(users1);//将地址为湖南的记录改为四川UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.eq("address","湖南");User user = new User();user.setAddress("四川");userMapper.update(user,userUpdateWrapper);

 

基于lambda表达式写法

MyBatisPlus还提供了一种解决上述硬编码方式的构造器:

        //基于lambda表达式写法//查询年龄大于20的姓名和性别LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.select(User::getName,User::getGender).gt(User::getAge,20);List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);//查询年龄小于30并且名字中带有“张”记录LambdaQueryWrapper<User> queryWrapper1 = new LambdaQueryWrapper<>();queryWrapper1.lt(User::getAge,30).like(User::getName,"张");List<User> users1 = userMapper.selectList(queryWrapper1);System.out.println(users1);//将地址为湖南的记录改为四川LambdaUpdateWrapper<User> userUpdateWrapper = new LambdaUpdateWrapper<>();userUpdateWrapper.eq(User::getAddress,"湖南");User user = new User();user.setAddress("四川");userMapper.update(user,userUpdateWrapper);

http://www.xdnf.cn/news/81037.html

相关文章:

  • lspci的资料
  • crewai与langchain分析某公司股票是否可购买
  • prtobuf的原理
  • 2.Spring MVC与WebFlux响应式编程
  • UOS+N 卡 + CUDA 环境下 X86 架构 DeepSeek 基于 vLLM 部署与 Dify 平台搭建指南
  • Nature Communications 面向形状可编程磁性软材料的数据驱动设计方法—基于随机设计探索与神经网络的协同优化框架
  • 30分钟编写十大排序算法完成
  • 施磊老师基于muduo网络库的集群聊天服务器(四)
  • 含锡废水具有显著的回收价值
  • kvm下的ceph主机启动io请求统计
  • AOSP Android14 Launcher3——RecentsView最近任务数据加载
  • Hive学习
  • 【数字图像处理】立体视觉基础(1)
  • 禁止ubuntu自动更新
  • 基于nlohmann/json 实现 从C++对象转换成JSON数据格式
  • c++内存池
  • 调整IntelliJ IDEA中当前文件所在目录的显示位置
  • 可吸收聚合物:医疗科技与绿色未来的交汇点
  • 解决IntelliJ IDEA配置文件(application.properties)中文注释变成乱码的问题
  • linux驱动---视频播放采集架构介绍
  • 2025年数字媒体设计与文化交流国际会议 (DMACE 2025)
  • 【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试
  • 【数据结构和算法】5. 堆栈和队列
  • Android Retrofit原理解析
  • map和set
  • 如何让 vscode jupyter 访问 terminal 的环境变量?
  • 【医学影像 AI】基于 AI 的远程筛查 ROP 效果评价
  • UML-网络媒体教学系统顺序图深度解析
  • Springboot+Vue实现邮箱验证功能(邮箱登录+忘记密码)
  • 嵌入式:ARM公司发展史与核心技术演进