Table des matières
Travail de préparation
Diagramme de structure du programme
couche pojo classe d'entité
Fichier de configuration de base hibernate.cfg.xml
Fichier de mappage Person.hbm.xml
Classe d'usine de session
La couche DAO encapsule les méthodes d'opérations sur les données
Classe de test TestPerson
Maison Java javaDidacticiel Utilisez la mise en veille prolongée pour implémenter des opérations sur la table de données de personne

Utilisez la mise en veille prolongée pour implémenter des opérations sur la table de données de personne

Jul 26, 2017 pm 04:39 PM
hibernate 简单

Hibernate est un framework ORM open source. Comme son nom l'indique, son idée principale est ORM (Object Relational Mapping), qui peut exploiter les informations de la base de données via des objets. On dit que les développeurs ne sont pas très familiers avec le SQL des bases de données. au début. Cela contribue également à la puissance d'Hibernate. Il n'est pas nécessaire que les développeurs soient familiers avec les instructions SQL pour faire fonctionner la base de données. Hibernate peut générer automatiquement des instructions SQL et les exécuter automatiquement.

L'utilisation d'hibernate permet aux développeurs d'utiliser entièrement la pensée orientée objet pour faire fonctionner la base de données, donc la démonstration suivante ne contiendra pas d'instruction SQL. S'il y en a, veuillez la traiter comme si je n'avais pas dit cela !

Cet article utilise la mise en veille prolongée pour implémenter des opérations de base simples d'ajout, de suppression, de modification et d'interrogation sur une table de données de personne.

Travail de préparation

Environnement : win7+eclipse

Toolkit : package hibernate, téléchargeable Dans cet exemple, la version 4. ;

Package de pilotes de connexion à la base de données, dans cet exemple, mysql est utilisé

Diagramme de structure du programme

couche pojo classe d'entité

package demo.pojo;
public class Person {private Integer id;private String name;private String gender;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";}}
Copier après la connexion

Fichier de configuration de base hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 以下四行分别为:数据库驱动类、Drivermanager获取连接的参数URL、用户名、密码  -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1/web?characterEcoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 设置方言,hibernate会根据数据库的类型相应生成SQL语句 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 控制台显示生成的sql语句,默认为false -->
<property name="show_sql">true</property>
<!-- 映射配置源文件的位置 -->
<mapping resource="demo/pojo/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Copier après la connexion

Fichier de mappage Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name是实体类全名,table为数据表名 -->
<class name="demo.pojo.Person" table="Person">
<id name="id" column="id">
<!-- 主键生成方式,native是让hibernate自动识别 -->
<generator class="native"></generator>
</id>
<!--
Copier après la connexion


Remarque :
0. La valeur du nom est le nom de l'attribut dans la classe d'entité et la colonne est le nom du champ dans la table de données
1. Lorsque le nom de l'attribut dans la classe d'entité est le même que le nom du champ de la table de données correspondante ; , la colonne suivante peut être omise, la mise en veille prolongée correspondra automatiquement, comme l'âge ci-dessous
2. Au contraire, lorsque le nom de l'attribut dans la classe d'entité est différent du nom de champ de la table de données correspondante, les deux éléments doit être écrit, comme le genre et le sexe ci-dessous
- ->

<property name="name" column="name"></property>
<property name="gender" column="sex"></property>
<property name="age"></property>
</class>
</hibernate-mapping>
Copier après la connexion

Classe d'usine de session

package demo.util;
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateSessionFactory {private static SessionFactory factory;private static ThreadLocal<Session> thread = new ThreadLocal<Session>();private static String path = "hibernate.cfg.xml";private static Configuration config = new Configuration();static {config.configure(path);ServiceRegistry service = new ServiceRegistryBuilder()//定义一个服务注册机.applySettings(config.getProperties()).buildServiceRegistry();factory = config.buildSessionFactory(service);//创建Session工厂类}/** * 从hibernate的session工厂类里创建一个session * @return * */public static Session getSession() {Session session = thread.get();if(session == null || !session.isOpen()) {session = factory.openSession();thread.set(session);}return session;}public static void closeSession() {Session session = thread.get();if(session != null && session.isOpen()) {session.close();thread.set(null);}}}
Copier après la connexion

La couche DAO encapsule les méthodes d'opérations sur les données

package demo.dao;
import java.io.Serializable;import org.hibernate.Session;import org.hibernate.Transaction;import demo.pojo.Person;import demo.util.HibernateSessionFactory;
public class PersonDaoImpl {//增删改查,此处以增为例public boolean add(Person p) {Session session = HibernateSessionFactory.getSession();//创建SessionTransaction trans = session.beginTransaction();//开启事务try {Serializable id = session.save(p);//添加记录并获取主键值System.out.println(id+"为获取的主键值");//控制台查看主键值trans.commit();//提交事务return true;} catch (Exception e) {trans.rollback();//获取异常,则事务回滚} finally {HibernateSessionFactory.closeSession();//关闭Session}return false;}}
Copier après la connexion

Classe de test TestPerson

package demo.test;
import org.junit.Test;import demo.dao.PersonDaoImpl;import demo.pojo.Person;
public class TestPerson {@Testpublic void testAdd() {//创建一个人类对象Person p = new Person();p.setName("张三");p.setGender("男");p.setAge(18);//创建dao层类对象并调用添加方法PersonDaoImpl dao = new PersonDaoImpl();dao.add(p);}}
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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le moyen le plus simple d'interroger le numéro de série du disque dur Le moyen le plus simple d'interroger le numéro de série du disque dur Feb 26, 2024 pm 02:24 PM

Le moyen le plus simple d'interroger le numéro de série du disque dur

Comment rédiger un générateur simple de rapports sur les performances des étudiants en utilisant Java ? Comment rédiger un générateur simple de rapports sur les performances des étudiants en utilisant Java ? Nov 03, 2023 pm 02:57 PM

Comment rédiger un générateur simple de rapports sur les performances des étudiants en utilisant Java ?

Comment écrire un système de réservation en ligne simple via PHP Comment écrire un système de réservation en ligne simple via PHP Sep 26, 2023 pm 09:55 PM

Comment écrire un système de réservation en ligne simple via PHP

Démarrage rapide : utilisez les fonctions du langage Go pour implémenter un système de gestion de bibliothèque simple Démarrage rapide : utilisez les fonctions du langage Go pour implémenter un système de gestion de bibliothèque simple Jul 30, 2023 am 09:18 AM

Démarrage rapide : utilisez les fonctions du langage Go pour implémenter un système de gestion de bibliothèque simple

Comment utiliser PHP pour développer des fonctions simples de gestion de fichiers Comment utiliser PHP pour développer des fonctions simples de gestion de fichiers Sep 20, 2023 pm 01:09 PM

Comment utiliser PHP pour développer des fonctions simples de gestion de fichiers

Comment écrire un système simple de recommandation musicale en C++ ? Comment écrire un système simple de recommandation musicale en C++ ? Nov 03, 2023 pm 06:45 PM

Comment écrire un système simple de recommandation musicale en C++ ?

Comment intégrer Hibernate dans le projet SpringBoot Comment intégrer Hibernate dans le projet SpringBoot May 18, 2023 am 09:49 AM

Comment intégrer Hibernate dans le projet SpringBoot

Écrire un programme de calculatrice simple en C/C++ Écrire un programme de calculatrice simple en C/C++ Sep 02, 2023 pm 10:49 PM

Écrire un programme de calculatrice simple en C/C++

See all articles