在做项目的时候,数据库中的所有字段被设置为全都不能为null,但是在我们开发过程中,插入一些记录的时候,实体类中的一些字段如果页面没有传入,则默认就会被设置为null,这样的话,在执行插入语句的时候,数据库就会报错,说指定的列不能为null,这样数据就无法插入。
在网上找了一下,都没有这种处理的方式,但是找到了mybatis的类型转换,说的是在java中的类型和数据库中的类型不一致的时候,需要自己处理数据库类型和java中类型之间的转换,这个就是通过mybatis的typehandler来处理的。
查看typehandler这个接口发现有一下几个需要实现的方法:
public String getResult(ResultSet rs, String columnName) throws SQLException;
public String getResult(ResultSet rs, int columnIndex) throws SQLException;
public String getResult(CallableStatement cs, int columnIndex) throws SQLException;
public void setParameter(PreparedStatement pstmt, int index, String value, JdbcType jdbcType) throws SQLException;
在这4个需要实现的方法中,我们只需要关注第4个方法,因为这个方法是mybatis在给参数设置值的时候,会调用到此方法,基于这样的原因,如果我们在
setParameter中判断当前参数传入的值,如果value=null,我们就将参数的值设置为空的字符串,这样就避免了在执行插入语句的时候,传入null的情况,数据库中也不会报错,问题就解决了。
代码:
package zzt.ssm.controller.typehandler;
|