在使用mybatis时遇到查询结果返回为空的情况,但是查数据库能查到

错误的结果为:

程序里面写的sql语句放在数据库里面去查询能查询到数据,但是程序里面查询时候,返回的结果为null

记录一下 我出现的原因是:

数据库的字段  account_id    account_name

java的实体类:accountId   accountName

sql语句  : select * from account_t     

解决办法      

一、

由于查询结果的字段为account_id,account_name,在实体类中没有定义,所以查询结果为null

修改实体类为:account_id     account_name  问题得到解决  能正常的查询到数据

必须要有对应的get set方法


二、

同时也可以修改查询语句

sql语句  : select    account_id  as "accountId"  account_name as "accountName"  from account_t  

数据库的字段  account_id    account_name

java的实体类:accountId   accountName

问题也同样能解决

总结:

如果使用select * 来查询的 那么实体类中的属性必须和数据表中对应的字段一模一样

如果使用select 字段名 as 别名来查询的  ,那么实体类中的属性必须和你取的别名对应

总之,你查询出来的字段和你实体类中对应的属性名必须一致


在Spring Boot项目中,如果使用Mybatis数据库查询数据遇到空指针异常通常是由于查询结果为null,而在后续处理中尝试访问null对象的属性或方法引起的。要解决这个问题,你可以采取以下几个步骤: 1. **设置合理的数据检**:在调用Mybatis查询结果之前,添加适当的条件判断,确认查询是否返回了结果。例如,使用`Objects.nonNull()`检resultList是否为空。 ```java List<User> users = sqlSession.selectList("select * from user"); if (Objects.nonNull(users) && !users.isEmpty()) { // 进行后续操作 } else { System.out.println("No data found."); } ``` 2. **使用Optional类**:Spring提供的`Optional`类可以帮助管理可能存在空值的结果。查询后将结果封装到`Optional`里,再进行下一步操作。 ```java Optional<User> optionalUser = sqlSession.selectOne("select * from user where id = :id", Map.of("id", someId)); optionalUser.ifPresent(user -> { /* process the user */ }); ``` 3. **设置默认值或异常处理**:在无法确定结果的情况下,可以设置一个默认值,或者在抛出异常前捕获并处理这个错误。 ```java User user = sqlSession.selectOne("select * from user where id = :id", Map.of("id", someId)); return user != null ? user : new User(); // 创建一个默认的用户对象 ``` 4. **配置Mybatis全局结果映射**:如果希望查询结果总是非空,可以在Mybatis的全局结果映射中设定,让所有查询结果都转换为非空对象。 ```xml <select id="selectUser" resultType="com.example.User"> select * from user where id = #{id} </select> ``` 然后在User类上加上`@Results`注解,强制转换为NonEmptyResultMap: ```java @Mapper public interface UserRepository { @Select("select * from user") @Results({ @Result(property = "user", column = "*", javaType = User.class, allowNull = false) }) List<User> getUsers(); } ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值