1.对于数据库设计DATE类型,如果我们要要求返回带时间的格式时间"yyyy-MM-dd HH:mm:ss" 那么我们的
<result column="TBSJ" property="tbsj" jdbcType="DATETIME" />
中"jdbcType"必须为"DATETIME",否则将返回"yyyy-MM-dd" 格式;
2.对于输入参数
<result column="TBR" property="tbr" jdbcType="VARCHAR" nullValue="" />
我们可以指定"nullValue",当数据库没有值时,可以使用的默认值,但是有时我们不愿意指定默认值,那么我们该怎么班呢?对于 jdbcType="DATE" 不会报错,但是他会返回null,如果引用的客户端没有进行处理,那么很可能报nullpoint的错误;
3.对于输入的"parameterClass",如果为空值,同样会弹出一些错误,解决的方法就是采用动态的参数设置
<dynamic>
<isNotEmpty property="tznr" close=",">
TZNR = #tznr:VARCHAR#
</isNotEmpty>
</dynamic>
才可以避免这个问题
4.当我们在 sqlMap的"resultMap"类型与代码里面的转换类型不一致时,他会部报任何错误,而是只有一个返回null的错误,有时很难查找这样的问题,所以,当你感到莫名其妙的时候,请一定回头看看你的类型是否匹配;
5.我们在数据库插入一条数据的时候,经常是需要返回插入这条数据的主键。但是数据库供应商之间生成主键的方式都不一样。
有些是预先生成(pre-generate)主键的,如Oracle和PostgreSQL;有些是事后生成(post-generate)主键的,如MySQL和SQL Server。但是不管是哪种方式,我们都可以用iBATIS的节点来获取语句所产生的主键。
例子如下:
<!-- Oracle SEQUENCE Example using .NET 1.1 System.Data.OracleClient -->
<insert id="insertProduct-ORACLE" parameterClass="product">
<selectKey resultClass="int" type="pre" keyProperty="id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values(#id#,#description#)
</insert>
<!-- Microsoft SQL Server IDENTITY Column Example -->
<insert id="insertProduct-MS-SQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass="int" type="post" keyProperty="id" >
select @@IDENTITY as value
</selectKey>
</insert>
<!-- MySQL Example -->
<insert id="insertProduct-MYSQL" parameterClass="product">
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass="int" type="post" keyProperty="id" >
select LAST_INSERT_ID() as value
</selectKey>
</insert>