mybatis-sqlite
来源:互联网 发布:网络语言粗鄙化的原因 编辑:程序博客网 时间:2024/06/03 03:42
最近需要和移动端配置配合,将后台的结果数据生成sqlite数据库传给移动端(因为需要离线查看),所以配置信息的话需要同步存入sqlite。
1 创建和后台一样的表结构
2 做一个拦截器,只需要拦截StatementHandle 就可以了,仅处理增、删、改操作,对于sqlite来说 ,批量插入时 ,需要去掉 from dual(我使用的是oracle),所以插入的时候 还要去掉from dual
3 在mybatis中,配置一个动态数据源,便于切换(可能特殊的需要处理了)及获取
4 这里遇到个问题,就是 我使用的是 sqlite-jdbc 驱动,但是使用最新的版本(3.19.3)及其它新版本时,出现 发布找不到该驱动jar包,但是单元测试又通过的,有点晕~~ 后来找了个低版本(3.7.2)的驱动就可以了 ,不知道高版本做了什么限制。。
好了 这样就可以实现oracle和sqlite同步了!!
@Override public Object intercept(Invocation invocation) throws Throwable { Object[] args = invocation.getArgs(); MetaObject mb = SystemMetaObject.forObject(args[0]); MetaObject mbTarget = SystemMetaObject.forObject(invocation.getTarget()); MappedStatement mappedStatement = (MappedStatement) mbTarget.getValue("delegate.mappedStatement"); MetaObject mbStatement = SystemMetaObject.forObject(invocation.getTarget()); BoundSql boundSql = (BoundSql) mbStatement.getValue("delegate.boundSql"); excutorSqlite(invocation, mappedStatement, boundSql); return invocation.proceed(); } private int excutorSqlite(Invocation invocation, MappedStatement mappedStatement, BoundSql boundSql) throws SQLException { int count = 0; String defaultSql = ""; String sql = defaultSql = boundSql.getSql(); MetaObject boundsqlMb = null; try {//获取sqlite数据源 DataSource sqliteDataSourcce = DynamicDataSource.getSqliteDataSource(); //获取链接 Connection conn = DataSourceUtils.getConnection(sqliteDataSourcce); if (mappedStatement.getSqlCommandType().equals(SqlCommandType.INSERT)) { //新增时去除from dual sql = sql.replaceAll("from dual", ""); boundsqlMb = SystemMetaObject.forObject(boundSql); boundsqlMb.setValue("sql", sql); } PreparedStatement ps = conn.prepareStatement(sql); ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement, boundSql.getParameterObject(), boundSql); parameterHandler.setParameters(ps); count = ps.executeUpdate(); } catch (Exception e) { LogUtil.error("sqlite 执行报错:" + e + "|sql:" + sql); } if (boundsqlMb != null) { boundsqlMb.setValue("sql", defaultSql); } return count; } @Override public Object plugin(Object target) { if (target instanceof StatementHandler) { MetaObject mb = SystemMetaObject.forObject(target); MappedStatement mappedStatement = (MappedStatement) mb.getValue("delegate.mappedStatement"); if (Arrays.asList(SQLITE_SQLCOMMANDTYPE).contains(mappedStatement.getSqlCommandType())) { return Plugin.wrap(target, this); } } return target; }
阅读全文
0 0
- mybatis-sqlite
- Mybatis-SQLite整合
- mybatis sqlite 配置
- Mybatis整合SQLite
- 使用mybatis对SQLite数据库分页操作
- mybatis+springmvc+sqlite一个累心的问题:不在纠结
- myBatis、Sqlite应根据sqlite编译版本选择不同的framework
- SQLite
- SQLite
- SQLite
- SQLite
- SQLite
- sqlite
- sqlite
- SQLite
- SQLite
- sqlite
- SQLite
- Oracle trunc()函数的用法
- undistortPoints opencv
- 在linux上,dmg转换成iso或img文件
- LinuxC编程实战第七章学习总结
- Ajax和XmlHttpRequest对象
- mybatis-sqlite
- Android 监控(检查)SD卡指定目录的变化
- 欢迎使用CSDN-markdown编辑器
- Android编程规范
- Android 闹钟AlarmManager简略使用说明
- 域名解析过程和域名劫持、域名污染
- 暑期集训之Trailing Zeroes (III)
- Android_贝塞尔曲线
- HDU 2612 Find a way 简单BFS