波总,跟您请教个问题代码如下^_^//:
1、服务层代码:
/**
* 保存
* @param log
* @return
*/
public boolean save(SLog log) {
if (null == log) {
log = new SLog();
}
if (dao.put(log).save()) {
if (!sl.isEmpty(log.getId())) {
CacheKit.remove(SLog.CacheName.NAME, log.getId());
} else {
CacheKit.remove(SLog.CacheName.NAME, SLog.CacheKey.KEY);
}
return true;
}
return false;
}2、控制层代码:
if (1 == fn) {
Resource resource = matchRecordLogUrl(request);
if (null != resource) {
SLog sLog = new SLog();
int uid = controller.getCookieToInt(Const.Co._USER, 1);
String username = "游客";
if (!sl.isEmpty(uid)) {
username = UserService.me.findById(uid).getName();
}
sLog.setUsername(username);
sLog.setName(resource.getName());
sLog.setUrl(resource.getUrl());
sLog.setType(1);
sLog.setIp(request.getRemoteAddr());
sLog.setInfo("成功!");
sLog.setStatus(fn);
sLog.setCreateAt(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
LogService.me.save(sLog);
}
}备注:
(1)、数据库是mysql库,数据库主键已经设置自动增长,数据保存时主键不自增问题。
(2)、参数传递是javabean模式,也就是说在做参数传递时,传的是javabean 的 getxx或setxx的这种形式。
项目:JFinal
dao 是 static 声明的全局共享的东西,不同线程在使用它的时候,数据是共享的,那么你第一次 dao.put 进去东西,第二再使用的时候与第一次会混乱,如果是多线程并发使用,数据是乱窜
所以 jfinal 最佳实践已经明确明说了,要将 Model 中的 dao 彻底删掉,避免这样的误用
删掉以后,查询的时候可以 new Xxx().find(sql) 这样就永远没有线程安全问题了