当前位置:首页 » 编程语言 » 获取mybatissql语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

获取mybatissql语句

发布时间: 2023-04-15 13:45:19

1. 请教Mybatis中如何在程序中获取Mapper中定义的sql语句

把mybatis3.2的源码下载之后,把里面PooledDataSource类的log输出冲丛部散携樱分,换成log.warn之后,重新打jar包,放到项目中,隐举日志级别改为info,如:

Java代码
log4j.rootLogger=info, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=../logs/service.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

2. 请教Mybatis中如何在程序中获取Mapper中定义的SQL语句

明知弯

sqlSessionFactory.getConfiguration().getMappedStatement("com..ResourceDao.save").getBoundSql(null).getSql()

com..ResourceDao为namespace

save为id

激闷猛戚

3. springmvc+mybatis 如何获取sql语句

在web.xml配置文件中加咐蚂入Log4j的配置,部分配置文件如下:

<!--Log4j配置-->
<context-param>
<衡衫埋param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<!-- 扫描spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/塌激application-*.xml</param-value>
</context-param>

<!-- 监听器 -->
<listener>
<listener-class>com.hanvon.iface.web.listener.WebAppEventListener</listener-class>
</listener>
.......

4. 请教Mybatis中如何在程序中获取Mapper中定义的SQL语句

我把mybatis3.2的源码下载之后,把里面PooledDataSource类的毕州log输出部分,换成log.warn之后,重新打jar包,放到项目中,日志级别改为info,如:

Java代棚羡码
log4j.rootLogger=info, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=../logs/service.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

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.java.sql.Connection = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug

此手和蔽时,info级别能够输出warn级别的日志,我的日志显示如下:

Java代码
[service] 2013-04-19 10:30:57,982 - org.apache.ibatis.datasource.pooled.PooledDataSource -0 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[service] 2013-04-19 10:30:57,985 - org.apache.ibatis.datasource.pooled.PooledDataSource -3 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[service] 2013-04-19 10:30:57,986 - org.apache.ibatis.datasource.pooled.PooledDataSource -4 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[service] 2013-04-19 10:30:57,996 - org.apache.ibatis.datasource.pooled.PooledDataSource -14 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
[service] 2013-04-19 10:30:59,025 - org.apache.ibatis.datasource.pooled.PooledDataSource -1043 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 22323092.
[service] 2013-04-19 10:30:59,076 - org.apache.ibatis.datasource.pooled.PooledDataSource -1094 [main] WARN org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 22323092 to pool.

很明显,这是显示warn的日志信息了。说明mybatis3只是打印了debug级别的日志。

5. 请教Mybatis中如何在程序中获取Mapper中定义的SQL语句

<mappernamespace="AccountMapper">
<updateid="updateLoginTime"parameterType="int">
<![CDATA[
updatesys_accountsetlogin_date=now(),updatedate=now()whereid=#{accountId}
]]>
</update>
</mapper>

举例如上面的xml定义的Mapper,在代码中可以通过AccountMapper.updateLoginTime获取到update sys_account set login_date = now(), updatedate = now() where id = #{accountId}这行sql

6. 怎么获取mybatis运行的sql语句

在项目中,使用的是mybatis3.0.5,但没有采用其提供的DAO层接口映射的策略,而且在进行多种属性联合查找时,需要底层提供通用的解决方案,所以需要mybatis直接执行sql语句,各个Impl均可调用,减少了在每个mybatis文件中配置符合当前对象的select查询。。
(在mybatis中,需要通过传递对象,在select中判断对象属性是否为空进行where语句的拼凑,对后期的维护工作带来不小的考验,所以采用直接执行sql策略)
先说一说配置时,遇到的异常:

Xml代码
<select id="findRecords" parameterType="String" resultMap="orderTypeResultMap">
${sql}
</select>
这样配置时,会出现:there no getter sql in Java.lang.String 的异常

所以考虑:用一个适配器,将sql作为属性加入其中
首先:

Xml代码
<typeAlias alias="sqladapter" type="com.zj.logistics.util.SQLAdapter" />
其次:

Java代码
public class SQLAdapter {
String sql;

public SQLAdapter(String sql) {
this.sql = sql;
}

public String getSql() {
return sql;
}

public void setSql(String sql) {
this.sql = sql;
}
}
最后:

