首页 > 编程语言 >Java开发学习(四十五)----MyBatisPlus查询语句之映射匹配兼容性

Java开发学习(四十五)----MyBatisPlus查询语句之映射匹配兼容性

时间:2022-11-29 21:47:12浏览次数:38  
标签:MyBatisPlus 数据库 默认 查询 ---- 注解 Java 模型 属性

1、映射匹配兼容性

我们已经能从表中查询出数据,并将数据封装到模型类中,这整个过程涉及到一张表和一个模型类:

之所以数据能够成功的从表中获取并封装到模型对象中,原因是表的字段列名和模型类的属性名一样。那么问题就来了:

问题1:表字段与编码属性设计不同步

当表的列名和模型类的属性名发生不一致,就会导致数据封装不到模型对象,这个时候就需要其中一方做出修改,那如果前提是两边都不能改又该如何解决?

MyBatisPlus给我们提供了一个注解@TableField,使用该注解可以实现模型类属性名和表的列名之间的映射关系

问题2:编码中添加了数据库中未定义的属性

当模型类中多了一个数据库表不存在的字段,就会导致生成的sql语句中在select的时候查询了数据库不存在的字段,程序运行就会报错,错误信息为:

Unknown column '多出来的字段名称' in 'field list'

具体的解决方案用到的还是@TableField注解,它有一个属性叫exist,设置该字段是否在数据库表中存在,如果设置为false则不存在,生成sql语句查询的时候,就不会再查询该字段了。

问题3:采用默认查询开放了更多的字段查看权限

查询表中所有的列的数据,就可能把一些敏感数据查询到返回给前端,这个时候我们就需要限制哪些字段默认不要进行查询。解决方案是@TableField注解的一个属性叫select,该属性设置默认是否需要查询该字段的值,true(默认值)表示默认查询该字段,false表示默认不查询该字段。

知识点1:@TableField

名称 @TableField
类型 属性注解
位置 模型类属性定义上方
作用 设置当前属性对应的数据库表中的字段关系
相关属性 value(默认):设置数据库表字段名称 exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用 select:设置属性是否参与查询,此属性与select()映射配置不冲突

问题4:表名与编码开发设计不同步

该问题主要是表的名称和模型类的名称不一致,导致查询失败,这个时候通常会报如下错误信息:

Table 'databaseName.tableName' doesn't exist,翻译过来就是数据库中的表不存在。

解决方案是使用MyBatisPlus提供的另外一个注解@TableName来设置表与模型类之间的对应关系。

知识点2:@TableName

名称 @TableName
类型 类注解
位置 模型类定义上方
作用 设置当前类对应于数据库表关系
相关属性 value(默认):设置数据库表名称

 

 

标签:MyBatisPlus,数据库,默认,查询,----,注解,Java,模型,属性
From: https://www.cnblogs.com/xiaoyh/p/16468199.html

相关文章

  • SQL注入问题 触发器 视图 事物 函数 流程 存储过程 索引
    python中SQL注入问题在python用pymysql基于数据库来操作用户登录的时候会遇到一些问题。问题1:只填写对用户名就可以登录成功问题2:填写不对的用户名和密码也能登陆成......
  • DASCTF NOV X联合出题人-PWN
    太忙了,下午4点才开始做,,剩下的以后补上签个到逻辑很简单两个功能的堆,一个就是申请heap、还有一个是检验如果校验通过就会得到flag申请模块​中间0x886是个很恶心的东西......
  • 图解实例讲解JavaScript算法,让你彻底搞懂
    你好程序员,我们大多数人都害怕算法,并且从未开始学习它。但我们不应该害怕它。算法只是解决问题的步骤。今天让我们以简单和说明性的方式介绍主要算法。不要试图记住它们......
  • SAM学习笔记
    开个坑,花点时间学学SAM。一些概念1.SAM是个自动机,而且是个DAG。SAM有一个初始节点\(u\),从\(u\)出发的任意一条路径都对应原串\(S\)的一个子串,且原串\(S\)的......
  • 第五次实验
    pet.hpp#pragmaonce#include<iostream>usingnamespacestd;classMachinePets{public: MachinePets(conststrings):name(s){} virtualstringtalk()=0; str......
  • 大数据学习之kafka
    kafka是一个分布式的基于发布/订阅模式的消息队列,只要应用于大数据实时处理领域消息队列的两种模式:点对点模式(一对一消费者主动拉取数据,消息收到后消息清除)......
  • linux串口tty driver
    linux串口ttydriveruserspace调用read()读取标准输入kernelflowtty_readtty_read()if(ld->ops->read)i=ld->ops->read(tty,file,buf,count);......
  • Gitee代码管理器的简便使用
    第一步:在Gitee上新建个仓库第二步:复制http路径第三步:在我的电脑上找到想要把文件上传仓库的路径第四步:在文件路径上输入cmd命令第五步:gitclonehttp地址    ......
  • SQL注入问题、视图、触发器、事务、隔离级别、MVCC多版本控制、存储过程、函数、流程
    目录SQL注入问题视图触发器创建触发器语法触发器的命名触发器实际应用事务如何使用事务隔离级别MVCC多版本控制存储过程函数流程控制索引相关概念索引数据结构慢查询优化S......
  • Lua学习笔记
    1.注释--单行注释 多行注释--[[--]] 2.变量命名最好不要使用下划线加大写字母作为标示符,因为lua内部的保留字也是这样命名的。Lua不允许使用特殊字符如@,$,和%来定......