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

网友投稿 548 2023-03-06

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

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

问题描述

使用Mybatis查询得到实体类

表定义如下

成员ID

成员姓名

http://

member_id

member_name

对应的实体类如下

public class Member {

private Integer memberId;

private String memberName;

// 省略getter和setter

}

对应的Mapper.xml如下

SELECT *

FROM member

WHERE member_name = #{memberName}

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

Member member = memberMapper.selectMemberByMemberName(memberName);

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

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

解决方法

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

"http://mybatis.org/dtd/mybatis-3-config.dtd">

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

mybatis:

configuration:

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

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

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

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

DAO中的查询方法

public LogisticNodes findFirstNode(

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

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

xml中的写法

SELECT

FROM

order_logistic_nodes a

AND a.id = #{ln.id,jdbcType=VARCHAR}

AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR}

AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL}

and

a.logistic_type IN (

SELECT

s.logistic_type

FROM

order_logistic_nodes s

s.id = #{stringId,jdbcType=VARCHAR}

)

order by a.node_sort

limit 1

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

FROM

order_logistic_nodes a

AND a.id = #{ln.id,jdbcType=VARCHAR}

AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR}

AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL}

and

a.logistic_type IN (

SELECT

s.logistic_type

FROM

order_logistic_nodes s

s.id = #{stringId,jdbcType=VARCHAR}

)

order by a.node_sort

limit 1

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis多层嵌套resultMap及返回自定义参数详解
下一篇:养鸡小程序安装插件(app养鸡)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~