解决mybatis映射结果集失效的问题

在开发中可能会遇到这样的问题,使用mybatis进行结果集与实体类之间的关系映射时,可能会出现某些属性映射不上去的情况.

为了方便排查问题我们需要查看mybatis访问数据库SQL信息。

可以在配置Log4J:

log4j.logger.com.xxx.dao=TRACE
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG
log4j.logger.java.sql=debug
log4j.logger.java.sql.Connection = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout

注意:log4j.logger.com.xxx.dao=TRACE,一定要加上,加上这句话就可以打印出你访问数据库返回的结果集,可以更加方便的找到问题的所在。这句话的中的com.xxx.dao代表的是mapperw文件的namespace。

解决方案一:

查看映射结果集的配置文件:

如果像上述的配置文件会出现问题,因为在property后面的字符串出现了空格,在这种情况下,mybatis是无法映射的,它会认为id空格 != id。于是返回默认的对应的规则,当实体类中的属性与表中的字段完全相同则可以默认对应,当出现_时无法对应,这时,就会产生有的字段可以映射有的字段不可以映射的情况。所以我们必须检查是否出现空格。

修改配置文件如下:

解决方案二:

直接为结果集取别名,将返回的结果集全部取别名,跟实体类的属性保持一致,这样就能完整的映射。

补充知识:关于mybatis mapper.xml中 sql使用 in 执行失败的原因

mapper.xml传参如果下

