Mybatis有查询结果但存不进实体类的解决方案

 更新时间:2020年11月30日 17:18:30   作者:ming-world  
这篇文章主要介绍了Mybatis有查询结果但存不进实体类的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题描述

使用Mybatis查询得到实体类

表定义如下

成员ID 成员姓名
member_id member_name

对应的实体类如下

public class Member {
  private Integer memberId;
  private String memberName;
  // 省略getter和setter
}

对应的Mapper.xml如下

<select id="selectMemberByMemberName" resultType="Member">
  SELECT *
  FROM member
  WHERE member_name = #{memberName}
</select>

通过以下代码得到的member居然是null,这是为什么呢?

Member member = memberMapper.selectMemberByMemberName(memberName);

在日志我启用了DEBUG模式,发现查询结果集是有返回数据的,但是写不进去Member实体类中,最后发现是因为数据库与Java命名的规范是不一样的,需要转换,Mybatis也提供了相对应的驼峰命名转换法。

例如member_id对应memberId,但是默认是不启用的,所以需要手动启动。

解决方法

如果使用Mybatis配置文件,则可以按如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
  <settings>
    <!-- 开启驼峰命名转换 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
</configuration>

如果是springboot集成的,则可以做如下配置

mybatis:
 configuration:
  mapUnderscoreToCamelCase: true # 开启驼峰命名转换法

按照以上配置后重新访问则可以获得一个查询后的实体类。

补充知识:mybatis查询参数中既有 实体类参数又有基本类型参数 解决方案

这个方法真实有效,直接上代码

DAO中的查询方法

public LogisticNodes findFirstNode(

@Param("ln")LogisticNodes ln,@Param("stringId")String stringId);

第一个参数为实体类,需要加上@param()注解

xml中的写法

SELECT
      <include refid="logisticNodesColumns"/>
    FROM
      order_logistic_nodes a
    <where>           
        <if test="ln.id != null and ln.id !=''">
           AND a.id = #{ln.id,jdbcType=VARCHAR}
        </if>
        <if test="ln.nodeName != null and ln.nodeName !=''">
           AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR}
        </if>
        <if test="ln.nodeSort != null">
           AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL}
        </if>
    </where>
    and
      a.logistic_type IN (
        SELECT
          s.logistic_type
        FROM
          order_logistic_nodes s
      <where>           
        <if test="stringId != null and stringId !=''">
           s.id = #{stringId,jdbcType=VARCHAR}
        </if>
      </where>
    )
    order by a.node_sort
    limit 1

xml中,取实体类的属性前面要加上类的引用

以上这篇Mybatis有查询结果但存不进实体类的解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot3整合Druid监控功能的项目实践

    SpringBoot3整合Druid监控功能的项目实践

    Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选,本文主要介绍了SpringBoot3整合Druid监控功能的项目实践,感兴趣的可以了解一下
    2024-01-01
  • Java的JNI快速入门教程(推荐)

    Java的JNI快速入门教程(推荐)

    下面小编就为大家带来一篇Java的JNI快速入门教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 使用eclipse 实现将springboot项目打成jar包

    使用eclipse 实现将springboot项目打成jar包

    这篇文章主要介绍了使用eclipse 实现将springboot项目打成jar包的流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot2 集成log4j2日志框架的实现

    SpringBoot2 集成log4j2日志框架的实现

    这篇文章主要介绍了SpringBoot2 集成log4j2日志框架的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 详解lambda表达式foreach性能分析

    详解lambda表达式foreach性能分析

    这篇文章主要介绍了详解lambda表达式foreach性能分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java 数据库连接池详解及简单实例

    Java 数据库连接池详解及简单实例

    这篇文章主要介绍了Java 数据库连接池详解及简单实例的相关资料,需要的朋友可以参考下
    2016-12-12
  • springboot整合springsecurity与mybatis-plus的简单实现

    springboot整合springsecurity与mybatis-plus的简单实现

    Spring Security基于Spring开发,项目中如果使用Spring作为基础,配合Spring Security做权限更加方便,而Shiro需要和Spring进行整合开发。因此作为spring全家桶中的Spring Security在java领域很常用
    2021-10-10
  • Java Timer与TimerTask类使程序计时执行

    Java Timer与TimerTask类使程序计时执行

    这篇文章主要介绍了Java定时器中的Timer和TimerTask的原理。Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。接下来就跟随小编一起深入了解Timer和TimerTask吧
    2022-02-02
  • JSP安全开发之XSS漏洞详解

    JSP安全开发之XSS漏洞详解

    XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
    2016-09-09
  • Java中文件操作功能小结

    Java中文件操作功能小结

    这篇文章主要为大家整理了一些Java中文件操作功能的相关资料,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-05-05

最新评论