2009-08-14 4 views
1

dans mon dao, dans chaque méthode, quand j'appelle jdbctemplate, je devrais appeler avec le nouveau jdbctemplate(). droite? ou obtenir un instant statique de jdbctemplate et réutiliser? que diriez-vous de jpatemplate?jdbctemplate, jpatemplate

Répondre

1

dans mon dao, dans chaque méthode, quand j'appelle jdbctemplate, je devrais appeler avec new jdbctemplate(). droite?

non, vous ne le faites pas. le JdbcTemplace doit être injecté dans votre DAO par configuration. Idem pour JpaTemplate.

+0

@downvoter: veuillez expliquer votre downvote – dfa

1

JdbcTemplate est threadsafe il est donc tout à fait sûr de partager une instance de celui-ci sur l'ensemble de votre application (bien que le partage que le DataSource utilisé pour initialiser le JdbcTemplate peut faire plus de sens). Généralement, une instance (non statique) par classe est suffisante, JdbcTemplate gère les problèmes de threads par lui-même et vous ne rencontrerez jamais de problèmes de concurrence au-delà des verrous de base de données.

2

Pour ajouter aux autres réponses, JdbcTemplate est très léger, et son coût de construction est proche de zéro. Donc, si vous étiez pour en créer un nouveau à chaque opération, il n'y aurait probablement pas d'effets secondaires ou de dégradation significative des performances. La classe est simplement un wrapper comportemental autour de l'API JDBC. Par la même logique, il n'y a aucune raison de faire attention à ne pas avoir un seul objet JdbcTemplate. Il devrait correspondre à n'importe quel design que vous choisissez d'utiliser.

La plupart des DAO dot instancient directement JdbcTemplate. Au lieu de cela, ils sous-classent JdbcDaoSupport, qui gère une instance JdbcTemplate pour vous. Votre sous-classe appelle ensuite getJdbcTemplate() pour récupérer l'instance. Si vous ne sous-classez pas JdbcDaoSupport, créez une instance de JdbcTemplate lorsque votre bean DAO est initialisé et réutilisez-le.

La même chose s'applique aux autres classes de modèles DAO (Hibernate, JPA, etc.).