MyBatis:巧用 TypeHandler 将字符串 “405,404” 转为普通类型
在 MyBatis 中,可以使用 TypeHandler 将数据库中的字符串类型(例如: "405", "404")转换为对应的普通类型(例如: 405, 404)。首先,需要创建一个自定义的 TypeHandler 类来完成转换的逻辑。 首先在你的工程中创建一个类,该类需要继承自 org.apache.ibatis.type.BaseTypeHandler,并实现泛型接口 org.apache.ibatis.type.TypeHandler<T>,其中泛型 T 是要转换的目标类型。在这个自定义的 TypeHandler 类中,需要实现两个方法:setNonNullParameter 和 getNullableResult。 示例代码如下: ```java import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class StringToIntegerTypeHandler extends BaseTypeHandler<Integer> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException { ps.setInt(i, parameter); } @Override public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException { String value = rs.getString(columnName); return convertToInteger(value); } @Override public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String value = rs.getString(columnIndex); return convertToInteger(value); } @Override public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String value = cs.getString(columnIndex); return convertToInteger(value); } private Integer convertToInteger(String value) { if (value == null) { return null; } value = value.replaceAll("[^\\d.]", ""); // 去除非数字的字符 return Integer.parseInt(value); } } ``` 然后,在你的 MyBatis 配置文件中,添加一个 typeHandler 元素来注册这个自定义的 TypeHandler。例如,在 mybatis-config.xml 中添加以下内容: ```xml <typeHandlers> <typeHandler handler="com.example.StringToIntegerTypeHandler"/> <!-- 其他自定义 TypeHandler --> </typeHandlers> ``` 这样,当使用 MyBatis 查询数据库时,会自动调用 StringToIntegerTypeHandler 类中相应的方法,将字符串类型转换为普通类型。 上述代码中的自定义 TypeHandler 是针对将字符串转换为整数类型的示例,你可以根据需要修改相应的逻辑,将字符串转换为其他类型。 ######[AI写代码神器 | 2080点数解答 | 2024-04-25 09:10:33]
- C++ 实现快递公司运费计算:根据重量与类型精准算出费用(字节豆包 | 480点数解答 | 2025-12-21 22:04:58)84
- C++ 实现根据重量与快递类型计算某快递公司运费(字节豆包 | 472点数解答 | 2025-12-27 20:39:33)37
- C++ 实现快递公司运费计算:根据重量与类型精准算费(字节豆包 | 385点数解答 | 2026-02-03 14:00:23)51
- C++ 实现快递公司运费计算程序(字节豆包 | 479点数解答 | 2026-02-13 22:32:35)15
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)478
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)464
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)401
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)426
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)78
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)107
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)289
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)273