`
malixxx
  • 浏览: 100411 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ibatis 保持序列化对象

阅读更多
数据库表
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) {
}
}
}






分享到:
评论

相关推荐

    iBATIS缓存介绍

    - **serialize**:是否序列化缓存对象。 - **3.1.2 联合使用readOnly和serialize属性** - 当设置为只读时,缓存对象不可修改。 - 序列化缓存对象有助于缓存的持久化。 **3.2 iBATIS高速缓存模型的类型** - **...

    iBATIS-SqlMaps-2_ja.pdf

    - **可序列化的读写缓存**:支持将缓存数据序列化到磁盘,以提高缓存的可靠性和性能。 - **缓存类型**:如 FIFO (First In First Out)、LRU (Least Recently Used) 等缓存替换策略。 #### API 使用 iBATIS 提供了...

    spring整合struts2,ibatis及其json的交互

    在Spring和iBatis中,可以使用Jackson或Gson库来序列化和反序列化Java对象为JSON,便于与前端交互。在Spring MVC中,可以使用`@ResponseBody`注解将Controller方法的返回值直接转换为JSON响应。 总的来说,Spring、...

    iBatis SQL Maps开发指南.pdf

    - **Serializable可读写缓存**:支持序列化的可读写缓存。 - **缓存类型**:包括LRU(最近最少使用)、FIFO(先进先出)等不同的缓存策略。 #### 5. 动态SQL - **动态Mapped Statement**:支持根据运行时参数动态...

    08_ibatis教程_sql主键生成方式.zip

    2. **序列/序列化**:在Oracle等数据库中,可以创建序列来生成唯一的主键值。Ibatis通过`useGeneratedKeys`和`keyProperty`属性,配合SQL的`SELECT SEQ_NAME.NEXTVAL FROM DUAL`,可以在插入后自动获取生成的主键值...

    使用ibatis写的小项目

    iBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。iBatis可以被看作是一个半自动化 ORM(对象关系映射)框架,它对JDBC的操作...

    ibatis_数据缓存

    - `serialize`:如果设为`true`,存储在Cache中的对象会被序列化,保证不同Session间的一致性。 - `reference-type`:配置缓存对象的引用类型,如STRONG(传统Java对象引用),WEAK(弱引用)等。 **四种Cache实现*...

    Java ibatis缓存技术

    - **serialize**:是否序列化缓存中的对象。默认情况下,缓存中的对象不会被序列化。 ##### 2. `&lt;flushInterval&gt;` 元素 用于指定缓存的刷新间隔时间。可以使用`milliseconds`、`seconds`、`minutes`或`hours`来...

    ibatis-sqlMap

    - **Serializable Read/Write Caches**:支持序列化的读写缓存。 - **Cache Types**:不同类型的缓存机制,如LRU缓存、FIFO缓存等。 - **Dynamic Mapped Statements**:动态生成SQL语句,以适应更复杂的查询需求。...

    IBATIS.NET 学习文档

    在缓存模型章节中,文档讨论了只读和读写缓存的区别,以及如何实现可序列化的读写缓存,和几种不同的缓存实现,包括“MEMORY”,“LRU”,和“FIFO”。 动态SQL部分涉及了如何构建更为灵活的SQL语句,包括条件元素...

    iBATIS缓存介绍[借鉴].pdf

    - serialize:是否序列化缓存对象,用于跨JVM共享。 3.1.2 联合使用readOnly和serialize属性: - readOnly="true":缓存数据不可修改,适合读取频繁且数据不需更新的场景。 - serialize="true":将缓存数据序列...

    自己总结的IBATIS资料

    - Serializable缓存支持序列化的对象,适用于需要跨进程共享缓存的情况。 31. **缓存类型** - 不同的缓存类型提供了不同的缓存策略和性能特点,可以根据实际需求选择合适的缓存类型。 32. **动态MappedStatement...

    ibatis 缓存配置策略

    `readOnly`属性设置为`false`表示缓存内容可能被外部更改,`serialize`设为`true`意味着缓存的对象会被序列化存储。 根据`readOnly`和`serialize`的不同组合,iBatis缓存有不同的行为模式,影响着多个Session之间的...

    ibatis 例子

    `ibatis`,全称为`MyBatis`,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java世界里,`ibatis`为解决繁琐的JDBC代码和手动处理结果集的问题提供了强大而灵活的解决方案。尤其在与Oracle这样...

    ibatis 指导书 PDF

    - **Serializable 可读写缓存**:支持序列化的可读写缓存。 - **缓存类型**:包括 SIMPLE、THREAD_LOCAL 和 JAVASSIST 等多种类型。 - **动态 MappedStatement**:支持条件 SQL 语句。 - **二元条件元素**:如 `&lt;if&gt;...

    ibatis参考文档

    在需要序列化的场景下,可以选择使用可序列化的读写缓存。 ##### 3. Cache Types iBATIS支持多种缓存类型,包括LruCache、FifoCache等,可以根据实际需求选择。 #### 十、Dynamic Mapped Statements iBATIS支持...

Global site tag (gtag.js) - Google Analytics