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

【Java EE进阶 --- SpringBoot】Mybatis - plus 操作数据库


🚀 欢迎来到我的CSDN博客:Optimistic _ chen
一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐:

专栏内容特色适合人群
🔥C语言从入门到精通系统讲解基础语法、指针、内存管理、项目实战零基础新手、考研党、复习
🔥Java基础语法系统解释了基础语法、类与对象、继承Java初学者
🔥Java核心技术面向对象、集合框架、多线程、网络编程、新特性解析有一定语法基础的开发者
🔥Java EE 进阶实战Servlet、JSP、SpringBoot、MyBatis、项目案例拆解想快速入门Java Web开发的同学
🔥Java数据结构与算法图解数据结构、LeetCode刷题解析、大厂面试算法题面试备战、算法爱好者、计算机专业学生

🚀我的承诺:
✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客  #编程学习  #Java  #C语言  #算法  #程序员

文章目录

  • Mybatis - plus介绍
  • 准备工作
  • MyBatis-Plus操作
    • 注解操作
      • @TableName
      • @TableField
      • @TableId
    • 条件构造器
      • QueryWrapper
      • UpdateWrapper
      • Lambda( )Wrapper
        • LambdaQueryWrapper
        • LambdaUpdateWrapper
    • 自定义SQL
  • 完结撒花!🎉

Mybatis - plus介绍

从名字就能看出来,Mybatis - plus是Mybatis的增强版,在Mybatis的基础上只做增强,为简化开发,提高效率。
在这里插入图片描述

Maven添加依赖,注意Spring Boot和Mybatis-plus对应版本。
在这里插入图片描述

还需要配置数据库相关信息

spring:application:name: mybatis-plus-demodatasource:url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&useUnicode=true&characterEncoding=utf-8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:configuration: #配置日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: "classpath*:/mapper/**.xml"

准备工作

创建实体类UserInfo:

import lombok.Data;import java.util.Date;
@Data
public class UserInfo {private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

实现Mapper接口类:
注意:Myatis-plus提供了一个基础的BaseMapper接口,已经实现了单表的CRUD,我们只需要继承这个BaseMapper即可。
在这里插入图片描述

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {}

接下来可以在src目录下的test类进行测试(直接去测试类写CRUD,就可以直接运行):

@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid insert() {UserInfo userInfo = new UserInfo();userInfo.setUsername("admin");userInfo.setPassword("admin");userInfo.setAge(12);userInfoMapper.insert(userInfo);}
}

在这里插入图片描述

MyBatis-Plus操作

在这里插入图片描述
我们可以看到,继承的BaseMapper类中是泛型,UserInfo接口继承后就是数据库相对应的实体类。MyBatis-Plus会根据这个实体类来推断表的信息。

注解操作

默认情况下:
1. 表名:实体类的 驼峰表示 转化为 蛇形表示 为表名
2. 字段:根据实体类的属性名 转化为蛇形表示作为字段名

但是有的时候并不是遵循这种规则:

@TableName

修改实体类名,假如我们把类名不按照默认情况命名,就会出现报错:表示数据库不存在.所以需要@TableName 来表示实体类对应的表。

在这里插入图片描述

@TableField

修改属性名deleteFlag为deleteflag,重新测试;
在这里插入图片描述
日志中发现据属性名转换后的字段名为:deleteflag。
在这里插入图片描述

@TableId

通过@TableId注解来指定对应主键。

注意:
如果属性名和字段名不⼀致,需要在@TableId 指明对应的字段名
属性名和字段⼀致的情况下,直接加@TableId 注解就可以.

条件构造器

MyBatis-Plus 提供了⼀套强⼤的条件构造器(Wrapper),⽤于构建复杂的数据库查询条件.* Wrapper类允许开发者以链式调⽤的⽅式构造查询条件,⽆需编写繁琐的SQL语句,从⽽提⾼开发效率并减少SQL注⼊的⻛险***

在这里插入图片描述
更加详细的内容,推荐大家去官网查看条件构造器
AbstractWrapper 提供了所有Wrapper类共有的方法和属性,所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承自 AbstractWrapper。

QueryWrapper

⽤于构造查询条件,但是不局限于查询语句,修改等都可以使用QueryWrapper

mapper接口:

 @Select("SELECT id,username,password,age FROM user_info WHERE age = 18 AND username \n" +"\"%min%\"")List<UserInfo> QueryWrapper();

测试
在这里插入图片描述
注意:一般情况Mybatis-plus会根据@TableField生成别名,但是当指定了QueryWrapper的select属性后就仅仅是属性而没有别名了。

解决办法:
1. 实体类属性名和字段名保持一致
2. 自定义SQL
3. 使用LambdaQueryWrapper实现

UpdateWrapper

对于更新,我们也可以直接使⽤UpdateWrapper,在不创建实体对象的情况下,直接设置更新字段和条件

