Slaapstand 3 met lente

1. Overzicht

Dit artikel gaat over het opzetten Slaapstand 3 met lente - we zullen bekijken hoe we zowel XML- als Java-configuratie kunnen gebruiken om Spring in te stellen met Hibernate 3 en MySQL.

Update: dit artikel is gericht op Hibernate 3. Als u op zoek bent naar de huidige versie van Hibernate, is dit het artikel dat erop is gericht.

2. Java Lente configuratie voor slaapstand 3

Hibernate 3 instellen met Spring en Java-configuratie is eenvoudig:

import java.util.Properties; importeer javax.sql.DataSource; importeer org.apache.tomcat.dbcp.dbcp.BasicDataSource; importeer org.springframework.beans.factory.annotation.Autowired; importeer org.springframework.context.annotation.Bean; importeer org.springframework.context.annotation.ComponentScan; importeer org.springframework.context.annotation.Configuration; importeer org.springframework.context.annotation.PropertySource; importeer org.springframework.core.env.Environment; importeer org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; importeer org.springframework.orm.hibernate3.HibernateTransactionManager; importeer org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; importeer org.springframework.transaction.annotation.EnableTransactionManagement; importeer com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement @PropertySource ({"classpath: persistence-mysql.properties"}) @ComponentScan ({"com.baeldung.spring.persistence"}) openbare klasse PersistenceConfig {@Autowired private Environment env; @Bean openbaar AnnotationSessionFactoryBean sessionFactory () {AnnotationSessionFactoryBean sessionFactory = nieuwe AnnotationSessionFactoryBean (); sessionFactory.setDataSource (restDataSource ()); sessionFactory.setPackagesToScan (nieuwe String [] {"com.baeldung.spring.persistence.model"}); sessionFactory.setHibernateProperties (hibernateProperties ()); return sessionFactory; } @Bean openbare DataSource restDataSource () {BasicDataSource dataSource = nieuwe BasicDataSource (); dataSource.setDriverClassName (env.getProperty ("jdbc.driverClassName")); dataSource.setUrl (env.getProperty ("jdbc.url")); dataSource.setUsername (env.getProperty ("jdbc.user")); dataSource.setPassword (env.getProperty ("jdbc.pass")); retourneer dataSource; } @Bean @Autowired openbare HibernateTransactionManager transactionManager (SessionFactory sessionFactory) {HibernateTransactionManager txManager = nieuwe HibernateTransactionManager (); txManager.setSessionFactory (sessionFactory); terug txManager; } @Bean openbare PersistenceExceptionTranslationPostProcessor exceptionTranslation () {retourneer nieuwe PersistenceExceptionTranslationPostProcessor (); } Eigenschappen hibernateProperties () {retourneer nieuwe eigenschappen () {{setProperty ("hibernate.hbm2ddl.auto", env.getProperty ("hibernate.hbm2ddl.auto")); setProperty ("hibernate.dialect", env.getProperty ("hibernate.dialect")); }}; }}

Vergeleken met de XML-configuratie - hierna beschreven - is er een klein verschil in de manier waarop de ene bean in de configuratie toegang krijgt tot een andere. In XML is er geen verschil tussen wijzend naar een boon of wijzend naar een bonenfabriek die die boon kan maken. Omdat de Java-configuratie type-safe is - rechtstreeks naar de bonenfabriek wijzen is niet langer een optie - moeten we de bonen handmatig uit de bonenfabriek halen:

txManager.setSessionFactory (sessionFactory (). getObject ());

3. XML-springconfiguratie voor slaapstand 3

Evenzo kunnen we opzetten Slaapstand 3 met XML-configuratie ook:

      $ {hibernate.hbm2ddl.auto} $ {hibernate.dialect} 

Vervolgens wordt dit XML-bestand opgestart in de Spring-context met behulp van een @Configuratie klasse:

@Configuration @EnableTransactionManagement @ImportResource ({"classpath: persistenceConfig.xml"}) openbare klasse PersistenceXmlConfig {//}

Voor beide configuratietypen worden de JDBC- en Hibernate-specifieke eigenschappen opgeslagen in een eigenschappenbestand:

# jdbc.X jdbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc: mysql: // localhost: 3306 / spring_hibernate_dev? createDatabaseIfNotExist = true jdbc.user = tutorial jdbc.passuser tutorialmy5ql # hibernate. dialect = org.hibernate.dialect.MySQL5Dialect hibernate.show_sql = false hibernate.hbm2ddl.auto = create-drop

4. Lente, Slaapstand en MySQL

In het bovenstaande voorbeeld wordt MySQL 5 gebruikt als de onderliggende database die is geconfigureerd met Hibernate, maar Hibernate ondersteunt verschillende onderliggende SQL-databases.

4.1. De bestuurder

De naam van de stuurprogrammaklasse wordt geconfigureerd via de jdbc.driverClassName eigendom verstrekt aan de DataSource.

In het bovenstaande voorbeeld is het ingesteld op com.mysql.jdbc.Driver van de mysql-connector-java afhankelijkheid die we hebben gedefinieerd in de pom, aan het begin van het artikel.

4.2. Het dialect

Het dialect wordt geconfigureerd via de slaapstand.dialect eigendom geleverd aan de slaapstand SessionFactory.

In het bovenstaande voorbeeld is dit ingesteld op org.hibernate.dialect.MySQL5Dialect aangezien we MySQL 5 gebruiken als de onderliggende database. Er zijn meerdere andere dialecten die MySQL ondersteunen:

  • org.hibernate.dialect.MySQL5InnoDBDialect - voor MySQL 5.x met de InnoDB-opslagengine
  • org.hibernate.dialect.MySQLDialect - voor MySQL vóór 5.x
  • org.hibernate.dialect.MySQLInnoDBDialect - voor MySQL vóór 5.x met de InnoDB-opslagengine
  • org.hibernate.dialect.MySQLMyISAMDialect - voor alle MySQL-versies met de ISAM-opslagengine

Hibernate ondersteunt SQL-dialecten voor elke ondersteunde database.

5. Gebruik

Op dit punt is Hibernate 3 volledig geconfigureerd met Spring en dat kunnen we injecteer de ruwe HibernateSessionFactory direct wanneer we:

openbare abstracte klasse FooHibernateDAO {@Autowired SessionFactory sessionFactory; ... beschermde sessie getCurrentSession () {return sessionFactory.getCurrentSession (); }}

6. Maven

Om de Spring Persistence-afhankelijkheden aan de pom toe te voegen, zie het Spring with Maven-voorbeeld - we moeten beide definiëren lente-context en lente-orm.

Als we doorgaan met Hibernate 3, zijn de Maven-afhankelijkheden eenvoudig:

 org.hibernate hibernate-core 3.6.10.Final 

Om Hibernate vervolgens het proxymodel te laten gebruiken, hebben we nodig javassist ook:

 org.javassist javassist 3.18.2-GA 

We gaan MySQL gebruiken als onze database voor deze tutorial, dus we hebben ook het volgende nodig:

 mysql mysql-connector-java 5.1.32 runtime 

En tot slot zullen we de Spring-gegevensbronimplementatie niet gebruiken - de DriverManagerDataSource; in plaats daarvan gebruiken we een productieklare oplossing voor verbindingspools - Tomcat JDBC-verbindingspool:

 org.apache.tomcat tomcat-dbcp 7.0.55 

7. Conclusie

In dit voorbeeld we hebben Hibernate 3 geconfigureerd met Spring - zowel met Java- als XML-configuratie. De implementatie van dit eenvoudige project is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.