iBatis执行sql

qax*_*axi 19 java sql ibatis

有什么方法可以获得iBatis的执行查询吗?我想重用UNION查询的查询.

例如:

<sqlMap namespace="userSQLMap">
   <select id="getUser" resultClass="UserPackage.User">
        SELECT username,
               password 
        FROM table 
        WHERE id=#value#
   </select>
</sqlMap>
Run Code Online (Sandbox Code Playgroud)

当我执行查询时

int id = 1
List<User> userList = queryDAO.executeForObjectList("userSQLMap.getUser",id)
Run Code Online (Sandbox Code Playgroud)

我想得到 SELECT username, password FROM table WHERE id=1

有什么方法可以得到查询吗?

谢谢.

小智 10

显示这些信息是可行的.iBatis使用了一些Logging框架,包括Log4J.
要在类路径中使用Log4Jcreate file log4j.properties.您必须将下一行放在文件中,例如:

log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
    
log4j.logger.com.ibatis=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
Run Code Online (Sandbox Code Playgroud)

有关其他日志记录框架和详细信息,请参阅此链接


vsi*_*ngh 10

将其添加到log4j.xml文件中,您可以在控制台上看到输出.

<logger name="java.sql" additivity="false">
    <level value="debug" />
    <appender-ref ref="console" />
</logger>
Run Code Online (Sandbox Code Playgroud)

您将看到正在传递的参数,正在执行的查询以及查询的输出.


Bla*_*ack 6

Configuration从你那里获取对象SqlSessionFactory,然后:

MappedStatement ms = configuration.getMappedStatement("MyMappedStatementId");
BoundSql boundSql = ms.getBoundSql(parameters); // pass in parameters for the SQL statement
System.out.println("SQL" + boundSql.getSql());
Run Code Online (Sandbox Code Playgroud)

  • 使用这篇文章中的信息调试DefaultSqlSession的selectList(),其中MappedStatement是并使用表达式:ms.getBoundSql(parameter).getSql(); (2认同)

Ale*_*lli 2

大多数 SQL 引擎允许您“记录”执行的所有查询(通常还包括有关查询所用时间、返回结果数量等信息)。您是否有权访问引擎的日志,并且可以配置它以便它记录您需要的所有内容吗?