mybatis-sqlite

最近需要和移动端配置配合,将后台的结果数据生成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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus提供了一个方便的代码生成插件,可以帮助开发者快速生成符合Mybatis-Plus风格的代码。这个插件无需添加依赖,也无需配置模板引擎依赖,只需要简单勾选需要的选项,即可生成包含Controller层、service层、serviceImpl层、dao层、xml文件和实体类的代码。\[2\] 使用这个插件可以极大地简化开发过程,提高效率。它具有以下特性: - 无侵入:只做增强不做改变,引入它不会对现有工程产生影响。 - 强大的CRUD操作:内置通用Mapper和通用Service,通过少量配置即可实现单表大部分CRUD操作,还有强大的条件构造器,满足各类使用需求。 - 支持Lambda形式调用:通过Lambda表达式,方便编写各类查询条件,无需担心字段写错。 - 支持主键自动生成:支持多种主键策略,可自由配置,解决主键问题。 - 支持ActiveRecord模式:支持ActiveRecord形式调用,实体类只需继承Model类即可进行强大的CRUD操作。 - 支持自定义全局通用操作:支持全局通用方法注入,可以在任何地方使用。 - 内置代码生成器:可以快速生成Mapper、Model、Service、Controller层代码,支持模板引擎,还有丰富的自定义配置选项。 - 内置分页插件:基于MyBatis的物理分页,无需关心具体操作,配置好插件后,写分页等同于普通List查询。 - 支持多种数据库:支持MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等多种数据库。 - 内置性能分析插件:可以输出SQL语句以及执行时间,方便开发测试时进行性能分析。 - 内置全局拦截插件:提供全表delete、update操作智能分析阻断,也可以自定义拦截规则,预防误操作。\[3\] 总之,MyBatis-Plus的代码生成插件是一个非常方便的工具,可以帮助开发者快速生成符合Mybatis-Plus风格的代码,简化开发过程,提高效率。 #### 引用[.reference_title] - *1* *2* *3* [MybatisPlus 超好用的idea代码生成插件,及使用详解](https://blog.csdn.net/beibei3321/article/details/124978498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值