mapper接口:

    @Update("UPDATE user_info SET delete_flag=0, age=5 WHERE id IN (1,2,3)")List<UserInfo> updateByUpdateWrapper();

在这里插入图片描述
介绍一些方法的缩写:

  • lt :“less than” 的缩写,表⽰⼩于(<).
  • le :"lessthanorequalto"的缩写,表⽰⼩于等于(<=)
  • ge :"greaterthanorequalto"的缩写,表⽰⼤于等于(>=).
  • gt :"greaterthan"的缩写,表⽰⼤于(>).
  • eq :"equals"的缩写,表⽰等于(=).
  • ne :"notequals"的缩写,表⽰不等于.(!=)

Lambda( )Wrapper

QueryWrapper和UpdateWrapper存在⼀个问题,就是需要写死字段名,如果字段名发⽣变更,测试可能会出现问题

MyBatis-Plus 给我们提供了⼀种基于Lambda表达式的条件构造器,它通过Lambda表达式来引⽤实体类的属性从⽽避免了硬编码字段名。

LambdaQueryWrapper
@Testvoid LambdaQueryWrapper(){QueryWrapper<UserInfo> userInfoQueryWrapper=new QueryWrapper<UserInfo>();userInfoQueryWrapper.lambda().select(UserInfo::getId,UserInfo::getUsername,UserInfo::getPassword,UserInfo::getAge).eq(UserInfo::getAge,1);userInfoMapper.selectList(userInfoQueryWrapper).forEach(System.out::println);}

在这里插入图片描述

LambdaUpdateWrapper
@Testvoid LambdaUpdateWrapper(){UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<UserInfo>();updateWrapper.lambda().set(UserInfo::getDeleteflag,0).set(UserInfo::getAge,5).in(UserInfo::getId, List.of(1,2,3));userInfoMapper.update(updateWrapper);}

在这里插入图片描述

自定义SQL

自定义意味着我们不用BaseMapper类的方法。

如果MyBatis-Plus提供的操作不能满⾜我们的实际需求,MyBatis-Plus也提供了⾃定义SQL的功能,我们可以利⽤Wrapper构造查询条件,再结合Mapper编写SQL(Mybatis-plus版本不得低于3.0.7)

在这里插入图片描述
mapper接口:

@Select("select id,username,password,age from user_info ${ew.customSqlSegment}")List<UserInfo> selectUserInfoByCondition(@Param(Constants.WRAPPER) QueryWrapper<UserInfo> queryWrapper);

测试:

    @Testvoid selectUserInfoByCondition() {QueryWrapper<UserInfo> queryWrapper= new QueryWrapper<>();//where age < 20queryWrapper.lt("age",20);//@Select("select id,username,password,age from user_info ${ew.customSqlSegment}")//@Select("select id,username,password,age from user_info where age < 20")userInfoMapper.selectUserInfoByCondition(queryWrapper).forEach(System.out::println);}

在这里插入图片描述
避免了SQL注入的风险。

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen
📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中……


悄悄说:点击主页有更多精彩内容哦~ 😊

http://www.dtcms.com/a/503019.html

相关文章:

  • ffmpeg下载和实战获取音视频时长
  • 如何高效批量修改多格式文本文件?
  • 移动测试利器Appium全方位解析:从原理、实战到应用场景
  • 018数据结构之队列——算法备赛
  • 开源 Linux 服务器与中间件(四)服务器--Tomcat
  • Auto CAD二次开发——测试功能
  • 《Linux进阶指令实操指南》:文件查看、时间管理、搜索压缩全覆盖(附高频案例)
  • Socket编程学习记录
  • AI“缝合怪”变“神作”,游戏宣传图工作流
  • Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价中的创新方法与实践
  • PHPMailer下载和使用教程(非常详细)
  • 傻瓜式免费自助建站系统wordpress下拉
  • 【LeetCode热题100(47/100)】路径总和 III
  • bpmn-js 中如何完整导出 PNG(含自定义 Overlay)
  • 【图像处理】Gamma矫正
  • 【AI论文】MM-HELIX:借助整体式平台与自适应混合策略优化,提升多模态长链反思推理能力
  • Go 入门学习
  • IPoIB驱动中RSS/TSS技术深度解析与性能优化实践
  • Redis最佳实践
  • 鸿蒙NEXT Wear Engine开发实战:手机侧应用如何调用穿戴设备能力
  • github 个人静态网页搭建(一)部署
  • 【Go】C++ 转 Go 第(三)天:defer、slice(动态数组) 与 map
  • 【大模型微调】LLaMA Factory 微调 LLMs VLMs
  • 服务器管理:构建与维护高效服务器环境的指南
  • wordpress 网站生成app中山免费建站
  • 使用搭载Ubuntu的树莓派开启热点
  • 存算一体架构的先行者:RustFS在异构计算环境下的探索与实践
  • asp access网站建设源代码网站的开发流程可以分为哪三个阶段
  • SAUP论文提到的S2S Backbone Models是什么
  • 实战量化Facebook OPT模型