24.01.01 MyBatis


对sql拆分简化之后,更适合使用MyBatisPlus
搭建项目
- 引入依赖
<!--Mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--Druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>
- 配置文件
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/qingqing?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: rootdruid:initial-size: 5max-active: 100min-idle: 10
mybatis-plus:mapper-locations: classpath:mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 启动类
@SpringBootApplication
@MapperScan("com.javasm.mp.*.dao")
public class MpApplication {public static void main(String[] args) {SpringApplication.run(MpApplication.class, args);}}
测试
常用注解
@MapperScan 全局包扫描
@Mapper 扫描当前dao的,当全局扫描不到的dao需要加入Spring容器,使用
@TableName 实体类的名字和类名不一致的时候,配置数据库表名
@TableId 主键,在主键的属性上添加type = IdType.AUTO 自增type = IdType.INPUT 手动输入type = IdType.ASSIGN_ID 雪花算法生成ID(一长串数字)(默认策略)(1874289430391369729)type = IdType.ASSIGN_UUID UUID,随机字符串(2333b9ea0b5da4b30e8739e6e0a8ea32)如果主键的名字,是id,会自动识别为主键,但是,默认的策略依然是雪花算法
@TableField 只要写了的属性,都认为是数据库的字段.排除当前属性,不是数据库的字段@TableField(exist = false)private SkillModel skill;数据库存在,但是不查询这一列,@TableField(select = false)字段不一致,绑定数据库的列名@TableFleld("game_id")private Integer gid;whereStrategy = FieldStrategy.NOT_EMPTY (针对select语句) //这个非空是指在生成 WHERE 条件时,只有当字段的值不为空(对于字符串类型来说,既不是 null 也不是空字符串 "")时,该字段才会被包含在 WHERE 条件中。@TableField(whereStrategy = FieldStrategy.NOT_EMPTY,condition = SqlCondition.LIKE)非空+ 模糊查询updateStrategy = FieldStrategy.NOT_NULL(针对update语句) @TableField(updateStrategy = FieldStrategy.NOT_NULL , update = "%s + 100")更新的时候,如果更新了当前属性,在当前属性原有值的基础上+100
逻辑删除
物理删除(真删除):执行的是delete操作
逻辑删除(假删除):执行update操作,通过一个字段来表示数据是否删除了@TableLogic(value = "正常的值",delval = "删除的值")后续所有的查询中,都会自动加上 当前的条件
条件构建器
QueryWrapper<Room> queryWrapper = new QueryWrapper<>();
查询的条件构建器
后续的所有查询条件,都要在这里进行设置LambdaQueryWrapper<Room> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Room::getRoomName,"大厅");
list(queryWrapper);
Lambda表示条件构建器
里面所有的方法,都和QueryWrapper是一模一样的
找列的时候,不需要写列名,只需要写属性名就可以了
查询
//单条查询
//roomService.getById(100); //这种自带的根据ID查询的语句要在实体类当中@TableID出来那个是表的ID
LambdaQueryWrapper<Room> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//预计查询条件查询出来的结果是1条,使用getOne 如果是多条,使用list
//lambdaQueryWrapper.eq(Room::getRoomId,10001);
lambdaQueryWrapper.like(Room::getRname,"大厅1212121212");
Room one = roomService.getOne(lambdaQueryWrapper);
//多条查询
List<Room> list = roomService.list(lambdaQueryWrapper);
- 等值查询
lambdaQueryWrapper.eq(Room::getRoomId,10001);
- 模糊查询
lambdaQueryWrapper.like(Room::getRname,"大厅");
- 多条件查询
QueryWrapper<Room> queryWrapper = new QueryWrapper<>();queryWrapper.eq("room_speech_status",1).like("room_name","厅");queryWrapper.eq("room_push",1);List<Room> list = roomService.list(queryWrapper);
- 排序
LambdaQueryWrapper<Room> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.orderByDesc(Room::getRoomId);roomService.list(queryWrapper);
- 子查询
LambdaQueryWrapper<SkillModel> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.inSql(SkillModel::getGid,"select game_id from skill_game where game_name like '%黑%'");skillService.list(queryWrapper);
SELECT skill_id,uid,game_id AS gid,game_username,skill_price FROM skill WHERE (game_id IN (select game_id from skill_game where game_name like '%黑%'))
- apply
LambdaQueryWrapper<Room> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.apply("date_format(ctime,'%Y-%m-%d') = {0}","2025-01-02"); //ctime属性在数据库当中日期格式是 年月日 时分秒,在这里用apply根据年月日查询roomService.list(queryWrapper);相关文章:
24.01.01 MyBatis
对sql拆分简化之后,更适合使用MyBatisPlus 搭建项目 引入依赖 <!--Mysql 驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--Druid数据库连接池--><dependenc…...
游戏引擎学习第70天
这一节没讲什么主要是关于接下来要干的任务 开发过程概览 我们正在进行最后的总结,并计划接下来的步骤。目前的目标是创建一个包含所有必要组件的游戏引擎原型版本,目的是让这些部分能够协同工作并展现预期效果。通过这一过程,可以实验和探…...
深入理解 Spring Cloud 中的 Eureka、Ribbon 和 Feign
1.eureka自我保护机制是什么? Eureka的自我保护机制是一种针对网络异常情况的安全保护措施,旨在防止因为网络问题导致的服务注册中心(Eureka Server)与微服务实例之间的通信故障。当网络分区或其他形式的网络故障发生时,即使微服…...
DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程
目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术,适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…...
山高路陡,无人机代替滑轨吊运物资极大提高做作业效率降低成本
在山高路陡的地区,无人机代替传统的滑轨吊运物资,极大地提高了作业效率并降低了成本。以下是对这一现象的详细分析: 一、无人机吊运的优势 1. 提高作业效率: 无人机能够快速响应并执行吊运任务,尤其在高山、陡峭或交…...
数据的高级处理——pandas模块进阶——数据的统计运算
今天的学习用有好几处与书上的内容有出入,不只是因为pycharm中函数更新、弃用的问题,还是作者有些疏忽。不过影响不大,运行报错,GPT分析一下,原因很简单。这里不进行详细书名,在下边的代码上已经进行详细的…...
【Leetcode】3280. 将日期转换为二进制表示
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个字符串 date,它的格式为 yyyy-mm-dd,表示一个公历日期。 date 可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示&a…...
Vue3 中自定义hook
什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API进行了封装,类似于vue2.x中的mixin。 自定义hook的优势:复用代码, 让setup中的逻辑更清楚易懂。 场景需求:现在我需要获取当前鼠标所点击的地方的…...
嵌入式系统 第七讲 ARM-Linux内核
• 7.1 ARM-Linux内核简介 • 内核:是一个操作系统的核心。是基于硬件的第一层软件扩充, 提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统, 决定着系统的…...
音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件
一、错误的命令 通过FFmpeg命令可以将mp4文件转换为ps文件,PS文件中包含PS流数据。 由于PS流/PS文件对应的FFInputFormat结构为: const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL…...
Embedding
Embedding 在机器学习中,Embedding 主要是指将离散的高维数据(如文字、图片、音频)映射到低纬度的连续向量空间。这个过程会生成由实数构成的向量,用于捕捉原始数据的潜在关系和结构。 Text Embedding工作原理 词向量化&#x…...
Android Studio学习笔记
01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器...
Git的使用流程(详细教程)
目录 01.Git是什么? 1.1 Git简介 1.2 SVN与Git的最主要的区别 1.3 GIt主要特点 02.Git是干什么的? 2.1.Git概念汇总 2.2 工作区/暂存区/仓库 2.3 Git使用流程 03.Git的安装配置 3.1 Git的配置文件 3.2 配置-初始化用户 3.3 Git可视化…...
Keil中的gcc
文章目录 一、IDE背后的命令1.1 IDE是什么1.2 IDE的背后是命令1.3 有两套主要的编译器 二、准备工作2.1 arm-linux-gcc和gcc是类似的2.2 Code::Blocks2.2.1 设置windows环境变量2.2.2 命令行示例 三、gcc编译过程详解3.1 程序编译4步骤3.2 gcc的使用方法3.2.1 gcc使用示例3.2.2…...
bilibili 哔哩哔哩小游戏SDK接入
小游戏的文档 简介 bilibili小游戏bilibili小游戏具有便捷、轻量、免安装的特点。游戏包由云端托管,在哔哩哔哩APP内投放和运行,体验流畅,安全可靠。https://miniapp.bilibili.com/small-game-doc/guide/intro/ 没想过接入这个sdk比ios还难…...
springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
【YOLO算法改进】ALSS-YOLO:无人机热红外图像|野生动物小目标检测
目录 论文信息 论文创新点 1.自适应轻量通道分割和洗牌(ALSS)模块 2.轻量坐标注意力(LCA)模块 3.单通道聚焦模块 4.FineSIOU损失函数 摘要 架构设计 轻量高效网络架构 - ALSS模块 LCA模块 单通道聚焦模块 损失函数优…...
XML解析
一,XML概述 1.什么是XML XML即为可扩展的标记语言(eXtensible Markup Language) XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识 2.XML和HTML不同之处 XML主要用于说明文档的主题,而…...
PlasmidFinder:质粒复制子的鉴定和分型
质粒(Plasmid)是一种细菌染色体外的线性或环状DNA分子,也是一种重要的遗传元素,它们具有自主复制能力,可以在细菌之间传播,并携带多种重要的基因(如耐药基因与毒力基因等)功能。根据质粒传播的特性…...
PTA数据结构作业一
6-1 链表的插入算法 本题要求实现一个插入函数,实现在链表llist中的元素x之后插入一个元素y的操作。 函数接口定义: int InsertPost_link(LinkList llist, DataType x, DataType y); 其中 llist是操作的链表,x是待插入元素y的前驱节点元素…...
Zephyr启动流程的“模块化”设计哲学:从链接脚本到设备树的初始化链条解析
Zephyr启动流程的模块化设计哲学:从链接脚本到设备树的初始化链条解析 在嵌入式系统开发中,实时操作系统(RTOS)的启动流程往往是系统可靠性的第一道门槛。Zephyr RTOS以其独特的模块化设计理念,构建了一套高度可配置、可扩展的初始化体系&…...
终极指南:三分钟轻松解锁《原神》60帧限制,让你的高刷显示器火力全开![特殊字符]
终极指南:三分钟轻松解锁《原神》60帧限制,让你的高刷显示器火力全开!🎮 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 还在为《原神》60…...
别再为测试视频发愁了!手把手教你用FFmpeg生成YUV/RGB原始数据(附播放命令)
音视频开发实战:FFmpeg高效生成与播放YUV/RGB测试素材指南 在音视频编解码器开发、计算机视觉算法测试或多媒体性能调优过程中,开发者经常面临一个共同难题:如何快速获取特定像素格式的原始视频数据作为测试素材?网上现成的YUV或R…...
Node.js 服务端应用接入 Taotoken 实现异步对话补全的完整步骤
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Node.js 服务端应用接入 Taotoken 实现异步对话补全的完整步骤 在 Node.js 服务端应用中集成大模型能力,通常需要处理密…...
Taotoken稳定直连与路由策略保障了我的线上服务SLA
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken稳定直连与路由策略保障了我的线上服务SLA 将线上服务的AI功能迁移到一个新的平台,首要的考量往往是稳定性。当…...
Perplexity真实岗位薪资曝光,17城对比+职级换算公式,HR不会告诉你的薪酬锚点
更多请点击: https://codechina.net 第一章:Perplexity真实岗位薪资曝光,17城对比职级换算公式,HR不会告诉你的薪酬锚点 一线数据来源与采样逻辑 本章薪资数据源自2024年Q2匿名技术社区(如Levels.fyi、Blind、脉脉脱…...
【生产力跃升】Claude Code v2.1.143:允许禁用工作树隔离,插件依赖链强制执行与后台 Agent 补强
前言作为一款工业级的 AI 编程助手,Claude Code 的高频迭代一直在解决复杂工程中的痛点。在最新的 v2.1.143 版本中,开发团队带来了一项重磅底层配置:允许关闭后台 Agent 的 Git 工作树(Worktree)隔离。此外࿰…...
轻松解包网易游戏资源:unnpk工具完整使用指南
轻松解包网易游戏资源:unnpk工具完整使用指南 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 想要探索网易游戏如《阴阳师》、《魔法禁书目录》中的精美角色立…...
Obsidian个性化首页终极指南:3种配置方案提升知识管理效率70%
Obsidian个性化首页终极指南:3种配置方案提升知识管理效率70% 【免费下载链接】obsidian-homepage Obsidian homepage - Minimal and aesthetic template (with my unique features) 项目地址: https://gitcode.com/gh_mirrors/obs/obsidian-homepage 在信息…...
英雄联盟录像编辑终极指南:5分钟掌握免费开源工具League Director
英雄联盟录像编辑终极指南:5分钟掌握免费开源工具League Director 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...
