欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-03-31 09:13:50|栏目:JAVA代码|点击:

问题描述

使用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中,取实体类的属性前面要加上类的引用

上一篇:Spring Boot调用 Shell 脚本实现看门狗功能

栏    目:JAVA代码

下一篇:java实现的RC4加密解密算法示例

本文标题:Mybatis有查询结果但存不进实体类的解决方案

本文地址:http://www.codeinn.net/misctech/91732.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有