`
Col.Man
  • 浏览: 19020 次
  • 性别: 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的动态SQL语句

    - `<isGreaterEqual>`:用于判断一个值是否大于等于另一个值,如果是则执行相应的SQL语句。 - `<isLessThan>`:用于判断一个值是否小于另一个值,如果是则执行相应的SQL语句。 - `<isLessEqual>`:用于判断一个值...

    在ibatis日志信息中打印SQL语句的方法(个人总结)

    至此,你应该能在控制台或指定的日志文件中看到iBatis执行的SQL语句,包括参数信息。 除了默认的日志实现外,MyBatis也支持其他日志实现,例如SLF4J,配置方法类似。只需将`logImpl`设置为对应的值,如`LOG4J`、`...

    ibatis教程 输入参数详解

    部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索...

    SQL参数自动填充工具

    总的来说,这个“SQL参数自动填充工具”是一个针对iBatis框架,用于自动处理和填充SQL语句中参数的实用工具,尤其适用于需要频繁调试SQL日志的开发者。通过使用这个工具,开发者可以从繁琐的手动参数替换工作中解放...

    sql语句中用问号代替参数

    ### SQL参数化查询的概念 参数化查询允许将变量值插入到SQL语句中,而不是直接将它们拼接到字符串中。问号是大多数数据库系统用来表示这些参数的占位符。例如,以下是一个简单的参数化SELECT语句: ```sql SELECT *...

    ibatis2.0+sqlserver2005环境搭建

    创建一个测试类,如`TestIbatis.java`,并使用Ibatis API执行SQL查询: ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis....

    根据表生成ibatis的sqlMap文件

    通过JDBC,我们可以执行SQL查询,获取数据库元数据(如表结构),从而实现自动化生成SQLMap文件。 生成SQLMap文件的过程通常包括以下步骤: 1. **建立数据库连接**:使用JDBC的`DriverManager.getConnection()`...

    iBATIS-SqlMaps,ibatis映射文件

    还有ExecutorFactory,它负责创建执行SQL的实例。配置文件通常会包含多个SqlMap的引用,这些SqlMap对应于不同的数据库表或者业务对象。 SqlMap.xml文件则是具体的SQL映射文件,它是iBATIS的核心,定义了SQL语句、...

    Ibatis常用sql语句

    Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让你直接编写原生态SQL,可以严格控制SQL执行性能,灵活度极高,尤其适合对SQL有特殊需求的项目。 ### SQL语句详解 #### 1. 删除...

    ibatis(mybatis)的学习工程 带详细注释

    `SqlSession`则代表与数据库的一次会话,通过它执行SQL语句并获取结果。 5. 实体类与结果映射:在Java源代码中,你会找到与数据库表对应的实体类,如`User.java`,这些类定义了数据库表字段的Java表示。MyBatis通过...

    iBATIS-SqlMaps开发指南

    iBATIS-SqlMaps开发指南是一本专注于介绍如何使用iBATIS框架进行SqlMap开发的专业教程。iBATIS,一个由Apache基金会维护的开源Java库,最初由James Roper开发,旨在提供一种将SQL查询与Java应用程序解耦的机制。在...

    ibatis api,ibatis文档,ibatis说明文档

    2. SqlSession:代表一个数据库会话,可以在其中执行SQL命令并获取结果。SqlSession支持事务管理,包括开启、提交和回滚。 3. Mapper:Ibatis中的Mapper接口是与数据库交互的桥梁。开发者可以定义自己的Mapper接口...

    ibatis实现原理解析

    4. 参数绑定:Ibatis将方法的参数值与SQL语句中的占位符进行匹配和绑定。 5. 数据库交互:Ibatis执行SQL语句,与数据库进行交互。 6. 结果映射:将数据库返回的结果自动映射到Java对象,无需手动处理ResultSet。 ...

    ibatis基础教学文档

    2. 执行映射的Statement,iBATIS创建PreparedStatement,填充参数,执行SQL并从结果集中构建返回对象。 3. 返回结果,对于更新操作,返回受影响的行数;对于查询,返回对象或对象集合。 基础知识点包括: 1. ...

    Ibatis

    2.2 SQL 执行:通过 SqlSession 接口,开发者可以获取 SqlSession 对象,执行 SQL 映射文件中的 SQL 语句。SqlSession 提供了 CRUD 方法,如 `selectOne()`, `selectList()`, `insert()`, `update()` 和 `delete()`...

    iBATIS-SqlMaps-2 PDF文档资料(日文)

    ja.pdf》可能包含以下内容:基础安装和配置、SqlMap配置详解、数据源的设置、SQL映射文件的编写、动态SQL的使用、事务管理、结果集映射、参数映射、自定义类型处理器、异常处理以及如何在实际项目中集成iBATIS等。...

    ibatis源码

    它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。iBatis提供了一个SQL地图文件,可以将SQL与Java代码分离,使得开发者能够专注于编写高质量的SQL语句,同时保持良好的可维护性。 在iBatis的源码分析中,...

    iBATIS-SqlMaps-2_cn.rar

    3. 动态SQL:iBATIS支持动态构建SQL语句,可以根据传入的参数灵活地调整查询条件。这在处理条件复杂的查询时非常有用,避免了编写大量硬编码的SQL语句。 4. 事务管理:iBATIS提供了事务管理功能,可以在应用级别...

    ibatis包

    SqlSessionFactory是整个Ibatis的核心,负责创建SqlSession对象,而SqlSession则是执行SQL和获取结果的接口。 2. **Mapper XML文件**:每个Mapper对应一个数据库表,其中包含了SQL查询、插入、更新和删除语句。通过...

Global site tag (gtag.js) - Google Analytics