La mayor parte de nuestro proceso de programación utiliza excelentes marcos ORM, como MyBatis, Hibernate, SpringJDBC, pero estos son inseparables del soporte de JDBC basado en datos. Aunque es muy conveniente de usar, es realmente difícil encontrar algunos problemas, como el problema que me ha preocupado no dormir bien toda la noche. JDBC genera datos de ejecución. Echemos un vistazo a los detalles.
Por lo general, usamos el marco MyBatis para operar bases de datos relacionales, y la básica son las operaciones CRUD. Actualmente, la compañía está utilizando la base de datos SQLServer, pero tengo un problema cuando realizo la operación de actualización. La situación específica es la siguiente:
Contenido mapper.xml:
<Update id = "UpdatedRiverInfobyucode" Parametertype = "com.sypro.earth.model.driverinfo"> update d_driverinfo <set> <if test = "Drivername! = Null"> Drivername = #{Drivername, jdbctype = nvarchar}, </if> </set> <where> ucode = #{ucode, javatype = string, jdbctype = varchar, typeHandler = com.sypro.earth.typehandler.exameMpeTypeHandler} </where> </update> El código de prueba es el siguiente:
@TestPublic Void test8 () {DriverInfo DriverInfo = new DriverInfo (); DriverInfo.SetDrivername ("Wang Xiaoer"); DriverInfo.Setucode ("Ty8888888"); DriverInfomyMapper.UpdatedRiverinfobyucode (DriverInfo);} Simplemente actualizo el nombre del controlador de acuerdo con el número de trabajo, pero las declaraciones SQL detectadas usando SQL Server para monitorear son más o menos como sigue:
(@P0 nvarchar (4000),@p1 nvarchar (4000)) Actualizar d_driverinfoset drivername =@p0, donde ucode =@p1
Por supuesto, quiero publicar mi cadena de conexión de base de datos aquí:
jdbc/: sqlserver/: //127.0.0.1; databasename/= new;
Puede verificar el plan de ejecución en este momento:
//www.vevb.com/article/90264.htm
Se puede ver que es muy lento, pero modificando un poco la cadena de conexión:
jdbc/: sqlserver/: //127.0.0.1; databaseName/= new; sendStringParametersAsunicode = falso
Luego ejecute el código de prueba y puede ver
(@P0 Varchar (8000),@P1 Varchar (8000)) Actualizar D_DRIVERINFOSET DRIVERNAME =@P0, donde UCode =@P1
La velocidad de ejecución de las actualizaciones por lotes se ha mejorado significativamente. En cuanto a por qué los cambios y los pros y los contras de los cambios, consulte el documento oficial del sitio web a continuación.
https://technet.microsoft.com/zh-cn/library/ms378857%28sql.90%29.aspx
https://technet.microsoft.com/zh-cn/library/ms378988%28v=sql.90%29.aspx
http://d.hatena.ne.jp/gnarl/20110706/1309945379
Lo anterior es el problema de la declaración de ejecución generado por MyBatis a través del controlador de datos JDBC introducido por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!