¿Por qué emitir SQL en la consola?
Por supuesto, es para la conveniencia del desarrollo y la depuración.
Si hay un problema con una operación relacionada con la base de datos, podemos solucionar rápidamente el problema en función de la instrucción SQL de salida.
Información de salida:
[org.mybatis.spring.sqlsessionutils] -creating una nueva sqlsession
[org.mybatis.spring.sqlsessionutils] -sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@33290f98] no estaba registrada para la sincronización porque la sincronización no es activa
[org.springframework.jdbc.datasource.datasourceutils] -fetching JDBC Conexión desde DataSource
[org.mybatis.spring.transaction.springmanagedtransaction] -jdbc conexión [jdbc: mysql: //rds.aliyunc.com: 3306/yyyy? UseUnicode = true & caracteresCoding = UTF-8 y ZeroDateTiTimeBehavior = Convertonull, ConverttonulL, Nombre de [email protected], MySQL Connector Java] no se administrará por primavera
[DatEnumber.pagesElect]-==> Preparación: Seleccionar x.id, date_format (x.`date`, '%y%m%d') `datestr`, x.borfor_num, x.after_num, x.physician_id, y.department_id, y.clinic_id, y.true_neM datEnumber x derecho unión física y en x.physician_id = y.id y (x.`date`> =? y x.`date` <=?) ¿Dónde 1 = 1 e y.clinic_id =? Orden de X.Date ASC
[DatEnumber.PagesElect]-==> Parámetros: 2017-3-28 (cadena), 2017-4-4 (cadena), 1 (largo)
[DatEnumber.pagesElect]-<== Total: 19
El contenido de salida es bastante terrible. Los caracteres de conexión de la base de datos y el nombre de usuario y la contraseña se emiten, así que tenga cuidado.
Sin embargo, una cosa es mala es que las declaraciones y parámetros SQL se emiten por separado. Si desea copiarlos en la herramienta de consulta para depurar, debe completar los parámetros usted mismo, lo cual es más problemático.
El entorno de mi proyecto
Primavera 4.0.2 + Spring MVC 4.0.2 + mybatis 3.2.6
Método 1: Use la salida de registro estándar
Este método es relativamente simple. Solo necesita configurar el archivo de configuración de MyBatis con propiedades relevantes, y no necesita colocar un archivo log4j.properties.
<? xml versión = "1.0" encoding = "utf-8"?> < value = "stdout_logging"/> </etenchings> </figuration>
Declaraciones clave:
<setting name = "logimpl" value = "stdout_logging"/>
Especifica qué implementación de registro debe usar myBatis. Si esta configuración no existe, las implementaciones de registro se descubren automáticamente.
Método 2: Use la salida del registro log4j
1. El archivo Spring-Mybatis.xml no es necesario modificar;
2. En mybatis.xml, especifique para usar log4j como implementación de registro, que no necesito probar realmente.
<? xml versión = "1.0" encoding = "utf-8"?> < value = "log4j"/> </etnettings> </figuration> <!-De hecho, puede probar si este archivo está disponible->
Los valores de valor aquí pueden ser Slf4j, Apache Commons Logging, Log4J2, Log4j, JDK Registro (excepto LOG4J2, LOG4J, Otros no verificados), y se buscará en orden.
3. La configuración también se requiere en Web.xml
<Oyerer> <Oyerer-class> org.springframework.web.util.log4jconfiglistener </oyer-class> </oyente>
O use lo siguiente (no probado)
<Oyerer> <Oyerer-class> org.apache.logging.log4j.web.log4jservletContextListener </yearer-class> </oyente>
4. Finalmente configurar log4j.properties
### Log4j Configuración #### ### En combinación con Spring, debe especificar esta ubicación de archivo en Web.xml y agregar un oyente #### #define el nivel de salida y el destino de salida de log4j (el destino se puede personalizar y el consentimiento correspondiente al posterior)#[nivel], appendername1, appendername2 log4j.rootlogger = debug, lo que considera)#[nivel], appendername1, appendername2 log4j.rootlegger = debug, lo posterior). #--------------------------------------------------------------------------------------------------------------------------------------------------- log4j.appender.console.threshold = Debug ##### Puede especificar de manera flexible el formato de salida de registro. La siguiente línea especifica el formato específico. ##########. log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- When the file size alcanza el tamaño especificado, se genera un nuevo archivo log4j.appender.file = org.apache.log4j.rollingFileApeppender #log Archivo de salida Director de salida Log4j.appender.file.file = log/tibet.log #define el tamaño máximo de archivo log4j.appender.file.maxfileSye = 10mb ### Log de la salida de la salida###LoWest Información##LoWest log4j.appender.file.threshold = error log4j.appender.file.layout = org.apache.log4j.patternlayout log4j.appender.file.layout.conversionPattern = [%p] [%d {yy-mm-dd}] [%c]%m%n #--------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------- Visualización de la declaración de la declaración SQL log4j.logger.org.mybatis = debug #log4j.logger.cn.tibet.cas.dao = debug #log4j.logger.org.mybatis.common.jdbc.simpledataSource = debug #log4j.logger.org.mybatis.common.jdbc.scriptrunner = debug #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 Comparación de las dos formas
1. La configuración utilizando la salida de registro estándar es simple, mientras que la configuración utilizando la salida del registro log4j es relativamente compleja;
2. LOG4J tiene funciones poderosas y granularidad de control relativamente fino;
Cuando se especifica como "stdout_logging" en el archivo de configuración, ¿qué implementación del registro se usa realmente? Apache Commons Registro o registro JDK?
Ninguno de ellos, en realidad es System.out.pringln.
Actualizado el 2017-09-14
Algunos amigos han informado que no emitirán declaraciones SQL después de configurar el segundo método. Tenga en cuenta que en el archivo log4j.properties:
log4j.appender.console.threshold = debug
¿Es consistente con este ejemplo?
Preste atención a los detalles. Los amigos que recién comienzan a estudiar pueden usar primero la configuración proporcionada en este ejemplo y luego personalizarla de manera personal.
Además, según la configuración anterior, generaré una gran cantidad de información fuera de las declaraciones SQL. Un amigo intentó emitir solo declaraciones SQL, parámetros y resultados.
Gracias aquí y comparte contigo:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.