我正在使用MyBatis
将类实例写入MySQL数据库// I have no control over how this java class is laid out -.-
class Hello {
boolean isFriendly
}
我的MyBatis Mapper看起来像这样
<insert id="doHello" parameterType="Hello">
insert into hello_table (
is_friendly --this is a varchar(1) btw
)
values (
#{isFriendly}
)
</insert>
问题是它将值插入到数据库中为0或1,但我需要将其作为“N”或“Y” 我没有选择修改java
我正在尝试尽可能减少我的代码,理想情况下要将内容添加到Mybatis Mapper中
我尝试过像
这样的事情 #{isFriendly,jdbcType=Boolean}
但它无效
答案 0 :(得分:4)
MyBatis typeHandler是一种正确的方法。
您可以实现一个类型处理程序,然后在任何sql语句中使用它:
#{isFriendly, typeHandler=YesNoBooleanTypeHandler}
有关详细信息,请参阅MyBatis Java Boolean to Sql enum
答案 1 :(得分:2)
修改您的插入语句
insert into hello_table (
is_friendly
)values (${isFriendly=="0"?"'N'":"'Y'"})
答案 2 :(得分:0)
创建处理程序并将其添加到Mybatis配置中 创建处理程序
import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @MappedTypes(Boolean.class) @MappedJdbcTypes(JdbcType.CHAR) public class BooleanStringTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException { preparedStatement.setString(i, aBoolean ? "Y" : "N"); } @Override public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException { return getBoolean(resultSet.getString(s)); } @Override public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException { return getBoolean(resultSet.getString(i)); } @Override public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return getBoolean(callableStatement.getString(i)); } private Boolean getBoolean(String s) { return "Y".equalsIgnoreCase(s); } }
在Mybatis配置中添加:
<typeHandlers>
<typeHandler jdbcType="CHAR" javaType="java.lang.Boolean" handler="crm.data.trade.utils.BooleanStringTypeHandler"/>
</typeHandlers>