MyBatisPlus常用注解

目录

一、@TableName

二、@TableId

三、@TableField

四、@TableLogic


一、@TableName

        在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表

        由此得出结论,MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决定,且默认操作的表名和实体类型的类名一致。

         若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?

        将表user更名为t_user,测试查询功能。

        程序抛出异常,Table 'mybatis_plus.user'doesn't exist,因为现在的表名为t_user,而默认操作的表名和实体类型的类名一致,即user表。

         在实体类类型上添加@TableName("t_user"),标识实体类对应的表,即可成功执行SQL语句。

        在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_

        此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表

mybatis-plus:
    configuration:
        # 配置MyBatis日志
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    global-config:
        db-config:
            # 配置MyBatis-Plus操作表的默认前缀
            table-prefix: t_

二、@TableId

        MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认基于雪花算法的策略生成id。

        若实体类和表中表示主键的不是id,而是其他字段,例如uid,MyBatis-Plus会自动识别uid为主键列吗?

        实体类中的属性id改为uid,将表中的字段id也改为uid,测试添加功能。

        程序抛出异常,Field 'uid'doesn't have a default value,说明MyBatis-Plus没有将uid作为主键赋值。

        在实体类中uid属性上通过@TableId将其标识为主键,即可成功执行SQL语句。

        @TableId的value属性:

        若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解@TableId,则抛出异常Unknown column'id'in'field list',即MyBatis-Plus仍然会将id作为表的 主键操作,而表中表示主键的是字段uid。

        此时需要通过@TableId注解的value属性,指定表中的主键字段,@TableId("uid")或@TableId(value="uid")。

        @TableId的type属性:

        type属性用来定义主键策略。

        配置全局主键策略:

mybatis-plus:
    configuration:
        # 配置MyBatis日志
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    global-config:
        db-config:
            # 配置MyBatis-Plus操作表的默认前缀
            table-prefix: t_
            # 配置MyBatis-Plus的主键策略
            id-type: auto

        常用的主键策略:

描述

IdType.ASSIGN_ID (默 认)

基于雪花算法的策略生成数据id,与数据库id是否设置自增无关

IdType.AUTO

使用数据库的自增策略,注意,该类型请确保数据库设置了id自增, 否则无效

三、@TableField

        经过以上的测试,我们可以发现,MyBatis-Plus在执行SQL语句时,要保证实体类中的属性名和 表中的字段名一致

        如果实体类中的属性名和字段名不一致的情况,会出现什么问题呢?

        情况1:

        若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格

        例如实体类属性userName,表中字段user_name

        此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格

        相当于在MyBatis中配置

        情况2:

        若实体类中的属性和表中的字段不满足情况1

        例如实体类属性name ,表中字段username

        此时需要在实体类属性上使用@TableField("username")设置属性所对应的字段名

四、@TableLogic

        该注解用于表示逻辑删除。

        逻辑删除:

        物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据

        逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

        使用场景:可以进行数据恢复

        实现逻辑删除:

        step1 :数据库中创建逻辑删除状态列,设置默认值为0

        step2 :实体类中添加逻辑删除属性

        step3 :测试

        测试删除功能,真正执行的是修改

        UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0

        测试查询功能,被逻辑删除的数据默认不会被查询

        SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/402919.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-k8s知识点22-kubernetes实操7-ingress

文章目录 ingress环境准备准备service和pod验证效果 https 代理效果 ingress 在 Kubernetes 中,Ingress 是一种 API 对象,它管理外部访问集群内部服务的规则。你可以将其视为一个入口,它可以将来自集群外部的 HTTP 和 HTTPS 路由到集群内部的…

海思3559 yolov5 wk模型部署笔记

文章目录 安装3559工具链编译opencv编译项目总结 安装3559工具链 将3559工具链copy到虚拟机上,并解压得到安装包 解压: tar -zxvf aarch64-himix100-linux.tgz解压后会得到安装包文件夹: 安装工具链: sudo ./aarch64-himix100…

用 Python 自动化处理无聊的事情

“编程最棒的部分就是看到机器做一些有用的事情而获得的胜利。用 Python 将无聊的事情自动化将所有编程视为这些小小的胜利;它让无聊变得有趣。” Hilary Mason,数据科学家兼 Fast Forward Labs 创始人 “我很享受打破东西然后把它们重新组合起来的乐趣…

SPSSAU【文本分析】|文本聚类

SPSSAU共提供两种文本聚类方式,分别是按词聚类和按行聚类。按词聚类是指将需要分析的关键词进行聚类分析,并且进行可视化展示,即针对关键词进行聚类,此处关键词可以自由选择。按行聚类分析是指针对以‘行’为单位进行聚类分析&…

