à l'aide de Printemps JdbcTemplate pour de multiples opérations de base de données
J'aime la simplicité apparente de JdbcTemplate mais je suis un peu confus quant à la façon dont il fonctionne. Il semble que chaque opération (query() ou de mise à jour()) récupère une connexion à partir d'une source de données et le ferme.
Beau, mais comment voulez-vous effectuer plusieurs requêtes SQL au sein de la même connexion?
Je souhaiterez peut-être effectuer plusieurs opérations en séquence (par exemple, SÉLECTIONNEZ, puis à INSÉRER suivie par un commit) ou je souhaiterez peut-être effectuer des requêtes imbriquées (SÉLECTIONNER, puis effectuer une deuxième sélection sur la base des résultats de chaque ligne).
Comment dois-je faire avec JdbcTemplate. Suis-je à l'aide de la classe à droite?
OriginalL'auteur Joel Carranza | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
La réponse correcte ici est "utiliser des transactions". Si vous commencez transaction et d'effectuer plusieurs opérations avec
JdbcTemplate
, chacune de ces opérations sera dans le champ d'application de la transaction, et, par conséquent, sont garantis à utiliser la même connexion.Si vous ne voulez pas à s'impliquer avec les transactions, alors l'alternative est d'utiliser le plus d'opérations primitives sur
JdbcTemplate
, commeexecute(ConnectionCallback action)
, où vous fournir une instance deConnectionCallback
qui est donné uneConnection
, sur lequel vous pouvez ensuite effectuer toutes les opérations que vous choisissez. Bien sûr, mais en faisant cela, vous n'obtenez pasJdbcTemplate
'aider dans les opérations réelles.Transactions sont vraiment très facile au Printemps, vous devriez regarder dans l'aide (voir le lien ci-dessus).
Si vous utilisez le regroupement de connexion, vous n'avez pas à vous soucier de ne pas avoir la même relation entre états?
OriginalL'auteur skaffman
Je suppose que vous voulez des transactions? Si oui, jetez un oeil à Printemps, JdbcTemplate et les Transactions.
Sur une note de côté, je vous conseille de prendre un coup d'oeil à Ibatis. Spring JDBC semble pratique, mais il a un problème majeur: le mappage par défaut des ensembles de résultats pour les objets utilise Printemps des classes, qui est en fait vraiment lent pour le traitement de grands ensembles de résultats. Vous pouvez contourner ce problème en écrivant votre propre ligne mappeurs pour ces requêtes, mais personnellement, je ne veux pas écrire ce genre de passe-partout.
Pour vous donner un exemple de la différence: j'ai eu une requête prendre 50 secondes avec le Printemps réflexion de ligne de base mappeur qui a pris 2 secondes avec une main codé en ligne mappeur.
Aussi, Spring JDBC utilise inline SQL. En Java, c'est assez moche comme Java (ennuyée) n'a pas une bonne multi-ligne de Chaîne de format.
Je suis aussi curieux de ce "mappage par défaut" signifie ici et la façon dont ils utilisent la réflexion. J'ai pensé RowMappers ont été le pain et le beurre de JdbcTemplate.
Le printemps peut carte resultset d'objets par exemple à l'aide de
BeanPropertyRowMapper
classe (vous pouvez google des exemples d'utilisation). Requête Simple, c'est comme :List<MyOrder> orders = jt.query("SELECT * FROM orders WHERE custId=?", new BeanPropertyRowMapper<MyOrders>(MyOrder.class), id);
Et puis vous n'avez pas à emballer votre mise en œuvre deRowMapper<T>
mais au lieu de champs sera associé à la setters de laMyOrder
classe.OriginalL'auteur cletus