user_obj_id in ( #{ids})

最终执行的sql拼接如下

user_obj_id in ( ‘55,56,57' )

而不是期望的

user_obj_id in ( ‘55',‘56',‘58' )

以上这篇解决mybatis映射结果集失效的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis中的JdbcType映射使用详解

    Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate.Mybatis等这些持久化支持. 项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文件定义SQL语句,当然JDBC也可以将SQL配置化,需要定制开发,MyBatis则直接支持这种方法. 官方对于MyBatis的介绍, MyBatis is a first class persistence framework with support for custom SQL, stored

  • 解决mybatis 数据库date 与 java中Date类型映射问题

    使用mybatis 从数据库中查询出date 类型字段,在java 类型中只看到了日期,没有看到时分秒, 从数据库中是可以看到时分秒的.后来发现是mybatis 映射数据类型的原因: 如: <result column="CREATEDATE" property="createdate" jdbcType="Date" /> 映射出来的时间格式时分秒都为0 (2017-01=12 00:00:00) <result column

  • 解决Mybatis在IDEA中找不到mapper映射文件的问题

    刚开始在IDEA中做用Mybatis查数据库中的数据时,报mapper映射文件找不到,害的我检查了好几次配置的路径是不是正确,但是看了好几遍都没有发现有拼写错误.(我记得以前在eclipse中这样写是没问题的) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" &qu

  • Mybatis结果集自动映射的实例代码

    在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集自动映射.Mybatis的自动映射默认是开启的,有需要我们也可以将其关闭(还可以调整自动映射的策略). 1       Mybatis结果集自动映射 在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集

  • mybatis某些字段无法映射成功的解决

    随笔记录下: 刚刚遇到一个mybatis中reultMap定义正确column与property也都正确,字段的getset方法也都有,但是返回对象时,有些字段可以对应上有一些则不可以. 找了好久才发现在sql语句中的 resultMap 写成了 resultType... 很low但是痛.改成resultMap一切正常! 补充知识:MyBatis学习总结--解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况

  • Mybatis 自动映射(使用需谨慎)

    什么是自动映射? 介绍自动映射之前先看一下手动映射,如下: <resultMap id="orderModelMap1" type="com.javacode2018.chat05.demo7.model.OrderModel"> <id column="id" property="id"/> <result column="userId" property="use

  • mybatis plus怎么忽略映射字段

    其实mybatis plus是比mybatis优秀的mybatis有的,他全有,它没的,或者不优秀的地方,mybatis plus全优秀,所以晚的总比早的好. 今天要说的是: 忽略字段问题,我被这个坑了好长时间,我开发项目呐有个需求是忽略数据库中字段,但是实体类还要有,我操,我目前的知识告诉我,@Transient这个是很好的选择,我操,我于是,开始搞,忘了说了,我的数据库中间件是mybatis plus,搞的我烦,先是看网上的,发现无论在字段上加还是在get方法上加,都不行,最后我配置文件又试

  • 解决mybatis映射结果集失效的问题

    在开发中可能会遇到这样的问题,使用mybatis进行结果集与实体类之间的关系映射时,可能会出现某些属性映射不上去的情况. 为了方便排查问题我们需要查看mybatis访问数据库SQL信息. 可以在配置Log4J: log4j.logger.com.xxx.dao=TRACE log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner = D

  • 解决Mybatis映射文件mapper.xml中的注释问题

    目录 Mybatis映射文件mapper.xml的注释问题 报错信息 解决办法 mapper.xml文件中的注释 注释方式 ‘无效的列索引’bug和解决 小结一下 Mybatis映射文件mapper.xml的注释问题 从昨天夜晚9点到今天中午,一直被项目bug所困惑,中间这段时间一直未解决这个问题,也咨询很多群里大佬,也未能解决 有的说是我代码写的有问题,如mapper文件中没有写入参数类型parameterType,也有说是我项目结构目录构建出错,按照他们的建议进行修正,也是未尽人意,启动项目

  • 解决mybatis分页插件PageHelper导致自定义拦截器失效

    目录 问题背景 mybatis拦截器使用 使用方法: 注解参数介绍: setProperties方法 bug内容: 自定义拦截器部分代码 PageInterceptor源码: 解决方法: 解决方案一 调整执行顺序 解决方案二 修改拦截器注解定义 问题背景 在最近的项目开发中遇到一个需求 需要对mysql做一些慢查询.大结果集等异常指标进行收集监控,从运维角度并没有对mysql进行统一的指标搜集,所以需要通过代码层面对指标进行收集,我采用的方法是通过mybatis的Interceptor拦截器进行

  • 解决spring结合mybatis时一级缓存失效的问题

    之前了解到mybatis的一级缓存是默认开启的,作用域是sqlSession,是基 HashMap的本地缓存.不同的SqlSession之间的缓存数据区域互不影响. 当进行select.update.delete操作后并且commit事物到数据库之后,sqlSession中的Cache自动被清空 <setting name="localCacheScope" value="SESSION"/> 结论 spring结合mybatis后,一级缓存作用: 在未

  • 解决Mybatis的@Param()注解导致分页失效的问题

    @Param注解导致分页失效-分页拦截器 问题描述 在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据. 出现问题时,分页策略为:分页拦截器实现的分页 [错误写法] service写法: public Page<Entity> getByNidAndEntity(Page<Entity> page,String nid,Entity entity){ entity.setPage(page); page.setList(dao.getB

  • mybatis映射和实际类型不一致的问题

    目录 mybatis映射和实际类型不一致 原因分析 小结一下 解决方法 mybatis映射器Mapper(结果映射以及解决列名不一致) 结果映射:(resultMap, resultType) 1. resultType配置结果类型 2. resultMap结果类型 3. 小结一下 mybatis映射和实际类型不一致 项目今天出现个问题,在dao中定义了一个查询,方法的返回值是map并定义了泛型都是String类型,可是方法返回值中还是存在其他的类型. //DAO接口查询 返回类型Map<Str

  • Mybatis映射文件实例详解

     一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id

  • Mybatis 缓存原理及失效情况解析

    这篇文章主要介绍了Mybatis 缓存原理及失效情况解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.什么是缓存[Cache] 存在内存中的临时数据. 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 2.为什么要使用缓存 减少和数据库的交互次数,减少系统开销,提高系统效率. 3.什么样的数据需要使用缓存 经常查询且不易改变的数据

随机推荐