當前位置:首頁 » 編程語言 » idea獲取mybatis的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

idea獲取mybatis的sql

發布時間: 2022-06-22 18:51:34

Ⅰ 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 不支持吧。

Ⅱ 怎麼獲取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>

Ⅲ 如何在mybatis中調試查看生成的sql語句

mybatis的源碼中查看生成的sql語句,參考執行以下代碼即可。具體代碼如下:把裡面PooledDataSource類的log輸出部分,換成log.warn之後,重新打jar包,放到項目中,日誌級別改為info,如:log4j.rootLogger=info,stdout,Rlog4j.appender.std

Ⅳ 如何讓mybatis列印出執行的sql

mybatis默認使用log4j,當有self4j這個日誌jar包存在時會無法列印sql,請移除或者在工程啟動時顯示設置mybatis使用的日誌類:
log4j.logger.org.apache.ibatis=debug,stdout log4j.logger.java.sql=debug,stdout
這樣有時可能卻不是個可行的辦法,原因在於不可能移除self4j包,因為其他依賴包必須依賴這個包。 mybatis有如下方法來手動選擇日誌類,調用後成功列印日誌 如果引用了slf4j的包,並且要使用log4j需要加入slf4j-log4j12的包,如果沒有加入slf4j-log4j12的包是無法列印sql的。。具體log4j文件如下:

log4j.rootCategory=info, stdout , R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.Conversion
Pattern=[QC] %p [%t] %C.%M(%L) | %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\report.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

現在重啟tomcat,執行一條語句看看,sql是不是都出來了

Ⅳ 請教Mybatis中如何在程序中獲取Mapper中定義的SQL語句

可以用對應Mapper類,裡面的方法名是對應的sql語句的ID名,這個可以去調用;還有一種,就是不用Mapper類,可以直接用xml的文件名.id名獲取的方式,這個方式要有像SqlSessionTemplate這樣的類,提前定義好方法獲取方式,然後調用就可以了

Ⅵ 怎麼列印mybatis的sql語句

MyBatis自己內部使用的是Log4j,但實際上支持用戶使用各種Log技術。如果配置正確的話,也就是啟用debug級別即可列印所有的MyBatis的語句。比如,在我的web程序中,使用logback,maven依賴如下:


<!--log-begin-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>0.9.27</version>
</dependency>
<!--log-end-->

Ⅶ 請教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

Ⅷ 如何獲取mybatis中xml的sql到前台

在log4j.properties 中加上這行代碼

###顯示SQL語句部分
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

Ⅸ JAVA使用mybatis執行sql腳本,怎麼獲取sql腳本的查詢結果

<selectid="DAO介面方法名稱"parameterType="參數類型"resultType="返回結果類型">
select*from表where。。。
</select>

resultType 可以是任意Object對象,如果多條數據,這這個方法返回的是List<Object?>,

如果確認是單條數據,可以直接 Object? ***(**); 。


沒有封裝成對象時,默認返回的是List<Map<欄位名稱String,列值Object>>這樣的數據。

Dao介面:
List<Map<String,Object>>list(Integerid);
SQL:
<selectid="list"parameterType="Integer"resultType="Map">
select*fromaaa
<where>
<iftest="null!=id">
id&gt;#{id}
</if>
</where>
</select>
以上示例中表示查詢id>某個數值的所有結果,返回類型為MAP


執行腳本後沒有返回結果的吧,看ScriptRunner源碼,沒有提供任何返回結果的。

privatevoidexecuteStatement(Stringcommand)throwsSQLException,UnsupportedEncodingException{
booleanhasResults=false;
Statementstatement=connection.createStatement();
statement.setEscapeProcessing(escapeProcessing);
Stringsql=command;
if(removeCRs)
sql=sql.replaceAll(" "," ");
if(stopOnError){
hasResults=statement.execute(sql);
}else{
try{
hasResults=statement.execute(sql);
}catch(SQLExceptione){
Stringmessage="Errorexecuting:"+command+".Cause:"+e;
printlnError(message);
}
}
printResults(statement,hasResults);
try{
statement.close();
}catch(Exceptione){
//
}
}

...

有結果時,最後調用了這個方法列印出來而已。
privatevoidprint(Objecto){
if(logWriter!=null){
logWriter.print(o);
logWriter.flush();
}
}

你可以調用
publicvoidsetLogWriter(PrintWriterlogWriter){
this.logWriter=logWriter;
}
傳入你自己的Writer。

Ⅹ java使用mybatis執行sql腳本,怎麼獲取sql腳本的結果

<select id="DAO介面方法名稱" parameterType="參數類型" resultType="返回結果類型">
select * from 表 where 。。。
</select>

resultType 可以是任意Object對象,如果多條數據,這這個方法返回的是List<Object?>,
如果確認是單條數據,可以直接 Object? ***(**); 。

沒有封裝成對象時,默認返回的是List<Map<欄位名稱String,列值Object>>這樣的數據。

Dao介面:
List<Map<String,Object>> list(Integer id);
SQL:
<select id="list" parameterType="Integer" resultType="Map">
select * from aaa
<where>
<if test="null!=id">
id >#{id}