Maison > Java > javaDidacticiel > Introduction à Hibernate et exemples

Introduction à Hibernate et exemples

零下一度
Libérer: 2017-06-25 13:35:45
original
1698 Les gens l'ont consulté

1. Introduction à Hibernate

Dans de nombreux scénarios, nous n'avons pas besoin d'utiliser JdbcTemplate pour faire fonctionner directement les instructions SQL. À l'heure actuelle, nous pouvons utiliser les outils ORM pour économiser beaucoup. du code et du temps de développement. Les outils ORM peuvent déplacer l'attention du code SQL sujet aux erreurs vers la manière de mettre en œuvre les besoins réels de l'application.

La prise en charge par Spring des frameworks ORM fournit des points d'intégration avec ces frameworks et quelques services supplémentaires :

  • Prend en charge l'intégration des transactions déclaratives Spring ;

  • Gestion transparente des exceptions ;

  • Classe de modèle légère et sécurisée pour les threads

  • Classe de support DAO ;

  • Gestion des ressources.

Hibernate est un framework ORM open source très populaire dans la communauté des développeurs.

2. Instance Spring+Hibernate

1. Créez une table de base de données

mysql pour créer un nouveau magasin de base de données, puis exécutez le SQL suivant. :

1 create table Category (2 Id int not null,3 Name varchar(80) null,4 constraint pk_category primary key (Id)5 );6 7 INSERT INTO category(id,Name) VALUES (1,'女装');8 INSERT INTO category(id,Name) VALUES (2,'美妆');9 INSERT INTO category(id,Name) VALUES (3,'书籍');
Copier après la connexion
db_store.sql

Structure du code

L'IDE I l'utilisation est IdeaIU, via maven Construisez le projet et configurez Spring via XML. La structure du code terminée est :

Introduction à Hibernate et exemples

3. Créez la classe d'entité Catégorie

class Category{
    private int cateId;

    private String cateName;

    //次数省略get,set方法
@Override
    public String toString() {
        return "id="+cateId+" name="+cateName;
    }
}
Copier après la connexion

 

4. .Modifiez pom.xml et introduisez les dépendances pertinentes.

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
    </dependencies>
Copier après la connexion

 

5. Configurer applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/tx ">


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/store"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate/hibernate.cfg.xml"/>
    </bean>

    <tx:annotation-driven/>
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="categoryDao" class="CategoryDao">
        <constructor-arg ref="sessionFactory"></constructor-arg>
    </bean>
</beans>
Copier après la connexion

dataSource est rien de spécial, je ne l'expliquerai plus. Jetez un œil à quelques autres points :

①hibernate sessionFactory :

L'interface principale requise pour utiliser Hibernate est org.hibernate.Session. CRUD de base et autres fonctionnalités d’accès aux données. Grâce à l'interface Session d'Hibernate, le Repository de l'application peut répondre à tous les besoins de persistance. La manière standard d'obtenir un objet Hibernate Session consiste à utiliser la classe d'implémentation de l'interface Hibernate SessionFactory.

Il y a deux propriétés principales définies dans la configuration sessionFactory : dataSource définit la connexion de données et configLocation définit le chemin d'accès au fichier de configuration de mise en veille prolongée.

②Transaction

Si le fonctionnement de la base de données prend en charge les transactions, vous devez configurer

6.configuration d'hibernation

①hibernate.cfg.xml

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>
        <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <mapping resource="hibernate/Category.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Copier après la connexion

 

②Category.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="Category" table="Category">
        <id name="cateId" column="id">
            <generator class="native"/>
        </id>
        <property name="cateName" column="name"/>
    </class>
</hibernate-mapping>
Copier après la connexion

 

7. Classe d'implémentation d'accès aux données CategoryDao

Si la méthode veut prendre en charge les transactions, elle doit être annotée @Transactional.

public class CategoryDao {
    private SessionFactory sessionFactory;

    public CategoryDao(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    @Transactional
    public void save(Category category) {
        currentSession().save(category);
    }

    @Transactional
    public void update(Category category){
        currentSession().update(category);
    }

    @Transactional
    public void delete(int id) {
        Query query = currentSession().createSQLQuery("DELETE FROM category WHERE Id=::ID");
        query.setInteger("::ID", id);
        query.executeUpdate();
    }

    @Transactional
    public int count() {
        return getAll().size();
    }

    @Transactional
    public Category getById(int id) {
        Criteria criteria=currentSession().createCriteria(Category.class);
        criteria.add(Restrictions.eq("id",id));
        return (Category) criteria.uniqueResult();
    }

    @Transactional
    public List<Category> getAll() {
        return currentSession().createCriteria(Category.class).list();
    }
}
Copier après la connexion

 

8. Test

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class testCategoryDao {
    @Autowired
    private CategoryDao categoryDao;

    @Test
    public void testAdd() {
        Category category = new Category();
        category.setCateId(4);
        category.setCateName("母婴");

        categoryDao.save(category);
    }

    @Test
    public void testUpdate() {
        Category category = new Category();
        category.setCateId(4);
        category.setCateName("男装");

        categoryDao.update(category);
    }


    @Test
    public void testGetById() {
        int id = 4;
        Category category = categoryDao.getById(id);

        if(category==null){
            System.out.println("not exist");
        }else {
            System.out.println(category.toString());
        }
    }

    @Test
    public void testGetAll() {
        List<Category> categories = categoryDao.getAll();
        for (Category item : categories) {
            System.out.println(item);
        }
    }

    @Test
    public void testCount() {
        int count = categoryDao.count();
        System.out.println(count);
    }

    @Test
    public void testDelete() {
        int id = 4;
        categoryDao.delete(id);
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal