Mybatis使用问题汇总
2023-11-29 10:14:01
amethystfob
Mybatis使用问题
一、mybatis获取表数据返回map,用ArrayList<HashMap<String, Object>>接收,数据既有Double类型又有Integer类型,该如何返回相同的类型
在使用 MyBatis 获取表数据返回 Map 时,我们可以通过设置 typeHandler 来指定对应列的数据类型。默认情况下,MyBatis 会将数值型的数据统一解析成 Double 类型,所以需要指定相应的 typeHandler 才能让 MyBatis 返回正确的数据类型。
例如,假设我们的表中有一个字段 age,其中既有 Integer 类型的数据,又有 Double 类型的数据,我们希望在查询时能够返回与数据库中存储的数据类型一致的结果,可以按照以下步骤进行操作:
1.创建自定义的 typeHandler 类,继承 BaseTypeHandler,并指定泛型为 Object。
public class MyNumberTypeHandler extends BaseTypeHandler<Object> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { // 省略 } @Override public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getObject(columnName); } @Override public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return rs.getObject(columnIndex); } @Override public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return cs.getObject(columnIndex); } }
2.在 mybatis-config.xml 中配置 typeHandlers,将创建的 MyNumberTypeHandler 类注册为全局类型处理器。
xml <configuration> <!-- 省略其他配置 --> <typeHandlers> <typeHandler handler="com.example.MyNumberTypeHandler"/> </typeHandlers> </configuration>
3.在 mapper.xml 文件中指定相应列使用的 typeHandler。
xml <select id="getUserList" resultMap="userMap"> select id, name, age from user </select> <resultMap id="userMap" type="java.util.HashMap"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age" typeHandler="com.example.MyNumberTypeHandler"/> </resultMap>
这样,在获取表数据并使用 ArrayList<HashMap<String, Object>> 接收时,MyBatis 就会根据指定的 typeHandler 返回相应的数据类型了。
标题:Mybatis使用问题汇总
作者:amethystfob
地址:https://newmoon.top/articles/2023/11/28/1701163167448.html
欢迎各路大侠指点留痕: