在MyBatis中强制执行长度检查约束的方法

时间:2015-05-29 00:28:54

标签: mybatis spring-mybatis

对于特定列,我在DB中为SYS模式定义了一些检查约束。 现在,在通过MyBatis从Java代码调用它时,无论如何都要通过MYBatis配置强制执行相应的字段长度验证。

PS:我不想在VO级别强制执行约束(单独设置setter)。或者使用JSR 303

DataBase:Oracle 11g 使用MyBatis

1 个答案:

答案 0 :(得分:2)

如果您不想在java bean中进行验证(手动或使用JSR 303),我认为您可以为这些字段编写自己的typeHandler。

Typehandler将处理String字段并进行验证。 见code example for String TypeHandler。 您可以在处理程序的get / set方法中强制执行验证逻辑(任何复杂性)。

如果要在保存到数据库时使用TypeHandler将字符串修剪为给定长度,请在 setNonNullParameter 方法中执行此操作。

以下示例代码

    @MappedJdbcTypes(JdbcType.VARCHAR)
   public class ExampleTypeHandler extends BaseTypeHandler<String> {
    @Override
      public void setNonNullParameter(PreparedStatement ps, int i, 
String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter.substring(0,DESIRED_MAX_LENGTH));
      }

您还可以修剪(或修改)从数据库中读取的值 - 您需要在TypeHandler实现中修改get *方法来执行此操作。

你必须让mappers使用你的处理程序。否则,将使用给定类型的默认处理程序。 您在XML文件中的SQL必须使用语法

#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}

查看https://mybatis.github.io/mybatis-3/sqlmap-xml.html了解详情。

相关问题