mybatis有结果返回null

解决:application.yml 中mybatis此项(解决驼峰及数据库字段有下划线问题)

map-underscore-to-camel-case: true

问题:

 

mybatis debug模式有结果,但返回时绑定不上,返回null

2019-07-02 21:30:01.000  INFO 13908 --- [nio-8705-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms
before:UserDto{id='null', name='aaa'}

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@365ae636] was not registered for synchronization because synchronization is not active
2019-07-02 21:30:05.548  INFO 13908 --- [nio-8705-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-07-02 21:30:06.108  INFO 13908 --- [nio-8705-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1029331665 wrapping com.mysql.jdbc.JDBC4Connection@6a9043f2] will not be managed by Spring
==>  Preparing: select id as USER_ID from t_user where name=? 
==> Parameters: aaa(String)
<==    Columns: USER_ID
<==        Row: 111
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@365ae636]
after:null
2019-07-02 21:36:12.590  WARN 13908 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=6m6s378ms486µs221ns).

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatistest.mapper.ISelectIdMapper">
<select id="selectId" resultType="com.example.mybatistest.mapper.UserDto" parameterType="com.example.mybatistest.mapper.UserDto">
    select id as USER_ID from t_user where name=#{name}
</select>
</mapper>

service.java

package com.example.mybatistest.service.impl;

import com.example.mybatistest.mapper.ISelectIdMapper;
import com.example.mybatistest.mapper.UserDto;
import com.example.mybatistest.service.IQueryIdByName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Title:
 * @Auther: test
 * @Date: 2019/6/24 17:25
 * @Version: 1.0
 * @Description:
 */
@Service
public class QueryIdByNameImpl implements IQueryIdByName {
    @Autowired
    private ISelectIdMapper selectIdMapper;

    @Override
    public String queryIdByName(String name) {
        UserDto userDto=new UserDto();
        userDto.setName(name);
        System.out.println("before:"+userDto);

        userDto=selectIdMapper.selectId(userDto);
        System.out.println("after:"+userDto);
        return ((UserDto) userDto).toString();
    }
}

dto.java

package com.example.mybatistest.mapper;

/**
 * @Title:
 * @Auther: test
 * @Date: 2019/7/2 20:55
 * @Version: 1.0
 * @Description:
 */
public class UserDto {
    private String userId;
    private String name;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "UserDto{" +
                "id='" + userId + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

yml配置

spring:
  application:
    name: service-mybatistest
  datasource:
    # 数据库配置
    url: jdbc:mysql://192.168.1.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
    username: test
    password: test
    driverClassName: com.mysql.jdbc.Driver
server:
  port: 8705
mybatis:
  configuration:
#下面这项要开启 map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath:mappers/*.xml eureka: client: serviceUrl: #指向注册中心 defaultZone: http://192.168.111.133:8888/eureka/ instance: # 每间隔1s,向服务端发送一次心跳,证明自己依然”存活“ lease-renewal-interval-in-seconds: 1 # 告诉服务端,如果我2s之内没有给你发心跳,就代表我“死”了,将我踢出掉。 lease-expiration-duration-in-seconds: 2

 

转载于:https://www.cnblogs.com/pu20065226/p/11123354.html

### 回答1: 当MyBatis的count语句返回null时,可能是由于以下几个原因引起的: 1. 数据库查询没有匹配到任何记录。如果count语句中的条件不满足数据库中的任何记录,那么count语句返回null是正常的。 2. SQL语句错误。请检查SQL语句中是否存在语法错误或逻辑错误。可以使用数据库客户端工具执行相同的SQL语句,看是否能够正常返回结果。 3. MyBatis配置有误。请检查MyBatis的配置文件,确保数据库连接信息正确,并且mapper文件中的count语句与数据库表结构相匹配。 4. 数据库连接问题。请确认数据库连接是否正常,可以通过测试连接数据库的方式来验证。 如果以上原因都排除,仍然返回null,可以尝试使用其他方式进行统计,例如使用MyBatis的select语句进行count统计,或者使用Java代码对查询结果进行判断处理。另外,可以尝试使用debug模式进行调试,查看具体的执行过程,以便找出问题所在。 ### 回答2: 当MyBatis的count方法返回null时,通常是由于以下几个原因: 1. 查询条件不满足:count方法通常用于统计满足特定条件的记录数。如果查询条件不正确或者没有满足条件的记录,则count方法会返回null。此时,可以检查查询条件是否正确,并且确认数据库中是否存在满足条件的数据。 2. SQL语句问题:count方法的实现依赖于配置文件中的SQL语句。如果SQL语句有语法错误或者逻辑问题,可能会导致查询失败并返回null。可以查看SQL语句是否正确,并确保其逻辑正确。 3. 数据库连接问题:count方法执行时需要与数据库建立连接。如果数据库连接配置有问题或者数据库服务器无法访问,则会导致查询失败并返回null。可以检查数据库连接配置是否正确,并确保数据库服务器处于可用状态。 4. 数据库表结构变更:count方法执行时需要根据数据库表结构来统计记录数。如果数据库表结构有变更,可能会导致count方法无法执行或返回null。可以检查数据库表结构是否与MyBatis配置文件中定义的一致,并确保没有发生表结构变更。 综上所述,当MyBatis的count方法返回null时,可以通过检查查询条件、SQL语句、数据库连接以及数据库表结构来解决该问题。 ### 回答3: 当MyBatis的count返回null时,可能存在以下几种原因: 1. 数据库查询结果为空:在执行查询操作时,MyBatis的count语句可能返回null是因为查询条件不满足,没有查询到任何符合条件的记录。这种情况下,可以检查一下查询条件是否正确,是否与数据库中的数据匹配。 2. MyBatis中的count语句配置有误:可能是在配置MyBatis的映射文件中,count语句的配置有误,导致返回null。可以检查一下映射文件中count语句的配置是否正确,包括SQL语句的编写和参数的传递等。 3. 数据库连接问题:在执行count操作时,可能存在数据库连接问题,导致查询无法正常执行,返回null。可以检查一下数据库连接是否正常,是否能够正常访问数据库。 4. 数据库中的数据为空:如果数据库中没有任何数据,那么执行count操作也会返回null。可以检查一下数据库中是否有符合查询条件的数据。 针对以上情况,可以通过以下方式来解决: 1. 检查查询条件是否正确,并确认是否有符合条件的数据。 2. 检查MyBatis的映射文件中count语句的配置是否正确。 3. 检查数据库连接是否正常,是否能够正常访问数据库。 4. 确认数据库中是否有符合查询条件的数据。 根据具体情况,选择相应的解决方法来解决MyBatis count返回null的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值