mybatisplus映射解读

news2024/10/6 10:39:07

目录

自动映射

表映射

字段映射

字段失效 

视图属性


Mybatis框架之所以能够简化数据库操作,是因为他内部的映射机制,通过自动映射,进行数据的封装,我们只要符合映射规则,就可以快速高效的完成SQL操作的实现。既然MybatisPlus是基于Mybatis的增强工具,所以也具有这样的映射规则。

我们先来了解一下自动映射规则。

自动映射

  • 【1】表名和实体类名映射 -> 表名user   实体类名User
  • 【2】字段名和实体类属性名映射 -> 字段名name   实体类属性名name
  • 【3】字段名下划线命名方式和实体类属性小驼峰命名方式映射 -> 字段名 user_email   实体类属性名 userEmail

MybatisPlus支持这种映射规则,可以通过配置来设置

map-underscore-to-camel-case: true 表示支持下划线到驼峰的映射
map-underscore-to-camel-case: false 表示不支持下划线到驼峰的映射

可以在application.yml文件中进行配置:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

表映射

通过@TableName()注解指定映射的数据库表名,就会按照指定的表名进行映射如:此时将数据库的表名改为study_user,要完成表名和实体类名的映射,需要将实体类名也要指定为study_user

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("study_user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

果有很多实体类,对应到数据库中的很多表,我们不需要每个依次配置,只需要配置一个全局的设置,他都会给每个实体类名前面添加指定的前缀,这里我们演示一下在application.yml全局配置的效果

mybatis-plus:
  global-config:
    db-config:
      table-prefix: study_

表名的前缀为study_ 

字段映射

什么场景下会改变字段映射呢?

【1】当数据库字段和表实体类的属性不一致时,我们可以使用@TableField()注解改变字段和属性的映射,让注解中的名称和表字段保持一致
如:此时将数据库字段的名称我们改为username,在根据实体类的属性拼接SQL的使用,就会使用@TableField()中指定的名称username进行拼接,完成查询

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableField("username")
    private String name;
   }

此时的SQL语句是这样的

SELECT id,username AS name,email FROM study_user

【2】数据库字段和表实体类的属性一致,框架在拼接SQL语句的时候,会使用属性名称直接拼接sql语句,例如:

SELECT  id,username AS name,age,email,desc  FROM study_user

这条语句直接进行查询的时候,会出现错误

Error querying database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc  FROM study_user' at line 1

原因是,desc属于关键字,不能直接用于sql查询,要解决这个问题,就需要将desc字段加上``符号,将他变为不是关键字,才能完成查询,那这个问题的根本也是改变生成的SQL语句的字段名称,也就是我们需要通过@TableField()改变实体类的属性名称,将desc变为`desc`,就可以解决这个问题

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableField("`desc`")
    private String desc;
}

字段失效 

当数据库中有字段不希望被查询,我们可以通过@TableField(select = false)来隐藏这个字段,那在拼接SQL语句的时候,就不会拼接这个字段

如:如果不想显示年龄信息,那么可以在age属性上添加这个注解,来隐藏这个字段

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableField(select = false)
    private Integer age;
}

生成的SQL语句如下,通过查询生成的SQL语句,发现并没有拼接age字段

视图属性

在实际开发中,有些字段不需要数据库存储,但是却需要展示,需要展示也就是意味着实体类中需要存在这个字段,我们称这些实体类中存在但是数据库中不存在的字段,叫做视图字段。

根据之前的经验,框架会默认将实体类中的属性作为查询字段进行拼接,那我们来思考,像这种视图字段,能够作为查询条件么,显示是不能的。因为数据库中没有这个字段,所以查询字段如果包含这个字段,SQL语句会出现问题。我们通过@TableField(exist = false)来去掉这个字段,不让他作为查询字段。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableField(exist = false)
    private Integer online;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI语音合成 VITS Fast Fine-tuning,半小时合成专属模型,部署训练使用讲解

前言 项目名:VITS-fast-fine-tuning (VITS 快速微调) 项目地址:https://github.com/Plachtaa/VITS-fast-fine-tuning 支持语言:中、日、英 官方简介: 这个代码库会指导你如何将自定义角色(甚至…

低温试验中的液氮注入式宽温区超高精度温度控制解决方案

摘要:当前各种测试仪器中的低温温度控制过程中,普遍采用电增压液氮泵进行制冷和辅助电加热形式的控温方式。由于液氮温度和传输压力的不稳定,这种方式的控温精度仅能达到0.5K,很难实现小于0.1K的高精度控温。为此本文基于饱和蒸气…

知识梳理(一)

HTTPS握手过程 https的核心的技术:使用非对称加密传输对称加密的密钥,然后用对称加密通信 TLS http--超文本传输协议,是以前并且沿用至今的网页协议。 缺点:http属于明文传输 HTTP的明文传输带来的问题是无法防止中间人截获、…

VScode远程不用再输入密码操作

安装插件remote development 1.先检查自己电脑上有没有生成一对公钥和私钥。(一般会在这个目录) 如果没有的话就自己生成一下。 打开命令行输入以下命令 ssh-keygen -t rsa2.在虚拟机中先看一下有没有公钥和私钥。如果没有的话就自己生成一下。 打开…

pytorch2.x 官方quickstart测试

