我在我的项目中使用MyBatis和MySql。
我知道我可以修改所有mybatis模板,例如:
<update id="update">
UPDATE
myTable
<set>
...
<if test="myField != null">myField = <choose>
<when test="myField == true">'yes'</when>
<otherwise>'no'</otherwise>
</choose>,
</if>
...
</set>
WHERE
...
</update>
但我能用更方便的方式做到这一点吗?
解决这个问题的最佳方法似乎是实现我自己的布尔类型处理程序:
public class YesNoBooleanTypeHandler extends BaseTypeHandler<Boolean> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, convert(parameter));
}
@Override
public Boolean getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return convert(rs.getString(columnName));
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return convert(rs.getString(columnIndex));
}
@Override
public Boolean getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return convert(cs.getString(columnIndex));
}
private String convert(Boolean b) {
return b ? "yes" : "no";
}
private Boolean convert(String s) {
return s.equals("yes");
}
}
然后在映射器模板中使用它:
<update id="update">
UPDATE
myTable
<set>
...
<if test="myField != null">myField = #{myField ,typeHandler=YesNoBooleanTypeHandler}</if>
...
</set>
WHERE
...
</update>
问题内容: 我有一个FlagsAttribute按位枚举,像这样- 现在,在C#中,我将此值存储在一个名为MyProperty的属性中,并保存后将此属性写入我的SQL数据库的整数列中。假设如果我从代码中选择,那么它将在数据库中另存为。 我知道我可以从数据库获取值,只需要将int值类型转换为MyEnum,它将为我提供这些值。但是,我希望对某些存储过程中的SQL数据执行一些操作,在这些存储过程中,显然
作为学习r2DBC的一部分,我遇到了Enum转换面临的问题。我在这里使用PostgreSQL。当读取评级为PG-13和NC-17(任何带破折号的东西)的电影数据时,我面临问题。 下面是我的表模式 mpaa_rating定义为 这是我的代码,它在我的配置中注册转换器 我的检索代码很简单 添加引发的异常https://gist.github.com/harryalto/bd51bbcdd081868c
问题内容: 除了简单地为每个枚举创建查找表(以Id,代码和名称作为列)之外,是否有更好或更简便的方法将枚举(在C#等编程语言中可用的枚举)存储在SQL Server数据库中,而不是为每个枚举创建查找表(尤其是在存在枚举时)每个表中只有很少的几行)?我发现有一篇文章建议只为所有枚举创建一个查找表,并且有人批评这种方法违反了引用数据的完整性,因此有人批评该方法。如果枚举仅由一个表使用,那么使用一些预定
问题内容: 我想知道是否有可能枚举返回的行。不根据任何列的内容,而只是产生一个连续的整数索引。例如 将返回一些内容: 它用于https://data.stackexchange.com/ 问题答案: 尝试:
问题内容: 假设我有这个枚举: 通过以下映射: 枚举被发送到数据库,,。我希望这些值改为存储为,或存储在varchar列中。 如何将枚举映射到varchar列? 问题答案: 将其添加为EnumType的参数: 这是因为等效于java.sql.Types.VARCHAR
问题内容: 假设我有一个返回sth的查询。像这样: 是否可以添加另一列来枚举每个组中的行(即,枚举具有其他角色的经理,工人和人员,而不考虑其他角色)?像这样: 使用Oracle扩展很好。 问题答案: 使用窗口功能: