mybatis使用经验

1、jdbcType问题

mybatis3的报错:

org.apache.ibatis.exceptions.PersistenceException :
### Error updating database. Cause: org.apache.ibatis.type.TypeException : Error setting null
parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable
parameters. Cause: java.sql.SQLDataException: 尝试从类型“OTHER”的数据值获取类型 “VARCHAR”
的数据值。
### The error may involve org.mybatis.model.BlogMapper.insertBlog_user_autokey-Inline
### The error occurred while setting parameters

mybatis3用户指南的解释:

如果传递了一个空值,那这个JDBC Type 对于所有JDBC 允许为空的列来说是必须的。
您可以研读一下关于PreparedStatement.setNull()的JavaDocs 文档。
解决这个问题就需要在参数中指定 jdbcType 属性,这个属性只在 insert,update 或 delete
的时候针对允许空的列有用。

对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,mybatis默认jdbcType.OTHER

所以 当insert或者update时加入jdbcType可以避免出现这个异常

注:对于时间类型,如果只记录年月日,jdbcType即可指定为Date。如果需要记录时分秒,则需要指定jdbcType为TIMESTAMP类型。字符串可以是用varchar类型


2、字符串替换
默认的情况下,使用#{}语法会促使MyBatis 生成PreparedStatement 并且安全地设置
PreparedStatement 参数(=?)值。尽量这是安全、快捷并且是经常使用的,但有时候您可能想
直接未更改的字符串代入到SQL 语句中。比如说,对于ORDER BY,您可以这样使用
ORDER BY ${columnName}
这样 MyBatis 就不会修改这个字符串了。
� 警告: 这种不加修改地接收用户输入并应用到语句的方式,是非常不安全的。这使用户能够
进行SQL注入,破坏代码。所以,要么这些字段不允许用户输入,要么用户每次输入后都进行检测
和规避。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值