文章目录 1.本地环境2.[安装pytorch](https://pytorch.org/get-started/locally/) (Windows GPU版本)3. [官方quickstart](https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html) 1.本地环境 D:\python2023>nvidia-smi Thu Jul 27 23:27:45…

idea项目依赖全部找不到

目录 1,出错现象2,解决3,其他尝试 1,出错现象 很久没打开的Java项目,打开之后大部分依赖都找不到,出现了所有的含有import语句的文件都会报错和一些注解报红报错,但pom文件中改依赖是确实被引入…

VS2015配置opencv4.1(x86和x64)

1.安装VS2015 vs版本和部门统一,安装C模块即可 2.安装opencv4.1 重点还是配置,安装opencv4.1,装就完事了 3.配置opencv4.1 给整麻了,配了一早上 3.1 在电脑属性中找到“高级系统配置” 3.2 环境变量 3.3 写上x86 和 x64的环…

草稿#systemverilog# 说说Systemverilog中《static》那些事儿(拓展篇)

3)static和automatic可以将一个任务task或者函数function显式地声明成静态或者自动的:一个自动automatic 声明的任务、函数或块内声明的数据缺省情况下具有调用期或激活期内的生命周期,并且具有本地的作用范围; 一个静态static 声…

Java虚拟机——线程与协程

1 Java与线程 目前线程是Java里面进行处理器资源调度的最基本单位。如果日后Loom项目能够为Java引入纤程(Fiber)的话,可能会改变这一点。 1.1 线程的实现 这里先把Java技术的背景放下,以一个通用的应用程序的角度来看线程是如何实现的。 1.1.1 内核线…

C数据结构与算法——顺序查找和二分查找算法 应用

实验任务 (1) 掌握顺序查找算法的实现; (2) 掌握二分查找算法的实现; (3) 掌握两种查找算法的时间复杂度与适用场合。 实验内容 (1) 基于顺序查找表实现顺序查找和二分查找算法; (2) 使用两个不同大小的查找表进行两次理论和实际性能对比&…

利用STM32为主控以LORA为通讯模块,通过中继器链接MQTT服务器的物联网信息采集处理的信息系统方案

项目的详细方案如下: 硬件组成: STM32主控板:作为项目的主控单元,负责采集终端点位的温湿度信息,并通过LORA通讯模块发送数据到中继器。 LORA通讯模块:作为STM32与中继器之间的无线通信模块,负…

【NLP】语音识别 — GMM, HMM

一、说明 在语音识别的深度学习(DL)时代之前,HMM和GMM是语音识别的两项必学技术。现在,有将HMM与深度学习相结合的混合系统,并且有些系统是免费的HMM。我们现在有更多的设计选择。然而,对于许多生成模型来说…

浅谈集成式电力电容器无功补偿装置的技术特点及应用状况

安科瑞 华楠 摘要:阐述了集成式电力电容器无功补偿装置的组成与应用状况.在与常规电力电容器对比的基础上,分析了集成式电力电容器无功补偿装置的技术特点。通过对集成式无功补偿装置原理结构的分析,探讨了对集成式无功补偿装置的…

Spring Batch教程(四)tasklet使用示例:spring batch的定时任务使用

Spring batch 系列文章 Spring Batch教程(一) 简单的介绍以及通过springbatch将xml文件转成txt文件 Spring Batch教程(二)示例:将txt文件转成xml文件以及读取xml文件内容存储到数据库mysql Spring Batch教程&#xff…

TPU-MLIR编译部署算法

注意: 由于SOPHGO SE5微服务器的CPU是基于ARM架构,以下步骤将在基于x86架构CPU的开发环境中完成 初始化开发环境(基于x86架构CPU的开发环境中完成)模型转换 (基于x86架构CPU的开发环境中完成) 处理后的PP-OCR项目文件将被拷贝至 SE5微服务器 上进行推理…

el-table-column 合并列,切换表格显示,数据错乱问题

由于同一个页面需要通过lable进行切换显示不同的表格结果在切换的时候发现表格列错乱了 正常是这样的 切换错乱的是这样的 序号没有了,已接单协同总数列也不见了 切换回来发现第一个表格 原先的两列被后面的挤压了 代码也没啥毛病,最主要的原因是因为同…

【从零开始学习JAVA | 第三十二篇】 异常(下)新手必学!

目录 前言: Exceptions(异常): 异常的两大作用: 异常的处理方式: 1.JVM默认处理 2.自己捕获异常 3.抛出处理 自定义异常: 异常的优点: 总结: 前言: 前…

LUMEN技术要点总结

LUMEN总结 主题是动态全局光照和Lumen Lumen更像是一个各种GI算法的集大成者。 1. 如何理解lumen及全局光照的实现机制 渲染方程 至今为止所有的实时光照都是按照Render Equation来进行渲染的,我们做得到只是在无限的逼近它。 我们把只进行一次反弹叫做SingleBou…

uni-app 经验分享,从入门到离职(一)——初始 uni-app,快速上手(文末送书福利1.0)

文章目录 📋前言🎯什么是 uni-app🎯创建第一个 uni-app 项目🧩前期工作🧩创建项目(熟悉默认项目、结构)🧩运行项目 📝最后🎯文末送书🔥参与方式 &…

客户方数据库服务器CPU负载高优化案例

客户方数据库服务器CPU负载高优化案例 背景 上周线上服务出现一个问题,打开某个页面,会导致其它接口请求响应超时,排查后发现数据库响应超400s,之前1s就可查到数据。 具体原因是有个大屏统计页面,会实时查看各业务服…