mybatis二级缓存

二五八卍 发布于 2016/01/11 15:35
阅读 446
收藏 0
mybatis的二级缓存,多表查询结果为list,后转换为json格式并return,请问mybatis缓存的是list还是转换之后的json???
加载中
0
Java_Coder
Java_Coder
缓存与JSON有什么关系?
二五八卍
二五八卍
缓存和json没什么关系,我的意思是我联表select,查询结果是一个Map(resultType=“Map”),然后我将这个Map转换为json格式的字符串,问一下缓存的是Map还是json格式的字符串??
0
Ambitor
Ambitor
缓存与JSON有什么关系???缓存与JSON有什么关系???缓存与JSON有什么关系???
二五八卍
二五八卍
下面是我的一些测试代码
二五八卍
二五八卍
回复 @Ambitor : 我也是认为mybatis二级缓存会缓存select出来的数据,但是测试发现结果不是的。
Ambitor
Ambitor
回复 @顽石1989 : 既然json都是你自己代码转的了,mybatis怎么会帮你缓存勒~~~1级缓存是缓存sql语句,默认开启 2级缓存是缓存结果的。。应该也就是List
二五八卍
二五八卍
缓存和json没什么关系,我的意思是我联表select,查询结果是一个Map(resultType=“Map”),然后我将这个Map转换为json格式的字符串,问一下缓存的是Map还是json格式的字符串???
0
二五八卍
二五八卍
controller代码:
@RequestMapping("/findUserById.do")
public String findUserById(ModelMap model,
@RequestParam(name = "id", required = false, defaultValue = "123") int id) {
       User user = userService.findUserById(id);
       model.addAttribute("message", user.getUsername());//此时username="aaa"
user.setUsername("bbb");
return "index";
}
二五八卍
二五八卍
回复 @jst_1231 : 这句话说到点上了
Ambitor
Ambitor
@顽石1989 楼主,我觉得你可能需要先去了解下对象是怎么创建的,在内存中是怎么存在的基础。。。感觉你问的和你做的完全是两回事。。。10
jsdt
jsdt
回复 @顽石1989 : 缓存的是引用,又不是值,你修改了引用所指向的值,所以肯定就变了
二五八卍
二五八卍
回复 @Ambitor :我是想mybatis缓存的是select出来的数据,而不是我修改之后的数据
Ambitor
Ambitor
你这个代码我表示看不懂你想干嘛啊。。。当然是bbb 你不是重新赋值了吗。。你赋值在返回页面之前 当然是bbb
下一页
0
二五八卍
二五八卍
mybatis配置文件: <settings>
                <!-- 全局映射器启用缓存 -->
                <setting name="cacheEnabled" value="true" />
                <!-- 查询时,关闭关联对象即时加载以提高性能 -->
                <setting name="lazyLoadingEnabled" value="true" />
                <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
                <setting name="aggressiveLazyLoading" value="false" />
                <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
                <setting name="multipleResultSetsEnabled" value="true" />
                <!-- 允许使用列标签代替列名 -->
                <setting name="useColumnLabel" value="true" />
                <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
                <setting name="useGeneratedKeys" value="true" />
                <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
                <setting name="autoMappingBehavior" value="FULL" />
                <!-- 对于批量更新操作缓存SQL以提高性能  -->
                <!-- <setting name="defaultExecutorType" value="BATCH" /> -->
                <!-- 数据库超过25000秒仍未响应则超时 -->
                <setting name="defaultStatementTimeout" value="25000" />
                <!--是否保留空字段-->
                <setting name="callSettersOnNulls" value="true"/>
        </settings>
0
二五八卍
二五八卍

UserMapper.xml

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" readOnly="true">
        <property name="timeToIdleSeconds" value="3600"/>
        <property name="timeToLiveSeconds" value="3600"/>
        <property name="maxEntriesLocalHeap" value="1000"/>
        <property name="maxEntriesLocalDisk" value="10000000"/>
        <property name="memoryStoreEvictionPolicy" value="LRU"/>
    </cache>

<select id="findUserById" parameterType="int" resultType="User" >
select * from user where id=${value}
</select>

返回顶部
顶部