Mybatis中的attempted to return null from a method with a primitive return type (int).异常

今天在练习mybatis框架时,对已实现的数据库查询接口进行测试时,接口抽象类设计时,返回值为int类型,当查询到数据库中不存在该数据时,查询结果应该返回为null,但是测试时,出现了这个异常:

org.apache.ibatis.binding.BindingException: Mapper method 'com.shop_demo.dao.AdminDAO.getAdminByNameAndPassword attempted to return null from a method with a primitive return type (int).
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:102)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
	at com.sun.proxy.$Proxy8.getAdminByNameAndPassword(Unknown Source)
	at com.test.admin.admintest.get(admintest.java:55)
	at com.test.admin.admintest.main(admintest.java:74)

翻译过来就是:

试图从具有基元返回类型(int)的方法返回空值。 

当boolean、int、long等数据类型作为返回值时,为什么将用mybatis查询的结果null时,会出现错误,查了查才发现这些基本数据类型是不能定义为null的。
于是就去创建了一个class来测试一下,如图:
Mybatis中的attempted to return null from a method with a primitive return type (int).异常_第1张图片
也就是说当数据库查询结果为null时,不能直接使用boolean、int、long等基本数据类型作为返回值。
找到原因之后,就可以来解决这个问题:
方法1:将boolean、int、long等基本数据类型改为封装数据类型,boolean封装数据类型为Boolean、int封装数据类型为Integer,根据个人项目逻辑,对返回值进行判断即可。

方法2:使用MySQL种的IFNULL函数,IFNULL函数是MySQL控制流函数之一,它可以接受两个参数,如果查询结果不是NULL,则返回第一个参数。 否则返回第二个参数。两个参数也可以是文字或表达式。

你可能感兴趣的:(Mybatis)