Maison  >  Article  >  Java  >  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

零下一度
零下一度original
2017-07-26 16:39:091473parcourir

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 + "]";}}

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>

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>
<!--


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>

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);}}}

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;}}

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);}}

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:
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