陈世元:被保送中科院,两次被裁,人生不能老是按部就班的走下去,需要冒险,尝试一下新的东西

《程客有话说》是我们最新推出的一个访谈栏目,邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事,我们尝试建立一个程序员交流与学习的平台,也欢迎大家推荐朋友或自己来参加我们的节目,一起加油。 本期我们邀请的程…

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码(并对2.2进行优化)2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍,可以去查阅官方文…

Web安全之浅见

备注:这是我在2017年在自己的网站上写的文章,今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训,了解了很多关于网络安全方面的知识,也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

vue3使用pinia-plugin-persistedstate 持久化不生效的问题

如下图所示,需要在路由拦截器里面写。不然一个都不生效。 【即使以前生效的,在下图【红框】中定义一下,也会失效。得挪到路由拦截器里面才行】 终于出来了

【GPTs分享】每日GPTs分享之Canva

简介 Canva,旨在帮助用户通过Canva的用户友好设计平台释放用户的创造力。无论用户是想设计海报、社交媒体帖子还是商业名片,Canva都在这里协助用户将创意转化为现实。 主要功能 设计生成:根据用户的描述和创意需求,生成定制的设…

MyBatis-Plus 优雅实现数据加密存储

文章目录 前言一、数据库字段加解密实现1. 定义加密类型枚举2. 定义AES密钥和偏移量3. 配置定义使用的加密类型4. 加密解密接口5. 解密解密异常类6. 加密解密实现类6.1 AES加密解密实现类6.2 Base64加密解密实现类 7. 实现数据库的字段保存加密与查询解密处理类8. MybatisPlus配…

Sora热潮下,如何充分利用AI减少人工测试需求?

近日,OpenAI发布视频生成模型Sora,再次引发全球科技圈讨论热潮。Sora可以根据用户输入的简短文本指令,生成长达1分钟的高清视频,视频画面具有真实感,带有些许电影质感。 根据IDC的预测,未来五年内&#xff…

Java项目:20 基于SSM实现的支教管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 ssm支教管理系统(前台后台) 前台角色:支教学校志愿者 支教学校功能模块:支教学校查询报名职位发布已…

Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin

Android横竖屏切换configChanges"screenSize|orientation"避免activity销毁重建,Kotlin 如果不在Androidmanifest.xml设置activity的: android:configChanges"screenSize|orientation" 那么,每次横竖屏切换activity都会…

【鸿蒙 HarmonyOS 4.0】数据持久化

一、数据持久化介绍 数据持久化是将内存数据(内存是临时的存储空间),通过文件或数据库的形式保存在设备中。 HarmonyOS提供两种数据持久化方案: 1.1、用户首选项(Preferences): 通常用于保存应用的配置信息。数据通…

如何使用Express框架构建一个简单的Web应用

在这个数字化时代,Web应用的需求越来越多样化和复杂化。在前端开发领域,Express框架作为一个快速、灵活的Node.js Web应用程序框架,拥有强大的功能和丰富的生态系统,深受开发者们的青睐。本篇博客将带您一步步探索如何使用Express…

JS进阶——解构赋值

数组解构 基本: let [a, b, c] [1, 2, 3]; // a 1 // b 2 // c 3 可嵌套 let [a, [[b], c]] [1, [[2], 3]]; // a 1 // b 2 // c 3 可忽略 let [a, , b] [1, 2, 3]; // a 1 // b 3 不完全解构 let [a 1, b] []; // a 1, b undefined 剩余运…

LLMChain使用 | RouterChain的使用 - 用本地大模型搭建多Agents

单个本地大模型搭建参考博客 单个Chain:面对一个需求,我们需要创建一个llmchain,设置一个prompt模板,这个chain能够接收一个用户input,并输出一个结果;多个Chain:考虑到同时面对多个需求&#x…

【计算机网络】网络基础知识

一. 网络发展史 独立模式(单机模式):计算机之间相互独立,各自拥有独立的数据。 网络互连:将多台计算机连接在一起,完成数据共享。 随着时代的发展,越来越需要计算机之间进行互相通信&#…

#1.4w字长文#仿抖音项目架构设计与实现

一、项目介绍 本文介绍了一个Web端短视频应用,致力于为用户提供交互友好、功能完备的短视频浏览体验和直播体验。 集成了Gorse推荐算法,旨在为用户提供更个性化的推荐视频流和更权威的热门视频流。接入大模型,通过对视频内容进行语言分析&a…

旧物回收小程序开发,开启绿色生活新篇章

随着科技的发展和人们生活水平的提高,物质生活的丰富带来了大量的废弃物。如何合理处理这些废弃物,实现资源的再利用,已成为社会关注的焦点。旧物回收小程序的开发与应用,为这一问题提供了有效的解决方案。本文将探讨旧物回收小程…