花了点时间撸了个 MyBatis 的 J2Cache 支持模块,含注释共八十多行代码 (J2CacheAdapter.java),再有 Bug 我就真的要退役了。
使用方法很简单,请看 https://gitee.com/ld/J2Cache/tree/master/mybatis
一直没玩过 MyBatis ,今天撸一把才发现原来给 MyBatis 写缓存扩展模块那么简单,比 Hibernate 简单 100 倍!!!看来 Hibernate 应该比我更早退役!
再次强调一下:
J2Cache 不是另外一个缓存的造轮子框架,它是有实际的用途的,可最大限度的降低对 Redis 的压力
J2Cache 与 JetCache 不同,后者是封装了不同的缓存框架并提供统一的 API 调用。
在 J2Cache 推出之前,鲜有人提两级缓存框架,现在还蛮火的
别忘了给 https://gitee.com/ld/J2Cache 点个赞 (Star) 哦。
引用来自“itmyhome”的评论
这玩意确定有使用者?引用来自“tylerchen”的评论
以下代码会导致NPE和类型转换错误!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString(), o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o);
return obj;
}
引用来自“红薯”的评论
不会拉, #J2Cache# 确保返回的 Cache 封装对象不为空引用来自“tylerchen”的评论
!!!死磕到底!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString()/*NPE*/, o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()/*NPE*/).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o/*类型转换错误*/);
return obj;
}
引用来自“红薯”的评论
第二个漏改了,第一个传进来的 key 如果是 null ,应该是应用本身的问题。 key 不能是 null 哦引用来自“HarryCU1988”的评论
setId 就不用参数检查了吗。。😎public J2CacheAdapter(String id) {
if (id == null)
throw new IllegalArgumentException("J2CacheAdapter require an id (cache region)");
this.id = id;
}
public void setId(String id) {
this.id = id;
}
引用来自“tylerchen”的评论
以下代码会导致NPE和类型转换错误!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString(), o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o);
return obj;
}
引用来自“红薯”的评论
不会拉, #J2Cache# 确保返回的 Cache 封装对象不为空引用来自“tylerchen”的评论
!!!死磕到底!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString()/*NPE*/, o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()/*NPE*/).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o/*类型转换错误*/);
return obj;
}
public J2CacheAdapter(String id) {
if (id == null)
throw new IllegalArgumentException("J2CacheAdapter require an id (cache region)");
this.id = id;
}
public void setId(String id) {
this.id = id;
}
引用来自“tylerchen”的评论
以下代码会导致NPE和类型转换错误!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString(), o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o);
return obj;
}
引用来自“红薯”的评论
不会拉, #J2Cache# 确保返回的 Cache 封装对象不为空@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString()/*NPE*/, o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()/*NPE*/).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o/*类型转换错误*/);
return obj;
}
引用来自“tylerchen”的评论
以下代码会导致NPE和类型转换错误!!!@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString(), o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o);
return obj;
}
@Override
public void putObject(Object o, Object o1) {
this.cache.set(this.id, o.toString(), o1);
}
@Override
public Object getObject(Object key) {
return this.cache.get(this.id, key.toString()).getValue();
}
@Override
public Object removeObject(Object o) {
Object obj = this.cache.get(this.id, o.toString()).getValue();
if (obj != null)
this.cache.evict(this.id, (String)o);
return obj;
}
引用来自“许雷神”的评论
适配器模式!必须star引用来自“xiaolei123”的评论
我猜下午还有第二个版本出现