ibatis默认值提交的几种方法

在使用ibatis技术提交爱哦数据时,往往会碰到数据库中设置为 Not Null,且有默认值,原本以为页面上不需要输入就可以保存,但经过多次测试都会报错!

后面发现,问题出在ibatis生成的xml映射中InSert Into T1(C1,C2,...,Cn) values(#V1#,#V2#,...,#Vn#)中,当提交到数据库时给数据库发送了“InSert Into T1(C1,C2,...,Cn)
values ( id, null,...,null) ”命令,虽然数据库中C2,Cn不能为Null,也有默认值,但当V2,Vn为空时就会报错。

在开发时总结出以下几种办法处理默认值提交的问题:

第一类方法:程序代码处理:

1. Action中给from的默认字段赋值,提交到后台什就有了初始值;

2. Service提交之前给对象的各方法赋初始值,提交到数据库就用了初始值;

第二类方法:xml映射处理:

3. xml中改为动态SQL语句:

<sql id="T1Columns">
	<trim suffixOverrides=",">
		<if test="C1!= null">C1,</if>
		<if test="C2 != null">C2,</if>
		<if test="Cn != null">Cn</if>
	</trim>
</sql>
	
<sql id="T1Values">
	<trim suffixOverrides=",">
		<if test="C1 != null">#{C1},</if>
		<if test="C2 != null">#{C2},</if>
		<if test="Cn!= null">#{Cn}</if>
	</trim>
</sql>
	
<insert id="insertT1" parameterType="dto">
	insert into T1(<include refid="T1Columns"/>)
	values (<include refid="T1Values"/>)
</insert>

4. xml <Insert>中对字段进行判断

insert into T1(C1,C2,...Cn) values( 
	id, 			
	<isNull property="C2"> 
		'defaultValue' 
	</isNull> 
	<isNotNull property="C2"> 
		#C2# 
	</isNotNull>
	,...,		
	<isNull property="Cn">
		'defaultValue'
	</isNull>
	<isNotNull property="Cn">
		#Cn#
	</isNotNull> 
) 

第三类方法:页面赋值:

5. 页面上提交之前赋值,这样提交到后台就有值了

经过测试第四种方法比较好,所以我推荐使用,有空的时候把ibatis重新改写以下,这样自动生成的xml中就有了!



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值