mybatis判斷int是否為空的時候,需要註意的3點

mybatis判斷int是否為空的註意點

1、int為空時會自動賦值0,所以必須用integer作為javaBean的屬性值類型。

2、必須註意封裝的get.set。也是Integer.不然也會報錯。

3、註意好以上兩個點,直接用null判斷

例子:

public class ExcelPutVo {
 private Integer startTime;// 開始時間
 private Integer endTime;// 截止時間
 private int sentId;// 下達者id
 private String onlyUuid;// 唯一標識
 public int getSentId() {
 return sentId;
 }

 public void setSentId(int sentId) {
 this.sentId = sentId;
 }

 public String getOnlyUuid() {
 return onlyUuid;
 }

 public void setOnlyUuid(String onlyUuid) {
 this.onlyUuid = onlyUuid;
 }
 public Integer getStartTime() {
 return startTime;
 }

 public void setStartTime(Integer startTime) {
 this.startTime = startTime;
 }

 public Integer getEndTime() {
 return endTime;
 }

 public void setEndTime(Integer endTime) {
 this.endTime = endTime;
 }

mybatis的xml

<!-- 導出excel的數據查詢 -->
 <select id="selectByExcelPutVo" resultMap="BaseResultMap"
 parameterType="com.zeng.zhdj.wy.entity.vo.ExcelPutVo">
 select *
 from count_use
 <where>
 1=1
 <if test="sentId != null">
 and sent_id=#{sentId,jdbcType=INTEGER}
 </if>
 <if test="endTime != null">
 and count_end_month &lt;=#{endTime,jdbcType=INTEGER}
 </if>
 <if test="startTime!= null">
 and count_start_month &gt;=#{startTime,jdbcType=INTEGER}
 </if>
 <if test="onlyUuid != null">
 and only_type=#{onlyUuid,jdbcType=VARCHAR}
 </if>
 </where>
 </select>

mybatis 映射 null 為 int 時報錯

當 mybatis 試圖把 null 字段映射到 java 中的 int 類型時,會報這個錯。

Caused by: java.lang.RuntimeException: Error setting property ‘setTotal_count’ of ‘com.webank.ccs.benefit.data.BenefitJobStatBOA@3973f34c’. Cause: java.lang.IllegalArgumentException

解決方法

如果這個字段不參與計算,則 java 中的數據類型可以設置為 String,這個 String 引用類型的變量就可以映射 null 瞭。

同樣的情況還適應於數據庫中的 Date 類型,若 java 中的映射字段不需要參與計算,則可以直接設置 java 中的類型為 String,這樣做的好處是,mysql 中的類型為 Date 類型,查詢條件可以直接使用如下格式的字符串去匹配: yyyy-MM-dd 或 yyyyMMdd 甚至是 yyMMdd,甚至是 yy-MM-dd 都可以匹配。

但是對於 mysql 中的金額,一般情況下要映射為 BigDecimal ,這樣精確一些。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: