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 ,这样精确一些。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2021-07-19

Mybatis-plus新版本分页失效PaginationInterceptor过时的问题

一.确认mybatis-plus-boot-starter版本 3.4.0版本对此部分有更新,如果是旧版本升级,会出现分页失效问题,同时idea会提示PaginationInterceptor过时,新版本改用了MybatisPlusInterceptor 二.Mybatis-plus3.4.0版本配置 更改新版配置后,分页功能正常,注意DbType.MYSQL改为自己使用的数据库类型,否则分页也不生效 @Configuration public class MyBatisPlusConfig {

Mybatis之Select Count(*)的获取返回int的值操作

本文将介绍,SSM中mybatis 框架如何获取Select Count(*)返回int 的值. 1. Service 代码: public boolean queryByunitclass(String unitclass, String unitsubclass) throws Exception { int count = matceMachineUnitMapper.queryByunitclass(unitclass, unitsubclass); if (count > 0) { r

解决myBatis返回integer值的问题

经过测试 将 resultMap="java.lang.Integer" 改成 resultType="java.lang.Integer" 也可以解决问题~ 补充知识:mybatis返回count(*)的整数值 1.mybatis中resultType定义为"java.lang.Integer" <select id="selectNums" resultType="java.lang.Integer&quo

mybatis 自定义实现拦截器插件Interceptor示例

首先熟悉一下Mybatis的执行过程,如下图: 类型 先说明Mybatis中可以被拦截的类型具体有以下四种: 1.Executor:拦截执行器的方法. 2.ParameterHandler:拦截参数的处理. 3.ResultHandler:拦截结果集的处理. 4.StatementHandler:拦截Sql语法构建的处理. 规则 Intercepts注解需要一个Signature(拦截点)参数数组.通过Signature来指定拦截哪个对象里面的哪个方法.@Intercepts注解定义如下: @D

mybatis 返回Integer,Double,String等类型的数据操作

在使用mybatis的过程中会遇到只返回单独数据类型的问题会用到resultType. //返回Integer <select id="getSpeedByLinkId" parameterType="java.lang.String" resultType="Integer"> SELECT speed from dws_tfc_state_speed_link_last_rt where link_id = #{linkId} &

mybatis 连接mysql数据库 tinyint 为boolean类型详解

字段类型为tinyint(1)的返回类型设置为integer 现象描述: 数据库表字段类型为:tinyint 长度为1,即 类型为:tinyint(1) 查询时,该字段对应的的java类型为boolean 问题描述: 如何将该字段的java类型设置为Integer? 解决方案: 1. 在jdbcUrl添加参数:tinyInt1isBit=false(默认为true): 2.避免使用长度为1的tinyint类型字段存储数字格式的数据: 补充知识:[mybatis]mysql数据库tinyint类型

JDBC连接MySQL数据库批量插入数据过程详解

这篇文章主要介绍了JDBC连接MySQL数据库批量插入数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.读取本地json数据 2.jdbc理解数据库 3.批量插入 maven 引入jar包: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2

Intellij Mybatis连接Mysql数据库

有好一段时间没有学习新东西了,过了个十月一感觉事情还是越早做越好,废话不多说了,说一下用mybatis连接MySQL数据库,上一篇写了jdbc测试,我的数据库表还是原来的.由于从网上查的资料大部分都是eclipse,由于我是做Android开发的,习惯了ide,所以就硬着头皮来了,中间其实遇到过好多问题. 看一下工程结构 先说一下Java代码,dao是查询接口,model是ben和对应的查询语句的xml,我感觉这样有点不好,user.xml放在dao里面比较好,等理解了就知道了,由于我是初学者所

MySQL数据库使用mysqldump导出数据详解

mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有

MySQL binlog中的事件类型详解

MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型. 首先,看看源码中定义的事件类型 源码位置:mysql-5.7.14/libbinlogevents/include/binlog_event.h enum Log_event_type { /** Every time you update this enum (when you add a ty

JavaScript类型系统之布尔Boolean类型详解

前面的话 布尔值Boolean类型可能是三种包装对象Number.String和Boolean中最简单的一种.Number和String对象拥有大量的实例属性和方法,Boolean却很少.从某种意义上说,为计算机设计程序就是与布尔值打交道,作为最基本的事实,所有的电子电路只能识别和使用布尔数据.本文将介绍布尔Boolean类型 定义 布尔Boolean类型表示逻辑实体,它只有两个值,保留字true和false,分别代表真和假这两个状态 Boolean包装类型是与布尔值对应的引用类型,在布尔表达式

MYSQL数据库中cmd命令操作详解

CMD命令 cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Server 2003 )下的"MS-DOS 方式".中文版Windows XP 中的命令提示符进一步提高了与DOS 下操作命令的兼容性,用户可以在命令提示符直接输入中文调用文件. 今天我们就来看一下数据库的各种命令,以下命令全部是从CMD命令窗口下的命令行输入指令,首先如果如果输

MYSQL数据库表结构优化方法详解

本文实例讲述了MYSQL数据库表结构优化方法.分享给大家供大家参考,具体如下: 选择合适的数据类型 1.使用可以存下你的数据的最小的数据类型 2.使用简单的数据类型.Int要比varchar类型在mysql处理上简单 3.尽可能的使用not null定义字段 4.尽量少用text类型,非用不可时最好考虑分表 使用int来存储日期时间,利用FROM_UNIXTIME()[将int类型时间戳转换成日期时间格式],UNIX_TIMESTAMP()[将日期时间格式转换成int类型]两个函数进行转换 使用

PHP远程连接oracle数据库操作实现方法图文详解

本文实例讲述了PHP远程连接oracle数据库操作实现方法.分享给大家供大家参考,具体如下: 一.以下是基于 wampServer 的php 访问oracle数据库的操作步骤: 1.第一步:让PHP支持OCI 首先,安装PHP的集成运行环境,网上有很多集成,我安装的是WampServer的(具体的安装方法也可以参考之前写的另一篇文章),安装好后,从安装目录中找到php.ini文件,比如我本地的路径是D:\wamp\bin\php\php5.3.3,将php.ini中的php_oci8.dll的;

优化MySQL数据库中的查询语句详解

很多时候基于php+MySQL建立的网站所出现的系统性能瓶颈往往是出在MySQL上,而MySQL中用的最多的语句就是查询语句,因此,针对MySQL数据库查询语句的优化就显得至关重要!本文就此问题做出详细分析如下: 1.判断是否向MySQL数据库请求了不需要的数据,如下列情况: (1).查询不需要的数据,例如你需要10条数据,但是你选出了100条数据加了limit做限制. (2).多表关联时返回全部列 (3).总是取出全部列select*......取出全部列,会让优化器无法完成索引覆盖扫描这类优

Mysql数据库清理binlog日志命令详解

概述 今天主要分享下mysql数据库应该如何正确的删除binlog日志,这里要注意不要强制使用rm命令进行清除.否则mysq-bin.index错乱,最终导致后期expire-log-days配置项失效. 1.查看binlog日志 mysql> show binary logs; 2.删除某个日志文件之前的所有日志文件 purge binary logs to 'mysql-bin.000035'; 3.清理2019-09-09 13:00:00前binlog日志 PURGE MASTER LO