mybatis对象传参,属性为 Integer且值为 null ,与Map 传参或String类型是有什么区别 ?

简单说:
对象传参, 通过<when>或者<if>标签判断某属性为 null 且为 Integer,就会抛出"java.lang.Integer.intValue()" because "XXX" is null的异常。而 String 类型或者 使用 Map 传参就没有问题,如果Integer类型不为Null 也能正常运行,是哪里的问题?望诸位大佬不吝赐教,拜谢。。。

代码如下,实体类:

public class user {

private String name;

private Integer age;

...get,set,有参构造,无参构造...

}

sql mapper文件:

<select id="selectByConditionSingle" resultType="user">

select * from tb_student where

<choose>

<when test="age != null">

age = #{age}

</when>

<when test="name != null and name != ''">

name like #{name}

</when>

</choose>

</select>

java mapper 接口:

List<user> selectByConditionSingle(user user);

测试方法:

@Test

public void selectByConditionSingleTest() throws IOException {

String name= "%"+"zhangsan"+"%";

Integer age=18;

user user = new user();

user.setName(name);

// 这里不设置 age 属性,或者设置为 NUll 就会抛出下面异常。

//user.setAge(age);

InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);

SqlSession sqlSession = build.openSession();

studentMapper mapper = sqlSession.getMapper(studentMapper.class);

List<user> users = mapper.selectByConditionSingle(user);

for (user item:users) {

System.out.println(item);

}

sqlSession.close();

}

异常信息:

### Error querying database.  Cause: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because "this.age" is null


回答:

实体类当中定义属性,开始用的 int 类型。后来考虑到 int 不能为 null 改成了 Integer

但是,在 set() get() 中,因为程序没用到,所以就没改。。。。。

没用到,可以不写,能够运行通过,但只要写,就必须要写正确。否则就无法运行通过。

另,在实际项目中应尽量使用Integer ,避免使用int

毕竟,本就是面向对象编程。

以上是 mybatis对象传参,属性为 Integer且值为 null ,与Map 传参或String类型是有什么区别 ? 的全部内容, 来源链接: utcz.com/p/944825.html

回到顶部