`
Col.Man
  • 浏览: 18315 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ibatis获取执行sql以及参数值

阅读更多
一、问题

  在用户使用系统过程中,同一查询条件在一小时前和一小时后的结果是不一样的,在一小时后查出的数据在一小时内未发现任何改变。此过程有录屏为证。

二、分析

  为查证问题在每次查询的时候记录ibatis产生的sql,在事后根据oracle 缓存进行查询,比对未查询到数据的sql 和查询到数据的sql,以及缓存中的数据变化。

三、实现


    public String getExecSql(String sqlId,EXAMPLE example) {
 
      
        SqlMapClientImpl sqlMapClient = (SqlMapClientImpl) this.getSqlMapClient();
        String sqlString = "";
        try {
            MappedStatement stmt = sqlMapClient.getMappedStatement(sqlId);
            if (stmt != null) {
                Sql sql = stmt.getSql();
                SessionScope sessionScope = new SessionScope();
                // sessionScope.setSqlMapClient(sqlMapClient);
                sessionScope.incrementRequestStackDepth();
                StatementScope statementScope = new StatementScope(sessionScope);
                stmt.initRequest(statementScope);
                stmt.getCacheKey(statementScope, example);
                sqlString = sql.getSql(statementScope, example);
                Object[] parameters =
                        sql.getParameterMap(statementScope, example).getParameterObjectValues(statementScope, example);
                DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                for (Object parameter : parameters) {
                    if ("java.lang.String".equals(parameter.getClass().getName()))
                        sqlString = sqlString.replaceFirst("\\?", "'" + parameter.toString() + "'");
                    else if ("java.util.Date".equals(parameter.getClass().getName()))
                        sqlString =
                                sqlString.replaceFirst("\\?", "to_date('" + sdf.format(parameter)
                                        + "','yyyy-mm-dd hh24:mi:ss')");
                    else
                        sqlString = sqlString.replaceFirst("\\?", parameter.toString());
                }
            }
        } catch (Exception e) {
            logger.error("getExecSql:" + e.getMessage());
        }
        return sqlString;
    
    }


获取sql,记录到日志表中,事后查询。
分享到:
评论

相关推荐

    iBATIS实战

    12.3.2 CacheController的放入、获取以及清除操作 223 12.3.3 注册CacheController以供使用 224 12.4 配置iBATIS不支持的DataSource 224 12.5 定制事务管理 225 12.5.1 理解TransactionConfig接口 226 12.5.2 理解...

    ibatis 开发指南(pdf)

    具体的SQL 需要程序员编写,然后通过映 射配置文件,将SQL 所需的参数,以及返回的结果字段映射到指定POJO 。 使用ibatis 提供的ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的Java 对象, 这一层与...

    ibatis 开发指南

    具体的SQL 需要程序员编写,然后通过映 射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过...

    SpringBoot项目整合MyBatis连接数据库

    在我们日常的开发过程中,肯定不可避免的会使用到数据库以及SQL语句。比如,刚开始学习Java的...它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。因为MyBatis可以使用简单的XML或注解来配置和映射原生信息

    40道MyBatis面试题带答案(很全)

    MyBatis是一款优秀的持久层框架,用于支持普通SQL查询、存储过程和高级映射。它消除了几乎所有的JDBC...此外,MyBatis还支持自定义SQL、存储过程以及高级映射,免除了大部分的JDBC代码以及设置参数和获取结果集的工作。

    AppFramework_V1.0

    <br>IBatisNet是一个轻量级ORMap工具,它把所有的SQL脚本以模板的方式集中到若干个XML配置文件里,用反射的方式向把C#类实体对象属性与SQL模板的参数绑定,动态生成参数化的SQL语句发送给数据库执行,查询的结果...

    AppFramework_V1.0_New

    <br>IBatisNet是一个轻量级ORMap工具,它把所有的SQL脚本以模板的方式集中到若干个XML配置文件里,用反射的方式向把C#类实体对象属性与SQL模板的参数绑定,动态生成参数化的SQL语句发送给数据库执行,查询的结果...

    springmybatis

    3. 在User.xml 文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等. 开始测试 在test_src 源码目录下建立com.yihaomen.test这个package,并建立测试类Test: 程序代码 程序代码 package ...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    <br>IBatisNet是一个轻量级ORMap工具,它把所有的SQL脚本以模板的方式集中到若干个XML配置文件里,用反射的方式向把C#类实体对象属性与SQL模板的参数绑定,动态生成参数化的SQL语句发送给数据库执行,查询的结果...

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring中文帮助文档

    11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 ...

    Spring API

    11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring面试题

    ☆ Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 ☆ Spring Web 模块:...

Global site tag (gtag.js) - Google Analytics