콘솔에서 왜 SQL을 출력합니까?
물론 개발 및 디버깅의 편의성을위한 것입니다.
데이터베이스 관련 작업에 문제가있는 경우 출력 SQL 문을 기반으로 문제를 신속하게 문제 해결할 수 있습니다.
출력 정보 :
[org.mybatis.spring.sqlsessionutils]-새로운 sqlsession을 만들어냅니다
[org.mybatis.spring.sqlsessionutils] -sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@33290f98]은 동기화가 활성화되지 않았기 때문에 동기화에 등록되지 않았습니다.
[org.springframework.jdbc.datasource.datasourceutils]-DataSource에서 JDBC 연결을 페치합니다
[org.mybatis.spring.transaction.springmanagedTransaction] -jdbc 연결 [jdbc : mysql : //rds.aliyuncs.com : 3306/yyyy? useUnicode = true & characterEncoding = utf-8 & zerodatetimebior = convertonull, [email protected], MySQL 커넥터 Java]는 Spring에서 관리하지 않습니다.
[datenumber.pageSelect]-==> 준비 : X.ID, date_format (X.`Date`, '%y%m%d')`datest`, X.befor_num, X.After_num, X.Physician_id, y.department_id, y.clinic_id, y.true_name, y.avatore, y.titale, y.tittle, y.tittle, y.avattle, y. DateNumber X 오른쪽 x.physician_id = y.id에서 물리적 y를 결합하고 (x.`Date`> =? 및 X.`Date` <=?) 여기서 1 = 1 및 y.clinic_id =? X.Date ASC의 주문
[dateNumber.PagesElect]-==> 매개 변수 : 2017-3-28 (String), 2017-4-4 (String), 1 (long)
[DateNumber.PagesElect]-<== Total : 19
출력 내용은 상당히 끔찍합니다. 데이터베이스 연결 문자와 사용자 이름 및 비밀번호가 출력되므로주의하십시오.
그러나 한 가지 나쁜 것은 SQL 문과 매개 변수가 별도로 출력된다는 것입니다. 쿼리 도구로 복사하여 디버그를 끄려면 매개 변수를 직접 채워야합니다.
내 프로젝트 환경
스프링 4.0.2 + 스프링 MVC 4.0.2 + mybatis 3.2.6
방법 1 : 표준 로그 출력을 사용합니다
이 방법은 비교적 간단합니다. MyBatis의 구성 파일을 관련 속성으로 만 구성하면되며 log4j.properties 파일을 넣을 필요가 없습니다.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <setings> < "logimpl" 값 = "stdout_logging"/> </settings> </configuration>
주요 진술 :
<설정 이름 = "logimpl"value = "stdout_logging"/>
MyBatis가 사용 해야하는 로깅 구현을 지정합니다. 이 설정이 존재하지 않으면 로깅 구현이 자동으로 발견됩니다.
방법 2 : log4J 로그 출력을 사용하십시오
1. Spring-Mybatis.xml 파일을 수정할 필요가 없습니다.
2. mybatis.xml에서는 로그 구현으로 log4j를 사용하도록 지정하며 실제로 테스트 할 필요가 없습니다.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd "> configuration> <setings> <rogimpl" "" </settings> </configuration> <!-실제로이 파일을 사용할 수 있는지 테스트 할 수 있습니다->
여기의 값 값은 SLF4J, Apache Commons Logging, Log4J2, Log4J, JDK 로깅 (Log4J2, Log4J, 기타 검증되지 않은) 일 수 있으며 순서대로 검색 될 수 있습니다.
3. Web.xml에서도 구성이 필요합니다
<Leater> <Leater-Class> org.springframework.web.util.log4jconfiglistener </laiseer-class> </laiseer>
또는 다음을 사용하십시오 (테스트되지 않음)
<Leater> <layer-class> org.apache.logging.log4j.web.log4jservletcontextlistener </laiseer-class> </laiseer>
4. 마지막으로 log4j.properties를 구성하십시오
### log4j configuration ##### ### 스프링과 함께이 파일 위치를 web.xml에 지정하고 리스너 #####deudine log4j의 출력 레벨 및 출력 대상을 추가해야합니다 (대상은 이후에 해당 할 수 있고, 부록 1, 부록 Log4J.Rootlogger = jub, 파일, 파일. #--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- log4j.appender.console.threshold = debug ##### 로그 출력 형식을 유연하게 지정할 수 있습니다. 다음 줄은 특정 형식을 지정합니다. ############ 출력 로그 정보가 속한 카테고리는 일반적으로 클래스의 전체 이름입니다.#%m : 코드에 지정된 메시지, 특정 로그 정보가 생성 된 특정 로그 정보#%n : 출력 라인 브레이크 출력, Windows 플랫폼은 "/n"입니다. org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern = [%c]-%m%n #-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When the file size reaches the specified size, a new file is generated log4j.appender.file = org.apache.log4j.rollingfileAppender #log 파일 출력 디렉토리 log4j.appender.file.file = log/tibet.log #Define 최대 파일 크기 log4j.appender.file.maxfilesize = 10MB ## 출력 로그 정보 ### #LOWEST 레벨 LOG4J.APPENDER.file.file. log4j.appender.file.layout = org.apache.log4j.patternlayout log4j.appender.file.layout.conversionpattern = [%d {yy-mm-dd}] [%c]%m%n #----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ sql station part log4j.logger.org.mybatis = debug #log4j.logger.cn.tibet.cas.dao = debug #log4j.logger.org.mybatis.common.jdbc.simpledatasource = debog4j.logger.org.mybatis.common.jdbc.scricttun #log4j.logger.org.mybatis.sqlmap.engine.impl.sqlmapclientdelegate = debug #log4j.logger.java.sql.connection = debug log4j.logger.java.sql = debug log4j.logger.java.sql.statement = debug log4j.logger.java.sql.resultset = debug log4j.logger.java.sql.preparedstatement = debug 두 가지 방법의 비교
1. 표준 로그 출력을 사용한 구성은 간단하지만 Log4J 로그 출력을 사용한 구성은 비교적 복잡합니다.
2. LOG4J는 강력한 기능과 비교적 미세한 제어 세분성을 갖는다.
구성 파일에서 "stdout_logging"으로 지정할 때 실제로 사용되는 로그 구현은 무엇입니까? 아파치 커먼즈 로깅 또는 JDK 로깅?
그들 중 누구도 실제로 System.out.pringln입니다.
2017-09-14에 업데이트되었습니다
일부 친구들은 두 번째 메소드를 구성한 후에 SQL 문을 출력하지 않을 것이라고보고했습니다. log4j.properties 파일에서 :
log4j.appender.console.threshold = 디버그
이 예와 일치합니까?
세부 사항에주의를 기울이십시오. 방금 공부를 시작한 친구는 먼저이 예제에서 제공된 구성을 사용한 다음 개인적인 방식으로 사용자 정의 할 수 있습니다.
또한 위의 구성에 따르면 SQL 문을 벗어난 많은 양의 정보를 출력합니다. 친구가 SQL 문, 매개 변수 및 결과 만 출력하려고 시도했습니다.
여기 감사합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.