ibatis 保持序列化对象

xiaoxiao2022-06-11  27

数据库表 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) { } } }
转载请注明原文地址: https://www.6miu.com/read-4931520.html

最新回复(0)