博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal教程JfinalUIB 代码笔记 (1)--- jfinal 乐观锁
阅读量:6891 次
发布时间:2019-06-27

本文共 2079 字,大约阅读时间需要 6 分钟。

hot3.png

继承Model类,实现自己的BaseModel,重写save()和update()方法,然后所有的Model都继承自BaseModel

 /**  * 重写save方法  */ public boolean save() {  this.set(getTable().getPrimaryKey(), ToolUtils.getUuidByJdk(true)); // 设置主键值  if(getTable().hasColumnLabel("version")){ // 是否需要乐观锁控制   this.set("version", Long.valueOf(0)); // 初始化乐观锁版本号  }  return super.save(); }
/**  * 重写update方法  */ @SuppressWarnings("unchecked") public boolean update() {  Table table = getTable();  String name = table.getName();  String pk = table.getPrimaryKey();    // 1.数据是否还存在  String sql = new StringBuffer("select version from ").append(name).append(" where ").append(pk).append(" = ? ").toString();  Model
 modelOld = findFirst(sql , getStr("ids"));  if(null == modelOld){ // 数据已经被删除   throw new RuntimeException("数据库中此数据不存在,可能数据已经被删除,请刷新数据后在操作");  }    // 2.乐观锁控制  Set
 modifyFlag = null;  try {   Field field = this.getClass().getSuperclass().getSuperclass().getDeclaredField("modifyFlag");   field.setAccessible(true);   Object object = field.get(this);   if(null != object){    modifyFlag = (Set
) object;   }   field.setAccessible(false);  } catch (NoSuchFieldException | SecurityException e) {   log.error("业务Model类必须继承BaseModel");   e.printStackTrace();   throw new RuntimeException("业务Model类必须继承BaseModel");  } catch (IllegalArgumentException | IllegalAccessException e) {   log.error("BaseModel访问modifyFlag异常");   e.printStackTrace();   throw new RuntimeException("BaseModel访问modifyFlag异常");  }  boolean versionModify = modifyFlag.contains("version");  if(versionModify && getTable().hasColumnLabel("version")){ // 是否需要乐观锁控制   Long versionDB = modelOld.getLong("version"); // 数据库中的版本号   Long versionForm = getLong("version"); // 表单中的版本号   if(!(versionForm > versionDB)){    throw new RuntimeException("表单数据版本号和数据库数据版本号不一致,可能数据已经被其他人修改,请重新编辑");   }  }    return super.update(); }
 /**  * 获取表映射对象  *   * @return  */ public Table getTable() {  return TableMapping.me().getTable(getClass()); }

所有需要乐观锁控制的表都加上version字段,在更新数据的表单页面加上

转载于:https://my.oschina.net/dongcb678/blog/278436

你可能感兴趣的文章
用sersync进行实时同步数据
查看>>
Exchange 2010 OAB无法更新
查看>>
Linux iftop 流量监控工具
查看>>
简单的python程序实现99乘法口诀表
查看>>
Cocos2d-x游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
查看>>
【PPT技巧】让PPT背景音乐仅在播放视频时暂停
查看>>
Ubuntu14.04安装分布式存储sheepdog+zookeeper
查看>>
innodb引擎
查看>>
pandas.to_numeric转化数据为数字型
查看>>
在企业环境下实现禁止使用USB的高安全措施
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
SVN提示文件被锁住以及Unlocker软件的使用
查看>>
MySQL Study案例之--MySQL体系和存储引擎
查看>>
php注入之完全版
查看>>
高效的生产力
查看>>
岁月划过生命线(从0到阿里)
查看>>
七招搞定微信朋友圈营销
查看>>
mysql 查看表
查看>>
Centos5 搭建独立版本库SVN
查看>>
云场景实践研究第6期:游族网络
查看>>