我在数据库中为特定列定义了一些由 SYS 模式定义的检查约束。现在,虽然通过 MyBatis 从 Java 代码调用它,但无论如何只能通过 MYBatis 配置强制执行相应的字段长度验证。
PS:我不想在 VO 级别强制执行约束(单独设置)。或使用 JSR 303
数据库:使用 MyBatis 的 Oracle 11g
我在数据库中为特定列定义了一些由 SYS 模式定义的检查约束。现在,虽然通过 MyBatis 从 Java 代码调用它,但无论如何只能通过 MYBatis 配置强制执行相应的字段长度验证。
PS:我不想在 VO 级别强制执行约束(单独设置)。或使用 JSR 303
数据库:使用 MyBatis 的 Oracle 11g
如果您不想在 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}