Xml代码
<select id="findRecords" parameterType="SQLAdapter" resultMap="orderTypeResultMap">
${sql}
</select>
注意,不要忘记在调用该select方法时,用new SqlAdapter("自己写的sql语句")作为参数哦。。。

搞定。。

真能折腾人的,这个直接写 value 不就可以了?

<select id="findRecords" parameterType="String" resultMap="orderTypeResultMap">
${value}
</select>

7. mybatis怎么获取生成的sql语句

最常用的 log4j.properties 来实现。
log4j.properties 内容如下:
log4j.rootCategory=info, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:/my_log.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
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.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout
有人在网上说不能用 slf4j.jar ,这个说法应该是错误的, slf4j 只是提供了很多接口,可以供很多日志系统用,并不是具体的解决方案,我的jar 包用到
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
log4j-1.2.15.jar
貌似版本比较老,但可以使用,可以参考一下。
通过这种方式mybatis 就可以在控制台打印出sql语句,并且也可以写到日志文件中去。但是还没有format sql, 我也在研究,不过目前没进展,应该mybatis 不支持吧。

8. 请教Mybatis中如何在程序中获取Mapper中定义的SQL语句

可以用对应Mapper类,里面的方法名是对应的sql语句的ID名,这个可以去调用;还有一种,就是不用Mapper类,可以直接用xml的文件名.id名获取的方式,这个方式要有像SqlSessionTemplate这样的类,提前定义好方法获取方式,然后调用就可以了

9. java通过反射拿到mybatis中的sql语句并操作怎么用什么时候用

操作。具体的步骤如下:

  • 获取 MyBatis 中的 MappedStatement 对象。可以通过 SqlSession 的 getConfiguration() 方法获取 Configuration 对象,然后再通过 Configuration 对象的 getMappedStatement() 方法获取 MappedStatement 对象。

  • 从 MappedStatement 对象中获取 BoundSql 对象,即 SQL 语句绑定的参数对象。

  • 从 BoundSql 对象中获取 SQL 语句字符串。可以通过调用 getSql() 方法获取 SQL 语句字符串。

  • 对 SQL 语句进行相应的操作。例如,可以对 SQL 语句进行修改、输出等操作。

  • Java 通过反射获取 MyBatis 中的 SQL 语句的代码示例兆皮锋:

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

// 获取 MappedStatement 对象

MappedStatement mappedStatement = sqlSession.getConfiguration().getMappedStatement("com.example.mapper.selectUser"握并);

// 获取 BoundSql 对象

BoundSql boundSql = mappedStatement.getBoundSql(paramObject);

// 获取 SQL 语句字符串

String sql = boundSql.getSql();

// 对 SQL 语句进行相应的操作

// ...

} finally {

sqlSession.close();

}

需要注意的是,在使用反射获族晌取 SQL 语句时,要注意保护用户隐私和安全,以免发生 SQL 注入等问题。

10. Mybatis源码解析(1) 如何获得SQL语句

笔者只能说会使用Mybtis,并没有具体研究过源码,站在一个使用者的角度记录解决的问题。
跳过大部分源码,从一个功能点开始入手。

以 Select 操作为例凳侍,研究如何获取经过 Mybatis 中 动态语句 转换后的的 SQL语句
我们这里不涉及复杂的过程原理(如:读取配置文件、Mapper代理等( 我也不懂 ))掘察,只说明一下具体流程。

发现studentMapper被MapperProxy实现。

好奇的同学肯定会问studentMapper是如何创建MapperProxy实例的呢?

一路跟随瞎点。会发现一个配置类,里面东西很多,目前只看和Mapper有关系。

我们继续下一步

到此关于Mapper的运行过程已经分析完了,下面继续分析SelectOne过程。

selectOne 其实只是 selectList 取第一个元素(这点是没有想到的)。

源码解析,这还是第一次写这类文章,确实这些框架的原理,并没有研究过只是知道一点概念,Mapper动态代理之类的。网上的博客从大方向出发,框架设计、设计模式枣散吵之类的,对于我这种基础薄弱的人看的云里雾里。我准备从一个一个功能开始初步了解、研究此类框架原理。
参考 https://blog.csdn.net/luanlouis/article/details/40422941