1、问题描述
返回值为null,程序不报错,但是条数好像是正确的。我出现问题的代码如下:
1、自定义类studentmapper继承了basemapper接口
public interface studentmapper extends basemapper<student> {
}2、使用studentmapper中的selectlist方法查询数据的时候,打印结果的时候返回值都会null,但是条数没有问题,也就是有几条数据就返回几个null.
如下代码:
list.foreach(system.out::println);返回的结果都是null
@requestmapping("/testmybatisplus")
@responsebody
public void testmybatisplus() {
system.out.println("===1===");
list<student> list=studentmapper.selectlist(null);
//assert.istrue(5 == list.size(), "");
list.foreach(system.out::println);
}2、出现问题的原因
本质:命名规范的问题,在创建数据库表的时候,创建表信息如下:
create table student( stu_id varchar(50), stu_name varchar(30), stu_sex varchar(2), stu_age varchar(4), stu_addr varchar(50), stu_pwd varchar(50) )default charset=utf8;
mybatisplus查询数据的时候,会默认使用驼峰命名法,也是就会使用stuid,stuname,stusex,stuage,stuaddr,stupwd。
我java中对应的bean信息如下:
@data
@allargsconstructor
@noargsconstructor
public class student {
private string stu_id;
private string stu_name;
private string stu_sex;
private string stu_age;
private string stu_addr;
private string stu_pwd;
}造成的结果:
由于mybatisplus的这个规则问题,造成了默认的映射失败,也就是数据库的字段被修改成了stuid,而bean字段为stu_id,这就造成了映射失败。
3、解决方法
3.1、解决办法1
我们在数据库和bean的命名上采用驼峰命名法,就可以避免这个这个。
3.2、解决办法2
有些低级错误,有时候也会出现,就是没有设置set、get方法及构造器等,造成值映射失败。
3.3、解决办法3
- 关闭mybatisplus默认的驼峰命名法:关闭方式如下
- org.apache.ibatis.logging.stdout.stdoutimpl:打印mybatisplus执行的sql语句
- map-underscore-to-camel-case:关闭驼峰命名法
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.stdoutimpl
map-underscore-to-camel-case: false
# 如果是放在src/main/java目录下 classpath:/com/*/*/mapper/*mapper.xml
# 如果是放在resource目录 classpath:/mapper/**.xml
#mapper-locations: classpath:/mapper/**.xml总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论