La plupart de notre processus de programmation utilise d'excellents cadres ORM, tels que MyBatis, Hibernate, SpringJDBC, mais ceux-ci sont inséparables à partir du support de JDBC basé sur les données. Bien qu'il soit très pratique à utiliser, il est vraiment difficile de rencontrer certains problèmes, comme le problème qui m'a troublé de ne pas dormir bien toute la nuit. JDBC génère des données d'exécution. Jetons un coup d'œil aux détails.
Habituellement, nous utilisons le framework MyBatis pour faire fonctionner les bases de données relationnelles, et la base est les opérations CRUD. Actuellement, l'entreprise utilise la base de données SQLServer, mais j'ai un problème lorsque j'effectue l'opération de mise à jour. La situation spécifique est la suivante:
Contenu Mapper.xml:
<update id = "UpdatedriveRinfoByuccode" ParameterType = "com.sypro.earth.model.driverInfo"> Update d_driverInfo <set> <if test = "drivername! = null"> drivername = # {drivername, jdbcType = nvarchar}, </ if> </set> <où> ucode = # {ucode, javatype = string, jdbcType = varchar, typeHandler = com.sypro.eth.typehandler.exampleTypeHandler} </wue> </pumed> Le code de test est le suivant:
@TestPublic void test8 () {driverInfo driverInfo = new DriverInfo (); driverInfo.setDrivername ("wang xiaoer"); driverInfo.setucocode ("TY888888"); DriverInfomymapper.upDateDriverInfobyucode (DriverInfo);} Je met à jour le nom du pilote en fonction du numéro de travail, mais les instructions SQL détectées à l'aide de SQL Server pour surveiller sont à peu près les suivantes:
(@ P0 nvarchar (4000), @ p1 nvarchar (4000)) Mise à jour d_driverinfoset drivername = @ p0, où ucode = @ p1
Bien sûr, je souhaite publier ma chaîne de connexion de la base de données ici:
JDBC /: SQLSERVER /: //127.0.0.1; Databasename / = new;
Vous pouvez vérifier le plan d'exécution pour le moment:
//www.vevb.com/article/90264.htm
On peut voir qu'il est très lent, mais en modifiant un peu la chaîne de connexion:
jdbc /: sqlServer /: //127.0.0.1; databasename / = new; sendStringParametersAsUnicode = false
Puis exécutez le code de test et vous pouvez voir
(@ P0 varchar (8000), @ p1 varchar (8000)) Mise à jour d_driverInfoset drivername = @ p0, où ucode = @ p1
La vitesse d'exécution des mises à jour par lots a été considérablement améliorée. Quant aux raisons pour lesquelles les modifications et les avantages et les inconvénients des modifications, veuillez vous référer au document officiel du site Web ci-dessous.
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
Ce qui précède est le problème de l'instruction d'exécution générée par MyBatis via le pilote de données JDBC qui vous a été présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!