catch中的直接映射

http://cs.xiyou.edu.cn:84/jsjzcyl/a/zjs033050.htm#2

http://wlzy.aynu.edu.cn/jsj/wlkc/jsjzcyl/jsjzcyl/chap03/3.5.2.htm
catch中的直接映射

catch中的直接映射

首先,根据CPU指令指定的块号找到catch中所对应的行,然后用指令中的s-r指定的区号(标记)与catch中的标记作比较。若相等,则命中,在catch中找到所要求的块,然后用指令中地址中最低的W位读取所需要的字。若不符合,则不命中,在主存中读取所需要的块。
catch中的直接映射



### 如何在 MyBatis 中将结果正确映射为 JSON 格式 为了使 MyBatis 将某些字段以 JSON 格式储到数据库并能够正确读取,可以通过自定义 `TypeHandler` 来完成这一需求。以下是具体方法: #### 自定义 TypeHandler 可以创建一个继承自 `BaseTypeHandler<T>` 的类来处理 Java 对象与 JSON 字符串之间的转换。例如,在保时将对象序列化为 JSON 字符串入数据库;而在查询时则反序列化回原始的对象结构。 ```java import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JsonTypeHandler<T> extends BaseTypeHandler<T> { private final ObjectMapper objectMapper = new ObjectMapper(); private final Class<T> type; public JsonTypeHandler(Class<T> type) { if (type == null) throw new IllegalArgumentException("Type argument cannot be null"); this.type = type; } @Override public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { try { ps.setString(i, objectMapper.writeValueAsString(parameter)); } catch (JsonProcessingException e) { throw new RuntimeException(e); } } @Override public T getNullableResult(ResultSet rs, String columnName) throws SQLException { String jsonStr = rs.getString(columnName); return parse(jsonStr); } @Override public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String jsonStr = rs.getString(columnIndex); return parse(jsonStr); } @Override public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String jsonStr = cs.getString(columnIndex); return parse(jsonStr); } private T parse(String jsonStr) { if (jsonStr == null || "".equals(jsonStr.trim())) { return null; } try { return objectMapper.readValue(jsonStr, type); } catch (Exception e) { throw new RuntimeException(e); } } } ``` 此代码片段展示了如何构建一个通用的 `JsonTypeHandler`[^1]。 #### 配置 resultMap 接着需要修改 MyBatis 的 XML 映射文件中的 `<resultMap>` 定义部分,指定该列使用的 `typeHandler` 是上述自定义处理器。如下所示: ```xml <resultMap id="baseMap" type="com.example.entity.MyEntity"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="data_column" jdbcType="VARCHAR" property="jsonData" typeHandler="com.example.handler.JsonTypeHandler"/> </resultMap> ``` 这里假设实体类有一个名为 `jsonData` 的属性用于接收来自数据库表中某列为 JSON 数据的内容,并指定了对应的 `typeHandler` 属性指向我们之前编写的 `JsonTypeHandler`[^2]。 对于更复杂的场景比如列表形式的数据,则可扩展类似的逻辑实现专门针对集合类型的 handler[^4]。 另外还有一种较为简单的解决方案即直接采用 TEXT 或 LONGTEXT 类型作为目标字段类型而非原生 JSON 支持的方式,虽然这种方式牺牲了一定程度上的语义表达准确性但在实际应用当中也能满足大部分的需求[^3]。 最终测试确认整个流程无误之后就可以正式投入使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值