Mybatis查询Oracle数据库结果为null,但数据库中存在该条记录 5C

最近学习mybatis时遇到问题,相关配置应该是正确的,用mysql查询也能返回结果,但是将数据源切换到Oracle时总是返回null,求教。mybatis查询日志如下:

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Created connection 174573182.
Returned connection 174573182 to pool.
Opening JDBC Connection
Checked out connection 174573182 from pool.
Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@a67c67e]
==>  Preparing: SELECT ID id, LAST_NAME lastName, GENDER gender, EMAIL email FROM mybatis_employee WHERE ID = ? 
==> Parameters: 1(Integer)
<==      Total: 0
null
Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@a67c67e]
Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@a67c67e]
Returned connection 174573182 to pool.

但是,将mybatis发送的SQL复制到数据中直接查询也能查询到该记录。mybatis能返回null,可以说明Oracle数据库连接应该是没问题的,应该是结果的包装出了问题,相关代码描述如下文,求赐教。
Oracle中mybatis_employee表定义如下:

ID        INTEGER                                 
LAST\_NAME VARCHAR2(255) Y                         
GENDER    INTEGER       Y                         
EMAIL     VARCHAR2(255) Y 

mybatis对应的查询配置如下:

   <select id="getEmployeeById" resultType="cn.seu.edu.Mybatis.bean.Employee" databaseId="oracle">
        SELECT ID id, LAST_NAME lastName, GENDER gender, EMAIL email FROM  mybatis_employee WHERE ID = #{id}
    </select>

测试代码如下:

 public void testEmployeeMapper() throws IOException{
        // 创建SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream("conf/mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 创建session
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Assert.assertNotNull(sqlSession);
        try {
            // 获取接口的实现类对象
            // Mybatis会为接口实现一个代理对象,由代理对象执行sql
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            // 调用接口的方法
            Employee employee = employeeMapper.getEmployeeById(1);
            System.out.println(employee);
        } finally {
            sqlSession.close();
        }
    }

Employee类定义如下

    private Integer id;
    private String lastName;
    private Integer gender;
    private String email;

        以下省略setter和getter
0

9个回答

谢谢各位的帮助,已经找到原因了,感谢 @weixin_38640986 给的灵感。具体原因分析如下:
1、通过“show variables like 'autocommit'”可以看出,MySQL中数据默认是自动提交的,即执行insert语句后会自动commit
2、由于Oracle实现的事务最低级别为read_committed,Oracle不会自动提交更改,默认需要显式commit
本次出现的bug,就是由于在Oracle中执行了insert后没有显式commit,因而mybatis无法查询到相关记录;至于在PL/SQL Developer中可以查看这条
未提交的数据,猜测应该是还在一个事务范围内;
Bug解决方法
1、 显式commit之后,再次执行即可返回结果

2

你的Mapper中的语句只有返回类型,应该需要加一个参数类型。parameterType属性

0
sagwsagw
WYCPhoenix 同样的语句,在mysql中可以运行,到了Oracle却不可以了
一年多之前 回复
sagwsagw
WYCPhoenix 这点我也尝试过,增加了 parameterType="java.lang.Integer",结果还是为null,所以感觉很奇怪
一年多之前 回复

将#换成$ ,#会自动加上""

0
sagwsagw
WYCPhoenix 尝试了一下,会抛出异常There is no getter for property named 'id' in 'class java.lang.Integer';还有,mybatis使用用户输入的值使用的应该就是#{xx}吧,这一点和SpEL是一致的
一年多之前 回复

是不是没有commit

0
sagwsagw
WYCPhoenix 这是select查询语句,不需要commit
一年多之前 回复

jdbc配置的驱动类不对了吧。
mysql : jdbc.driver=com.mysql.jdbc.Driver
oracle: jdbc.driver=oracle.jdbc.driver.OracleDriver

0
sagwsagw
WYCPhoenix 驱动应该是对的,可以正常连接,而且mybatis也没有报错
一年多之前 回复

值有问题不,看是否有默认时间,就是没有给值的,

0
sagwsagw
WYCPhoenix 谢谢,已经知道原因了
一年多之前 回复

关了重启 啊哈哈哈....

0

很明显你的sql语句,动态的有问题呗

0

萌新想请问大佬,这个显式commit怎么写?是在sql/developer中还是在mybatis的mapper.xml中写?正好也遇到了这个问题,想请教一下。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用Mybatis查询数据库oracle一直找不到数据,但数据库存在数据
查oracle中有数据,但是Mybatis或hibernate查询却总是得不到,试着在数据库打一下commit。说不定能解决问题
hibernate查询oracle数据库记录,一个字段为NULL整条记录就NULL的解决办法
1 问题描述 数据库表如下,选出来的这行有几个属性值为NULL,其中第4列 的QI oracle类型为number 实体类部分如下,其中 qi对应数据库表中的QI列,类型为double 使用sql语句在navicat中能正确查出数据,可是在hibernate中,查出的是空 2 解决办法 将实体类中的 类型为double 都改为 它的包装类Double就可以了。 3 问题原因 这个我目前也不清...
(超详细)在使用mybatis时遇到查询结果返回为空(NULL)的情况,但是查数据库能查到
这个问题困扰了我一个下午,看了很多博客都没有我中情况,所有写给和我有一样错误的 由于我的实体类里声明了其它实体类,所以在mapper.xml文件里要使用resultMap,在resultMap里要使用association引入,否则会报错   下面贴出我的实体类: public class Subject { private Integer subid; private ...
在使用mybatis时遇到查询结果返回为空(NULL)的情况,但是查数据库能查到
初用mybatis,明明觉得语句没写错,也没有语法错误,就是没有结果,调试了一个小时,没整明白,上网查询发现别人也遇到过这种情况。记录如下: 转载地址:http://blog.csdn.net/u014459937/article/details/47017571错误的结果为:程序里面写的sql语句放在数据库里面去查询能查询到数据,但是程序里面查询时候,返回的结果为null记录一下 我出现的原因是
Mybatis查询结果List集合数量正确,但全为null,可能是与数据库中名称不对应,尽量全用小写
花了很久的时间去看到底哪里错了,测试出现问题,一开始以为是配置出错,就看呀看呀。。。。发现数据库和项目dao还是全用小写比较好,不加下划线,不要大写。https://blog.csdn.net/qq_37922457/article/details/79944085 看到这篇文章醒悟的...
解决oracle数据库查询结果为null的问题
因为最近在写公司项目的时候遇到了一个问题,就是当我用户不同角色登录之后,看到的报表内容是不同的,而且**部领导登录需要看到全国的相关信息,对应省份领导只看到自己省份的,因为是通过iframe嵌入的报表,所以不能通过mybatis 的 if方法 最后找到了一个解决办法,此方法也可以用于查询数量为null引起报错的问题 使用oracle中的函数NVL NV...
Mybatis控制台打印sql能查到数据,但是程序返回null
关于传参,Mybatis IN函数的用法,太马虎了浪费很多时间。 错误实例:Mybatis xml配置文件 控制台输出语句 正确的Mybatis xml文件配置 控制台输出语句
在使用mybatis时遇到查询结果返回为空的情况,但是查数据库能查到
错误的结果为: 程序里面写的sql语句放在数据库里面去查询能查询到数据,但是程序里面查询时候,返回的结果为null 记录一下 我出现的原因是: 数据库的字段  account_id    account_name java的实体类:accountId   accountName 由于实体类和数据库的字段不匹配所以查询结果为null 修改实体类:account_id     accoun
Mybatis查询结果List集合数量正确,但全为null
最近在把一些之前做过的项目改成SSM框架,在一个简单的查询SQL中,出现了没有查询结果的情况(返回值为POJO),经过不断的测试,发现集合的数量正确,但是值全为NULL,在参考了很多的网上的实例后,东改瞎改也没有效果。TeachDao.javaTeachDao.xmlTeachService.javaTeachServiceImpl.javaTeachController.java以上是框架中的相...
mybatis查询返回的对象不为null,但是属性值为null
返回的对象不为null,但是属性值为null 代码如下: &amp;lt;resultMap id=&quot;BaseResultMap&quot; type=&quot;com.trhui.ebook.dao.model.MerchantUser&quot;&amp;gt; &amp;lt;id column=&quot;MU_ID&quot; jdbcType=&quot;BIGINT&quot; property=&quot;muId&quot;/&amp;gt; &
mybatis查询结果为空,但是SQL DEVELOPER中能查询到
被这个问题困惑了一下午,把MyBatis的配置文件,映射的配置文件全部检查了好几遍,拿运行成功的代码对比也找不到差错。 最后发现是因为新增的数据没有提交事务,写下这篇博文给自己以后提个醒。 再记一个枚举类的小问题; 这里在name后面多敲了一对括号,在调用getName方法的时候返回的是FEMALE 把这对括号去了之后,在调用getName方法就正常返回“女”了...
mybatis查询数据库返回结果为空
用mybits查询数据库时,如果参数已传入sql,sql也已经执行了,但是返回结果为空,首先保证数据库中有对应数据,如果有对应数据仍返回null,是数据库配置文件有问题。解决方案如下: 1、mapper.xml文件加入映射,column是数据库中的字段名,property是实体类javabean中的属性,要一一对应 2、标签中不要用ResultType,要用ResultMap且名字要和属性的i
MySQL查询结果都为null,实际返回数据size为1的坑
在写SQL统计时,使用了聚合函数SUM,导致查询结果全部为null,但是返回的JSON为 { &quot;code&quot;:0, &quot;count&quot;:0, &quot;data&quot;:[null] } 原因:  聚合函数的问题 在不使用聚合函数查询时,结果正常,集合的size也为0. 解决方法: 对接收的集合进行处理,去掉为null的数据,如下: companyReportList.remo...
使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法
使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,会报异常。 例如: select id="getPersonRecordId" parameterType="java.lang.String" resultType="int"> select role_id from p_person_role where stffe_id = #{s
数据库中能查数据,mybatis中查询为空的原因及解决方法
今日编写项目时,发现了mybatis查询操作时部分属性为空值,部分属性查询出来了。    数据库中存在值,也能查询出来。 原因:mapper.xml文件中,查询属性时,命名规范:查询时的属性必须对应java实体类中的属性。因为我的工程师mybatis的逆向工程生成,有的语句为自己手写。所以对应不上。 解决方法: 1.逆向工程中会生成一个resultMap的集合。这个集合是映射了数据库...
mybatis查询不出数据,结果为null
错误的结果为: 程序里面写的sql语句放在数据库里面去查询能查询到数据,但是程序里面查询时候,返回的结果为null 记录一下 我出现的原因是: 数据库的字段  account_id    account_name java的实体类:accountId   accountName sql语句  : select * from account_t      解决办法       一、 ...
解决:查询数据库表中的字段值为null,mybatis查询结果resultType=map,不存储键值的问题
日常开发中,常在mapper接口层中  用map存值,也用map返回值。有时当数据库表中的某一个字段为空时,返回的map不会映射成键值对。 直接上代码: 1.mapper接口层 @Repository public interface UserMapper {          List&amp;lt;Map&amp;gt; selectUser(); } 2.mapper.xml映射文件,有一点注意的...
oracle 使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法
org.apache.ibatis.binding.BindingException: Mapper method 'com.XXXXX' attempted toreturn null from a method with a primitive return type (int). &amp;lt;select id=&quot;selectPageviews&quot; resultType=&quot;java.lang.I...
mybatis使用char类型字段查询oracle数据库时结果返回null
同事在学mybatis时,遇到了一个问题就是,使用char类型字段作为查询条件时一直都查不出数据,其他类型的则可以。 使用的数据库是oracle,查询条件字段类型是char(50),java代码对应的是String类型。 后来经过排查,是由于在oracle中,char类型字段,如果内容长度不够,会自动以空格方式补足长度。如字段 name char(5),若值为sgl,那么oracle会自动用空格
mybatis查询无命中记录时返回的list为[null] size为1
在使用Mybatis查询数据的时候,设定查询条件,使其没有命中纪录,这时返回的内容为[null],size为1,因此通过null == list无法判断,0 == list.size()也无法判断,甚至借鉴了CollectionUtils.isEmpty(list)去判断是否为空,但都不好使。 当然,我们知道了返回的数据格式,必然有办法对这种情况下的list进行处理,但是还是对这种情况不理解,对...
mybatis mapper查询结果为NULL 复制出sql执行有结果
这是由于数据库字段增加。实体类,和mapper没有更新。
Mybatis查询数据库返回Null的三种解决方法
一、查询sql添加每个字段的判断空 IFNULL(rate,'') as rate 1 二、ResultType利用实体返回,不用map 三、springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示,可以通过添加配置文件,规定查询数据为空是则返回null。 &amp;lt;?xml version=&quot;1.0&quot; encoding...
使用MyBatis select数据库查出有数据 但返回对象为null
使用MyBatis select数据库查出有数据 但返回对象为null 8/4/2018 11:03:14 PM 今天测试项目出现使用MyBatis select数据库查出有数据 但返回对象为null mybatis配置文件: &amp;lt;!-- 根据主键ID查询订单信息--&amp;gt; &amp;lt;select id=&quot;getPayOrderId&quot; parameterType=&quot;java.lan...
MyBatis打印日志查询0条数据库却可以查到
https://********.com?userId  = &quot;ABC123&quot;在开发接口时 想测试一下  userId为String 类型 所以请求参数就这么拼接了怎么查也查不到 DEBUG 看了一下值也是对的其实是这个样子https://********.com?userId  = ABC123就可以查到了  这个也困扰了我半天 还好我机智 希望可以帮到你们...
解决mybatis的mapper.xml查询不出数据,结果一直为null问题
解决mybatis的mapper.xml查询不出数据,结果一直为null 1.问题   最近使用ssm框架的时候,遇到一个问题,就是mybatis的mapper.xml查询不出数据,mapper中写的sql语句放在数据库里面去查询是能查询到数据,但是mapper中查询时候,返回的结果为null。 我出现的原因是:   数据库字段和实体类之间的名称不相同,导致查询的数据找不到对应的实体映射,...
Mybatis 查不到数据,总是返回Null
Mybatis 查不到数据,总是返回Null mybatis突然查不到数据,查询返回的都是Null,但是 select count(*) from xxx查询数量,返回却是正常的。 Preparing: SELECT id,a9004,a9005,a9015 FROM a90 where a9010 = ? ORDER BY id LIMIT 1  [DEBUG] org.apach
使用ibatis从数据库中查询到的结果中部分属性为null和0
使用ibatis和struts2从数据库中查询到的Folder对象中部分属性  foldName=null  并且  seqNo=0 ,可是在数据中这几个字段并不是null或者是0,打开实体类后,发现folderName和seqNo两个属性的set方法有错误, 解决办法:将现有set方法删除后,通过shift+Alt+s快捷键重新生成该属性对应的set方法即可,正确的set方法应该是 thi...
mybatis 使用oracle char 字段查询返回结果总是null
今天遇到的问题就是和下面帖子的一样, 数据库里面 localname字段长度是32,使用下面的参数查不到数据,是null. subinput.setMuid("110028"); subinput.setWumark("01"); subinput.setLocalname("Passwd");     where MUID = #{muid,jdbcType=CHAR}
sprintboot+mybatis踩坑记录:查询不到数据list[null]--支持驼峰配置
按照springboot流行的helloworld,一步步建立demo,查询数据库,却发现,数据库明明有数据,通过mapper查询出来的list.size也有显示记录数。但是数据却是空的,list[null,nul] 于是检查了sql语句,以及controller、service、dao,反反复复检查没发现问题。最后想到可能是驼峰的问题,于是JavaBean里面属性改成和数据库一样,果然能查出数...
为何Mybatis查询无数据时返回值不是null
一、返回为一个List List&amp;lt;TeacherData&amp;gt; teacherData=null; teacherData=teacherService.queryTeacherByNameService(name);#假设数据库没有匹配的数据 if(teacherData==null){ System.out.println(1); } 结果:输出语句不会执行,也就是说te...
mysql查到数据不为空 但是mybatis 接收到count为0
在使用mybatis进行数据数量查询时,代码里debug时返回数量为0,但是根据控制台打印出来的sql去db studio里查询 ,是有数据的; 解决过程 1、不是数据库连接错误; 2、不是查询过滤条件错误; 3、mybatis   resultType类型和dao层方法类型一致 都是integer; 4、去掉所有的where条件,将count(*)换成count(id)、count(1...
mysql查询时,list集合为[null],但是size却为1,解决方法
if(list.size()==1&&null==list.get(0)||list.size()==0){ //list为空时 }else{ //list不为空时 }
Mybatis 下划线字段为NULL
问题描述 mybatis +Spring+mysql环境,进行查询,带有下划线的字段,比如create_date,实体中createDate,返回结果为null。 原因由于 进行查询的时候,返回值是使用的resultType 对应的是实体,而这样create_date与createDate就不能一一对应,框架没那么智能。改为resultMap进行映射即可。结论在网上找了很多,有的说的java.
关于mybatis进行sql查询字段值为null而不显示问题解决办法
有时候进行数据库查询操作的时候,查询结果中一条参数或者有某几个参数为null,这种情况下,参数名都不会返回,解决办法如下: 第一种:mybatis返回值resultType="map" 改成实体类返回 第二种:还是用map接收,默认查询为控的字段不显示,              所以在mybatis-config配置文件中加上 setting name="callSettersOnNul
mysql查询是否存在某条记录,不存在则插入,存在则更新
在工作中,会遇到这样的情形,查询数据库中是否存在一条记录信息,如果不存在则插入一条新的信息,如果存在,则更新已有的信息。 面对这样的需求,之前采用的是先读取一遍数据库,判断是否有数据,如果没有则插入一条新信息,如果有,则更新已有信息,但是这种做法在高并发情况下可能存在多个线程查询时都没有数据,于是都往数据库中插入新的记录,在插入时则会抛出异常(说该信息已在数据库中)。 后来发现
mybatis查询的时候会查询处List.size=1 并且 数据是null的结果
一般出现在多表查询,用left join连接多表的时候出现。应该用inner join不要用left join
mybatis 查询数量有结果,但查询列表时返回空
由于粗心,把startrow和endrow数据传反了,当查询结果数量小于分页数量时,返回空!
数据库有数据,但hibernate返回null
这两天发现一个奇怪的问题,我打开了hibernate显示sql的功能,用这个sql去数据库能查到数据,但是hibernate
springboot + Mybatis puls 查询返回null,但是sql查询有数据
情况 springboot + Mybatis puls项目,使用mp生成代码工具生成的mapper、mapperXML、entity等代码。 自己再mapperXML写的sql查询对象,结果为null。 原因 使用mp的生成代码类生成的mapperXML中的Base_Column_List有别称,但是我查询返回结果用的BaseResultMap。mapperXML部门代码如下,也是出问题...
解决MyBatis查询结果Map中值为null不存储键值的问题
在日常开发中,查询数据返回类型为map,数据库中有些自动值为空,则返回的结果中没有值为空的字段,则如何显示值为空的字段呢? 1.xml文件: 返回结果: {accountLocked=false, loginTime=1480559610977, phone=18301413850, isDelete=false, dataPro
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 数据库课程教研记录 数据库课程教研记录

相似问题

2
需要查询出所有字段,让userId显示,但是只显示一个,求大佬解答一下
2
需要查询出所有字段,让userId显示,但是只显示一个,求大佬解答一下。
1
需要查询出所有字段,让userId显示,但是只显示一个,求大佬解答一下。
1
新手小白,请帮解决通过DataGraidVIew更新数据库的问题。
1
python数据分析之后处理的数据入什么数据库比较好 mysql?Oracle?
3
我想要将以下的sql语句合并,使查询出的记录包含这些列
2
Oracle中如何实现跨库同步数据
2
SQL server 2008 R2勿删数据库,如何恢复?
1
表单数据和数据库字段里的内容匹配 为什么系统判断为不相等
1
一个有关数据库遇到的算法障碍的问题怎么解决?C语言
2
关于sql语句,批量查询与入库
0
用户任务管理的数据库设计问题
2
【SpringMvc】从数据库读取用户信息,其中图片路径响应变成了text/html,导致图片无法显示
3
JAVA中使用JDBC做批量处理时,没有报错,但是数据没有插入数据库 插入数据显示0条
5
jsp文件如何让下拉框动态读取数据库
2
用thinkphp 在网页上实现form表格(假设有10行数据)的增删改查,连接到数据库中 应该怎么写
5
接收别人推送的数据,存入数据库 sqlserver
1
我需要一个省市区镇街道 五级联动数据库并且需要经纬度,大家说怎么搞
2
mysql删除数据库是出现错误1064《42000》
1
PHP中提示:Warning: mysqli_fetch_array().....应该怎么修改,万分感谢