Mybatis之拦截器--获取执行SQL实现多客户端数据同步

本文介绍了如何在Mybatis中利用拦截器获取客户端执行的SQL语句,以便于在客户端数据库和服务器数据库之间进行数据同步,确保在多客户端环境下数据的一致性。通过拦截StatementHandler的update方法,获取并保存SQL,然后在服务器端按顺序执行这些SQL以实现数据汇总。
摘要由CSDN通过智能技术生成

最近的一个项目是将J2EE环境打包安装在客户端(使用 nwjs + NSIS 制作安装包)运行, 所有的业务操作在客户端完成, 数据存储在客户端数据库中. 服务器端数据库汇总各客户端的数据进行分析. 其中客户端ORM使用Mybatis. 通过Mybatis拦截器获取所有在执行的SQL语句, 定期同步至服务器.

本文通过在客户端拦截SQL的操作介绍Mybatis拦截器的使用方法.

1. 项目需求

客户分店较多且比较分散, 部分店内网络不稳定, 客户要求每个分店在无网络的情况下也能正常使用系统, 同时所有店面数据需要进行汇总分析. 综合客户的需求, 项目架构如下:

13465705-d5ce49ed469c27c8.png!web

将WEB项目及其运行环境通过NSIS制作安装包在各分店进行安装, 每个分店是一个独立的WEB服务, 这样就保证店内在无网络(有局域网,无法访问互联网)的情况下也可以正常使用系统. 此时每个分店的数据库保存自己店内的运营数据, 各店之间的数据相互隔离.

但运营方无法分析所有店面的汇总数据(如商品整体销售情况等), 因此需要将每个店面的数据定期同步至服务器的数据库中.

由于店内可能无网络(无网时不能受数据同步影响,系统需正常运行), 实时同步方案被排除.

为保证数据库安全性, 服务器数据库不能对外暴露, 使用数据库的同步机制方案被排除.

部分业务需要记录数据变化日志(数据从1到0又到1, 需记录过程), 增量同步方案被排除.

最终采用了将客户端所有更新(增,删,改)的SQL按照执行顺序保存至数据库中, 定期同步并在服务器的数据库按照顺序执行SQL, 以此来保证服务器数据库的数据是各客户端数据的汇总.

2. 解决方案

项目采用Mybatis, Mapper 中定义SQL时可以使用Mybatis的标签及参数标识符, Mybatis会解析标签替换参数生成最终的SQL在数据库中执行, 而我们需要的是最终在数据库中执行的SQL.

Mybatis中SQL的写法:

INSERT INTO atd681_mybatis_test ( dv ) VALUES ( #{dv})复制代码

需要同步至服务器执行的SQL:

INSERTINTOatd681_mybatis_test (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值