iBatis插入对象属性值为空时报错。

使用iBatis的时候,插入数据的时候,当对象的某个属性值为空值的时候,会报错(错误不统一(将截断字符串或二进制数据、))。

解决途径:

INSERT INTO TMCS_ORPUDO (
			POLICY_NO,STATUS,INSURED_BEGIN_DATE,RISK_CODE,PAY_MODE,
			PAY_YEARS,YEARS,APPLY_CODE,PAY_TO_DATE,MODE_PREMIUM,
			BASE_PREMIUM,SUNDRY_AMOUNT,INPUT_DATE,
			CHANNEL_CODE,CHANNEL_CODE2,CHANNEL_CODE3,CHANNEL_CODE4,SPONSOR_CODE,CITY_CODE,REVISIT_FLAG,REVISIT_DATE,
			CAMPAIGN_CODE,ORDER_NO,PACKAGE_CODE,PACKAGE_NAME,SIGN_DATE,IS_V_TYPE,
			APPLY_NAME,AGENT_CODE,BANK_STAFF_CODE,OPERATE_STATUS,BATCH_NO,BATCH_NO_TOLOCATE,CREATE_BY,CREATE_DATE
		)
		VALUES
		(
			#policyNo:VARCHAR#,
			#status:VARCHAR#,
			#insuredBeginDate:DATE#,
			#riskCode:VARCHAR#,
			#payMode#,
			#payYears#,
			#years#,
			#applyCode:VARCHAR#,
			#payToDate:DATE#,
			#modePremium#,
			#basePremium#,
			#sundryAmount#,
			#inputDate:DATE#,
			#channelCode:VARCHAR#,
			#channelCode2:VARCHAR#,
			#channelCode3:VARCHAR#,
			#channelCode4:VARCHAR#,
			#sponsorCode:VARCHAR#,
			#cityCode:VARCHAR#,
			#revisitFlag:VARCHAR#,
			#revisitDate:DATE#,
			#campaignCode:VARCHAR#,
			#orderNo:VARCHAR#,
			#packageCode:VARCHAR#,
			#packageName:VARCHAR#,
			#signDate:DATE#,
			#isVtype:VARCHAR#,
			#applyName:VARCHAR#,
			#agentCode:VARCHAR#,
			#bankStaffCode:VARCHAR#,
			'0',
			#batchNo:VARCHAR#,CONVERT(varchar(100), GETDATE(), 112),'system',GETDATE()
		)
在对象的属性的后面加上对应的数据类型。

结果有多个这样的插入数据,导致大量重复的工作量,并且以后维护起来相当复杂。

后面在网上找,发现对于myBatis3的可以在myBatis配置增加<setting>属性  jdbcTypeForNull="OTHER" ,但是对于iBatis2并没有设置这个属性。

记下来防止忘记。

参考文档点击打开链接

### MyBatis-Plus 插入操作报的原因及解决方案 在使用 MyBatis-Plus 进行数据插入操作时,可能会遇到各种异常情况。以下是可能导致 `insert()` 方法报的一些常见原因及其对应的解决方案。 #### 1. 字段映射不匹配 如果数据库表中的字段名称与实体类属性名称不一致,则可能引发误。MyBatis-Plus 默认会按照驼峰命名法自动映射字段名到 Java 属性名。但如果存在特殊字符或者自定义命名规则的情况,需要手动指定映射关系[^4]。 ```java @TableField(value = "`interval`") private Integer interval; ``` 通过上述方式可以显式声明字段的对应关系,避免因字段名解析失败而导致的异常。 --- #### 2. 数据库字段类型与实体类属性类型不符 当数据库字段的数据类型与实体类中定义的属性类型不兼容时,也会抛出异常。例如,数据库字段为字符串类型而实体类属性却设置为了整型数值。因此,在设计模型时需确保两者之间的类型一致性[^2]。 --- #### 3. 自增主键配置不当 对于带有自增主键的表结构来说,如果没有正确配置主键策略,那么在执行插入语句时就可能出现问题。可以通过如下方式进行调整: ```java @IdType.AUTO 表示数据库层面实现自增长; @IdType.INPUT 则允许开发者自行传入ID值。 ``` 具体代码示例如下所示: ```java import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; public class User { @TableId(type = IdType.AUTO) private Long id; } ``` 此部分逻辑有助于防止由于 ID 自动生成机制冲突所引起的误。 --- #### 4. 注解缺失或误用 某些特定场景下需要用到额外的功能支持(比如构建器模式),此时如果不恰当地应用相关注解也可能造成运行期崩溃。例如单独使用 `@Builder` 而未配合其他必要注解 (`@AllArgsConstructor`, `@NoArgsConstructor`) 可能会产生意想不到的结果[^3]。 推荐做法是在复杂对象初始化过程中同时启用这些辅助工具来增强灵活性和稳定性: ```java @Data @NoArgsConstructor @AllArgsConstructor @Builder public class ExampleEntity { ... } ``` 这样既保留了传统构造函数的优点又兼顾现代开发需求。 --- #### 5. SQL 日志排查 最后但同样重要的一点是充分利用框架自带的日志功能定位潜在隐患所在位置。开启调试日志可以帮助快速发现实际发送至服务器端的具体命令是否存在语法或其他方面的问题[^1]。 可以在 application.yml 文件里加入下面这段配置以便观察内部运作细节: ```yaml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` --- ### 结论 综上所述,针对 MyBatis-Plus 的 `insert()` 方法报现象可以从多个角度出发寻找根源并采取相应的措施加以修复。以上列举了几种典型的案例供参考学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值