Cómo permitir que Dao herede directamente HibernateTemplate después de la integración SSH
Spring 2.0 agrega soporte para consultas SQL con nombre y también agrega soporte para paginación. En la mayoría de los casos, la mayoría de las operaciones CRUD en objetos DAO se pueden realizar mediante el uso convencional de Hibernate.
CRUD es la operación básica de la base de datos: crear, leer, actualizar, eliminar
métodos comunes de hibernateTemplate: eliminar vacío (entidad de objeto): eliminar la instancia de persistencia especificada eliminarTodo(): eliminar la colección entidad . Entidades de colección): elimina todas las instancias de clases persistentes en la colección find(String queryString): devuelve una colección de instancias basada en una cadena de consulta HQL findByNamedQuery(String queryName): devuelve una colección de instancias basada en una consulta con nombre get(ClassentityClass, ID serializable): basado en la clave principal de una clase de persistencia específica, carga una instancia de esa clase guardar (entidad de objeto): guarda una nueva instancia saveOrUpdate (entidad de objeto): elige guardar o actualizar según el estado de la actualización de la instancia ( Entidad de objeto): elige guardar o actualizar según el estado de la instancia. actualización (Entidad de objeto): seleccione qué instancia guardar o actualizar según el estado de la instancia.
actualización (entidad de objeto): actualiza el estado de en la instancia, la entidad debe persistir setMaxResults(int maxResults): establece el tamaño de la paginaciónHibernateDaoSupport:
Spring proporciona un nuevo proveedor de herramientas para el DAO de Hibernate: HibernateDaoASupport. Esta clase proporciona principalmente los dos métodos siguientes para facilitar la implementación de DAO:
1. public final HibernateTemplate getHibernateTemplate ()
2. public final void setSessionFactory(SessionFactory sessionFactory)
El método setSessionFactory se usa para recibir la inyección de dependencia ApplicationContext de Spring, que puede recibir la instancia de SessionFactory configurada en Spring. El método getHibernateTemplate se usa para obtener más sesiones generadas por SessionFactory y finalmente genera HibernateTeplate para completar el acceso a la base de datos.
Ver esto parece tener cierto sentido. HibernateDaoSupport en realidad no hace mucho. Solo tiene dos métodos, uno es getHibernateTemplate() y el otro es setSessionFacotry(). Al igual que el atributo sessionFactory que configuramos en el archivo de configuración. El método getHibernateTemplate() se usa comúnmente para guardar, eliminar y otras operaciones CRUD básicas.
El código fuente de Spring es el siguiente:
clase abstracta pública HibernateDaoSupport extiende DaoSupport {
HibernateTemplate privado hibernateTemplate;
setSessionFactory público final vacío (SessionFactory sessionFactory) {
this.hibernateTemplate = createHibernateTemplate( sessionFactory);
}
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
devolver nuevo HibernateTemplate(sessionFactory);
}
public final SessionFactory getSessionFactory() {
return (this.this.hibernateTemplate() {
public = null ? this.hibernateTemplate.getSessionFactory() : null);
}
public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = null ?hibernateTemplate = hibernateTemplate;
}
public final HibernateTemplate getHibernateTemplate () {
return hibernateTemplate
} p>
protected final void checkDaoConfig() {
if (this.hibernateTemplate == null) {
throw new IllegalArgumentException ("se requiere sessionFactory o hibernateTemplate") ;
}
}
Sesión final protegida getSession()
lanza DataAccessResourceFailureException, IllegalStateException {
return getSession( this.isAllowCreate());
}
sesión final protegida getSession(boolean enableCreate)
lanza DataAccessResourceFailureE
xception, IllegalStateException {
retorno (!allowCreate?
SessionFactoryUtils.getSession(getSessionFactory(), false):
SessionFactoryUtils.getSession(
getSessionFactory(), false):
This.convertHibernateAccessException(ex);
}
protected final void releaseSession(sesión de sesión) {
SessionFactoryUtils. releaseSession(session, getSessionFactory());
}
Spring proporciona una clase de herramienta para DAO de Hibernate: HibernateDaoASupport. para facilitar la implementación de DAO:
1.p>
1. public final HibernateTemplate getHibernateTemplate ()
2. public final void setSessionFactory (SessionFactory sessionFactory)
El método setSessionFactory se usa para recibir la inyección de dependencia ApplicationContext de Spring, que puede recibir la instancia de SessionFactory configurada en Spring. El método getHibernateTemplate se usa para obtener más SessionFactory para generar Session y finalmente generar HibernateTeplate para completar el acceso a la base de datos. /p>
Cuando se utiliza HibernateTemplate para el acceso a la capa de persistencia, la plantilla no necesita abrir y cerrar la sesión. Solo necesita obtener la referencia de SessionFactory para abrir la sesión y cerrar la sesión después del acceso de persistencia. se completa. Los desarrolladores del programa solo necesitan simplemente completar la lógica requerida para la persistencia. Las operaciones CRUD generales las completa HibernateTemplate.
De hecho, Spring Hibernate tiene los siguientes métodos para acceder a la base de datos:
1. Inject SessionFactory
En el archivo de configuración de Spring, compare el Dao de la inyección. Fábrica de sesiones simple.
Por ejemplo:
lt; bean id="UserInfoDao" class="com.hr2job.dao.impl.UserInfoDaoImpl"gt
lt; nombre ="sessionFactory" ref
lt;property name="sessionFactory" ref="sessionFactory"gt;lt;/propertygt;
lt;/beangt;
Aquí, sessionFacotry no se inyecta en la clase, sino en la sessionFactory heredada de la clase HibernateDaoSupport. Como puede ver en el código fuente anterior. Utilicé esto al escribir programas SSH porque no sabía qué era. La ventaja de esto es que ya no tenemos que preocuparnos por los cierres, si la conexión es exitosa, etc. Lo más importante es que es muy conveniente. Pero la desventaja de esto es que Java solo admite herencia única, por lo que es una pena heredar solo de HibernateDaoSupport. Y no es necesario hacerlo.
2. Inyectar en HibernateTemplate
Este método es esencialmente el mismo que el sessionFacotry anterior, pero con una capa adicional de empaquetado. La ventaja es que las clases en Dao no necesitan heredar. HibernateDaoSuport, ¡y es hora de configurarlo primero! HibernateTemplate:
lt; bean id="hibernateTemplate" class="org.springframework.orm.hibernate3. nombre de propiedad="sessionFactory"gt; lt; ref bean="sessionFactory"/gt; lt;/ propertygt; lt; /beangt;
Es muy conveniente. Lo estoy usando ahora. De hecho, no ha cambiado mucho, excepto que cambié sessionFactroy a hibernatemplate. 3. Inyectar jdbcTemplate
Este método es adecuado para aquellos a quienes no les gustan los métodos de guardado y eliminación de hibernación y les gusta escribir N por sí mismos. A veces las consultas de jdbcTemplate son muy eficientes. puede estar relacionado con la configuración de jdbc de la siguiente manera:
lt; bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"gt; lt; ref bean="dataSource" /gt; lt; /propertygt; lt; /beangt;
Simplemente configure el método jdbctemplate en la clase.
En general, todavía me gusta HibernateTemplate, porque es fácil de usar, no necesita escribir demasiadas declaraciones SQL y no requiere
herencia de clases. simplemente proporcionar un método establecido y luego inyectarlo. Debería haber muchas diferencias.