温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Mybatis时无法将查询结果存进实体类如何解决

发布时间:2020-12-01 15:26:08 来源:亿速云 阅读:374 作者:Leah 栏目:开发技术

这篇文章给大家介绍使用Mybatis时无法将查询结果存进实体类如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

问题描述

使用Mybatis查询得到实体类

表定义如下

成员ID成员姓名
member_idmember_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时无法将查询结果存进实体类如何解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI