首页 > 其他分享 >Mybatis中查询出来的部分数据为空,能查出行部分字段为空

Mybatis中查询出来的部分数据为空,能查出行部分字段为空

时间:2023-06-29 15:45:50浏览次数:38  
标签:映射 column 列名 Results 字段 Result 为空 Mybatis 注解

同样的sql语句,在数据库中能查出完整的行数据
在mybatis中返回数据中能查出行,但是部分有值的字段为空。
首先检查缓存,没问题的话大概率是因为mybatis自动映射的关系:
1.列名不匹配:自动映射会根据数据库中的列名和对象属性名进行映射,如果列名和属性名不匹配,就会导致数据为空。确保数据库列名与对象属性名一致,或者通过 @Results 注解或 @ResultMap 注解显式指定列名与属性的对应关系。

2.主键映射错误:如果对象有主键字段,自动映射会尝试根据名称匹配进行映射,但有时名称不匹配会导致主键数据为空。在这种情况下,可以使用 @Id 注解明确指定主键字段,并使用 @GeneratedValue 注解来生成主键值。

3.枚举类型映射错误:如果数据库中的列是枚举类型,而自动映射未能正确映射枚举值,会导致数据为空。在这种情况下,可以使用 @TypeHandler 注解为枚举类型指定一个自定义类型处理器。

4.类型转换错误:数据库中的列类型与 Java 对象属性的类型不匹配,自动映射会尝试进行类型转换。如果类型转换失败,会导致数据为空。可以通过自定义类型处理器来处理数据库列与属性之间的类型转换,以确保正确映射。

首先查看你的命名是否规范,当然,可能因为业务或者权限关系你不能修改。
我们可以通过手写resultMap来解决:
注意红框,默认的是resultType需要改为resultMap,type就是实体类。
column是查出来的字段名,property实体类名。

另外还可以通过注解来映射:
@Results 注解:

在查询方法上使用 @Results 注解,指定多个 @Result 注解来定义列名与属性的对应关系。示例代码如下:
java
复制代码
@Results({
@Result(column = "column_name1", property = "propertyName1"),
@Result(column = "column_name2", property = "propertyName2")
})
@Select("SELECT column_name1, column_name2 FROM your_table")
YourObject selectData();
注意,@Results 注解需要和 @ResultMap 注解或 @ResultType 注解一起使用,如果只使用 @Results 注解是不会产生效果的。

@ResultMap 注解:

首先,定义一个 resultMap,其中通过 @Result 注解指定列名与属性的对应关系。示例代码如下:

1.@Results 注解:
在查询方法上使用 @Results 注解,指定多个 @Result 注解来定义列名与属性的对应关系。示例代码如下:
java
复制代码
@Results({
@Result(column = "column_name1", property = "propertyName1"),
@Result(column = "column_name2", property = "propertyName2")
})
@Select("SELECT column_name1, column_name2 FROM your_table")
YourObject selectData();
注意,@Results 注解需要和 @ResultMap 注解或 @ResultType 注解一起使用,如果只使用 @Results 注解是不会产生效果的。

2.@ResultMap 注解:
首先,定义一个 resultMap,其中通过 @Result 注解指定列名与属性的对应关系。示例代码如下:

@Results(id = "yourObjectMap", value = {
@Result(column = "column_name1", property = "propertyName1"),
@Result(column = "column_name2", property = "propertyName2")
})
YourObject resultMap();
然后,在查询方法上使用 @ResultMap 注解,引用之前定义的 resultMap。示例代码如下:

@ResultMap("yourObjectMap")
@Select("SELECT column_name1, column_name2 FROM your_table")
YourObject selectData();

标签:映射,column,列名,Results,字段,Result,为空,Mybatis,注解
From: https://www.cnblogs.com/tenghao/p/17514367.html

相关文章

  • mybatis 动态数据源核心--AbstractRoutingDataSource
    1publicabstractclassAbstractRoutingDataSourceextendsAbstractDataSourceimplementsInitializingBean{2@Nullable3privateMap<Object,Object>targetDataSources;4@Nullable5privateObjectdefaultTargetDataSource;......
  • springboot mybatis mapper 注入原理浅析
    spring+mybatis是我们常用的开发组合,一般情况,我们只需要写一个Mapper接口 加上@Mapper注解就可以使用了,那么他的工作原理是什么呢?标准mybatis调用应该是这样的流程1//读取配置2InputStreamconfig=Resources.getResourceAsStream("mybatis-config.xml");3//根......
  • day 113- mybatis的查询resultMap
    mybatis中的resultMapresultMap用来处理字段名和属性名不一致的情况,处理映射关系若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射<!--字段名和属性名不一致的情况,处理映射关系:1.为查询的字段设置别名,和属性名保持一致2.当字段符合MySQL......
  • mybatisplus跨库操作和@Transactional一起使用的问题
    1、当方法使用了@Transactional注解,mybatisplus切换库之前已经有对当前库进行操作的话,切库将不成功;2、当方法使用了@Transactional注解,mybatisplus切换库之前没有对当前库进行操作的话,切库成功,但是@Transactional注解好像没有生效,操作报异常之后上一个操作没有回退;......
  • mybatis generator生成乱码问题
    mybatisgenerator生成的文件可能会乱码,通过在Eclipse_Home/eclipse.ini文件中,指定-Dfile.encoding=UTF-8,参考截图openFile-vmargs-Dosgi.requiredJavaVersion=1.5-Xms40m-Xmx512m-Dfile.encoding=UTF-8-D,是java命令的一个选项,-D后面需要跟一个键值对......
  • Spring Boot 之 Mybatis Plus 分页插件
    创建分页插件所在的类MybatisPlusConfiguration,并添加注解@Configuration在配置类中添加以下代码@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){/***MybatisPlusInterceptor是插件主体,管理所有的插件*/MybatisPlusInterceptorinter......
  • 数据库 - 不同数据库将表、字段、描述保存到Excel
    不同数据库将表、字段、描述保存到Excel查询语句SqlServerSELECT表名=CASEWHENA.COLORDER=1THEND.NAMEELSE''END,表备注=CASEWHENA.COLORDER=1THENISNULL(F.VALUE,'')ELSE''END,列序号=A.COLORDER,列名称=A.NAME,标识=CASEWHENCOLUMNPROPERT......
  • 对文件流MD5后,该文件流上传到阿里云后文件为空
    目录背景存在问题的代码出现的问题:解决方案背景对于前端上传的文件,后端对文件进行MD5以获取文件的唯一标识(极极小可能冲撞),然后查询文件表是否上传过,如果存在则不用再上传oss,从而节省存储空间存在问题的代码@SneakyThrowspublicStringuploadFile(MultipartFi......
  • java中 如何判断字符串为空
    在Java中,可以使用以下方法来判断字符串是否为空:使用length()方法判断长度是否为0:Stringstr="hello";if(str.length()==0){System.out.println("字符串为空");}使用isEmpty()方法判断是否为空字符串:Stringstr="hello";if(str.isEmpty()){System.out.printl......
  • java中 如何判断字符串为空
    在Java中,可以使用以下方法来判断字符串是否为空:使用length()方法判断长度是否为0:Stringstr="hello";if(str.length()==0){System.out.println("字符串为空");}使用isEmpty()方法判断是否为空字符串:Stringstr="hello";if(str.isEmpty()){System.out.printl......