1

我在数据库中为特定列定义了一些由 SYS 模式定义的检查约束。现在,虽然通过 MyBatis 从 Java 代码调用它,但无论如何只能通过 MYBatis 配置强制执行相应的字段长度验证。

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

数据库:使用 MyBatis 的 Oracle 11g

4

1 回答 1

2

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

Typehandler 将处理字符串字段并进行验证。请参阅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* 方法才能做到这一点。

您必须告诉映射器使用您的处理程序。否则,将使用给定类型的默认处理程序。XML 文件中的 SQL 必须使用语法

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

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

于 2015-05-30T19:54:27.857 回答