mybatis long 类型返回为null报异常

解决MyBatis Mapper返回空异常
本文详细解析了在使用MyBatis框架时,Mapper方法返回null导致的异常问题,尤其是在处理long型原始数据类型时。通过使用IFNULL函数,有效避免了因数据缺失而引发的运行时错误,确保了应用程序的稳定性和健壮性。
 Mapper method 'com.mpn.dao.TWeatherMapper.avgWeatherTemperature attempted to return null from a method with a primitive return type (long).
  <select id="avgWeatherTemperature" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT IFNULL(AVG(WeatherTemperature),0) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  </select>
  
   <select id="sumWeatherRainfall" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT SUM(WeatherTemperature) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  
  </select>
  
   <select id="avghumidity" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT IFNULL(AVG(WeatherHumidity),0) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  </select>

由于返回为空long中没有此类型所以抛异常,改为

 <!-- 根据日期来进行计算平局值与 -->
   <select id="avgWeatherTemperature" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT IFNULL(AVG(WeatherTemperature),0) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  </select>
  
   <select id="sumWeatherRainfall" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT IFNULL(SUM(WeatherTemperature),0) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  
  </select>
  
   <select id="avghumidity" resultType="java.lang.Long" parameterType="java.lang.String" >
        SELECT IFNULL(AVG(WeatherHumidity),0) AS OrderAverage FROM t_weather WHERE WeatherDate= #{date,jdbcType=VARCHAR};
  </select>

用IFNULL来进行判断

MyBatis返回参数类型分两种,分别是resultMap和resultType [^1]。 ### resultType - **基本数据类型**:如int、string、long等。例如在查询统计数量时,可将返回类型指定为`java.lang.Integer`,示例如下: ```xml <select id="queryCategoryBrandCount" resultType="java.lang.Integer" parameterType="java.util.HashMap"> select count(1) from common_category_brand where 1=1 <if test="categoryId != null"> and category_id = #{categoryId,jdbcType=BIGINT} </if> <if test="brandId != null"> and brand_id = #{brandId,jdbcType=BIGINT} </if> </select> ``` - **实体类**:可以指定一个实体类作为返回类型MyBatis会将查询结果映射到该实体类的属性上。例如: ```xml <select id="getAllEmps" resultType="employee"> select * from t_employee </select> ``` 注意这里的`resultType`返回类型是集合内存储数据的类型,不是`list` [^2]。 - **集合类型**:当返回多个结果时,通常使用List集合,`resultType`指定集合中元素的类型。例如: ```xml <select id="findAppropriateEmployees" resultType="com.hand.hap.hr.dto.Employee"> SELECT he.EMPLOYEE_ID AS employeeId, he.EMPLOYEE_CODE AS employeeCode, he.NAME AS name, he.BORN_DATE AS bornDate, he.EMAIL AS email, he.MOBIL AS mobil, he.JOIN_DATE AS joinDate, he.GENDER AS gender, he.CERTIFICATE_ID AS certificateId, he.STATUS AS status, he.ATTRIBUTE3, he.ATTRIBUTE4 FROM hr_employee he, hr_employee_assign hea, hr_org_position_b hop LEFT JOIN xxmd_per_jobs xpj ON xpj.JOB_ID = hop.ATTRIBUTE1 where hea.EMPLOYEE_ID = he.EMPLOYEE_ID AND hea.PRIMARY_POSITION_FLAG = 'Y' AND hea.ENABLED_FLAG = 'Y' </select> ``` 这里返回的是`List<Employee>`类型 [^4]。 - **Map类型**:MyBatis还支持将查询的数据封装成Map,查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值 [^3]。 ### resultMap 当提供的返回类型是`resultMap`时,由于Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。示例如下: ```xml <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long"> select <include refid="Base_Column_List" /> from common_car_make where id = #{id,jdbcType=BIGINT} </select> ``` 这里指定了`resultMap`为`BaseResultMap` [^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值