数据库表
CREATE TABLE `info_thread` (
`id` bigint(20) NOT NULL auto_increment,
`infoId` bigint(20) NOT NULL,
.......
`stackInfo` BLOB default null,
PRIMARY KEY (`id`),
KEY `infoId` (`infoId`),
KEY `serverId` (`serverId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.JvmInfo.java里面 引用下面类对象.
private List<ThreadInfo> statckInfos;
.......
2.ThreadInfo.java里面 要序列化这个数组
private StackTraceElement[] stackInfo;
.......
3.JvmInfo.xml 这里在获得JvmIinfo对象时,生成List<ThreadInfo>
<resultMap id="JvmInfoResult" class="JvmInfo">
<result property="id" column="id"/>
<result property="statckInfos" column="id" select="getThreadInfosByInfoId"/>
</resultMap>
<resultMap id="ThreadInfoResult" class="ThreadInfo">
<result property="id" column="id"/>
<result property="infoId" column="infoId"/>
这里要设置 javaType="[Ljava.lang.StackTraceElement;" jdbcType="BLOB" 可是不知道为什么我测试的时候返回的是byte[].?????????
<result property="stackInfo" column="stackInfo" javaType="[Ljava.lang.StackTraceElement;" jdbcType="BLOB"/>
</resultMap>
<statement id="getThreadInfosByInfoId" parameterClass="java.lang.Long" resultMap="ThreadInfoResult">
select * from info_thread where infoId = #value#
</statement>
<insert id="insertThreadInfo" parameterClass="ThreadInfo">
<![CDATA[INSERT INTO info_thread(
serverId,infoId,threadId,threadName,allCupTime,userCupTime,isAlive,stackInfo)
VALUES(#serverId#,#infoId#,#threadId#,#threadName#,#allCupTime#,#userCupTime#,#isAlive#,#stackInfo,jdbcType=BLOB,javaType=[Ljava.lang.StackTraceElement;#)]]>
<selectKey resultClass="java.lang.Long" keyProperty="id">
<![CDATA[SELECT LAST_INSERT_ID() AS ID ]]> 插入时把id赋值
</selectKey>
</insert>
4.SqlMapConfig.xml配置里
<typeHandler javaType="[Ljava.lang.StackTraceElement;" callback="com.ibatis.sqlmap.engine.type.ObjectTypeHandler" jdbcType="BLOB"/>
不知道为什么获得的byte[].我做了反序列化
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new ByteArrayInputStream(s));
StackTraceElement[] stackInfo = (StackTraceElement[]) ois.readObject();
this.stackInfo = stackInfo;
} catch (Exception e) {
this.stackInfo = new StackTraceElement[0];
} finally {
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
}
}
}
分享到:
相关推荐
- **serialize**:是否序列化缓存对象。 - **3.1.2 联合使用readOnly和serialize属性** - 当设置为只读时,缓存对象不可修改。 - 序列化缓存对象有助于缓存的持久化。 **3.2 iBATIS高速缓存模型的类型** - **...
- **可序列化的读写缓存**:支持将缓存数据序列化到磁盘,以提高缓存的可靠性和性能。 - **缓存类型**:如 FIFO (First In First Out)、LRU (Least Recently Used) 等缓存替换策略。 #### API 使用 iBATIS 提供了...
在Spring和iBatis中,可以使用Jackson或Gson库来序列化和反序列化Java对象为JSON,便于与前端交互。在Spring MVC中,可以使用`@ResponseBody`注解将Controller方法的返回值直接转换为JSON响应。 总的来说,Spring、...
- **Serializable可读写缓存**:支持序列化的可读写缓存。 - **缓存类型**:包括LRU(最近最少使用)、FIFO(先进先出)等不同的缓存策略。 #### 5. 动态SQL - **动态Mapped Statement**:支持根据运行时参数动态...
2. **序列/序列化**:在Oracle等数据库中,可以创建序列来生成唯一的主键值。Ibatis通过`useGeneratedKeys`和`keyProperty`属性,配合SQL的`SELECT SEQ_NAME.NEXTVAL FROM DUAL`,可以在插入后自动获取生成的主键值...
iBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。iBatis可以被看作是一个半自动化 ORM(对象关系映射)框架,它对JDBC的操作...
- `serialize`:如果设为`true`,存储在Cache中的对象会被序列化,保证不同Session间的一致性。 - `reference-type`:配置缓存对象的引用类型,如STRONG(传统Java对象引用),WEAK(弱引用)等。 **四种Cache实现*...
- **Serializable Read/Write Caches**:支持序列化的读写缓存。 - **Cache Types**:不同类型的缓存机制,如LRU缓存、FIFO缓存等。 - **Dynamic Mapped Statements**:动态生成SQL语句,以适应更复杂的查询需求。...
在缓存模型章节中,文档讨论了只读和读写缓存的区别,以及如何实现可序列化的读写缓存,和几种不同的缓存实现,包括“MEMORY”,“LRU”,和“FIFO”。 动态SQL部分涉及了如何构建更为灵活的SQL语句,包括条件元素...
- serialize:是否序列化缓存对象,用于跨JVM共享。 3.1.2 联合使用readOnly和serialize属性: - readOnly="true":缓存数据不可修改,适合读取频繁且数据不需更新的场景。 - serialize="true":将缓存数据序列...
`readOnly`属性设置为`false`表示缓存内容可能被外部更改,`serialize`设为`true`意味着缓存的对象会被序列化存储。 根据`readOnly`和`serialize`的不同组合,iBatis缓存有不同的行为模式,影响着多个Session之间的...
`ibatis`,全称为`MyBatis`,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java世界里,`ibatis`为解决繁琐的JDBC代码和手动处理结果集的问题提供了强大而灵活的解决方案。尤其在与Oracle这样...
- **Serializable 可读写缓存**:支持序列化的可读写缓存。 - **缓存类型**:包括 SIMPLE、THREAD_LOCAL 和 JAVASSIST 等多种类型。 - **动态 MappedStatement**:支持条件 SQL 语句。 - **二元条件元素**:如 `<if>...
在需要序列化的场景下,可以选择使用可序列化的读写缓存。 ##### 3. Cache Types iBATIS支持多种缓存类型,包括LruCache、FifoCache等,可以根据实际需求选择。 #### 十、Dynamic Mapped Statements iBATIS支持...