我在DB中为特定列定义了由SYS模式定义的一些检查约束。现在,当通过MyBatis从Java代码调用它时,是否只通过MYBatis配置强制相应的字段长度验证。
PS:我不想在VO级别强制执行约束(setter单独设置)。或使用JSR 303
DataBase :使用MyBatis的Oracle11g
发布于 2015-05-30 19:54:27
如果您不想在java中进行验证(手动或使用JSR 303),我认为您可以为这些字段编写自己的typeHandler。
Typehandler将处理字符串字段并进行验证。见字符串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。
https://stackoverflow.com/questions/30519253
复制相似问题