yanwanglol

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装, 它将POJO与数据库表建立映射关系,是一个全自动的orm框架。

hibernate可以自动生成SQL语句,自动执行, 使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合, 既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是, Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。(来自百度百科)

这个工程对MySQL数据库的操作是通过测试类进行的,hibernate的连接数据库的基础是JDBC技术,但相比与JDBC更好的体现了Java面向对象的特点,我们对一张数据表的操作直接改变为对对象的操作,将表的每一列变换为实体对象的属性,每一行表数据就是实体类的一个实例。只需要在Mysql建立相应的数据库,当我们第一次启动测试类的时候,hibernate会动态地在数据库建立表。在配置文件中<property name="hbm2ddl.auto">update</property>的作用是检测每次启动时检查表是否存在,若存在则继续使用,若不存在则新建表。

在使用之前下载hibernate相关的jar包和连接Mysql数据库的驱动jar包。

这次实验对数据库的增删改查只能通过访问Mysql数据库使用sql语句查询修改结果,下次将会分享hibernate与Java web工程结合,在jsp页面实现对数据库的增删改查。

特点:

  Hibernate是一个面向对象操作数据库的框架,是基于JDBC开发的。

  Hibernate使得我们对数据库的操作完全面向对象

  Hibernate是连接java应用和数据库的中间件

三要素:

  • 配置文件 hibernate.cfg.xml
  • 映射文件 Person.hbm.xml
  • 持久化类 Person.java

hibernate.cfg.xml源码:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <!-- 用于描述数据库的链接 -->
  <session-factory>
    <!-- 配置驱动 -->
    <property name="connection.driver_class">
      com.mysql.jdbc.Driver
    </property>
    <property name="connection.url">
      jdbc:mysql://localhost:3306/hibernate_person
    </property>
    <property name="connection.username">root</property>
    <property name="connection.password">123</property>
    <property name="dialect">
      org.hibernate.dialect.MySQLDialect
    </property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">update</property>
    <mapping resource="domain/Person.hbm.xml" />
  </session-factory>
</hibernate-configuration>

Person.hbm.xml源码:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  <hibernate-mapping>
    <!-- class是用来描述持续化类的 -->
    <!-- name是类的位置,table是表名 -->
    <class name="domain.Person" table="person" catalog="hibernate_person">
      <!-- id是主键 -->
      <id name="pid" type="java.lang.Integer">
        <column name="pid" />
        <generator class="increment" />
      </id>
    <property name="pname" type="java.lang.String">
      <column name="pname" length="20" />
    </property>
    <property name="psex" type="java.lang.String">
      <column name="psex" length="5"/>
    </property>
    <property name="page" type="java.lang.Integer">
      <column name="page" length="10"/>
    </property>
  </class>
</hibernate-mapping>

Person.java源码:

package domain;

import java.io.Serializable;  public class Person implements Serializable {

    private int pid;// 标识属性
    private String pname;
    private String psex;
    private int page;
    public int getPid() {
      return pid;
    }
    public void setPid(int pid) {
      this.pid = pid;
    }
    public String getPname() {
      return pname;
    }
    public void setPname(String pname) {
      this.pname = pname;
    }
    public String getPsex() {
      return psex;
    }
    public void setPsex(String psex) {
      this.psex = psex;
    }
    public int getPage() {
      return page;
    }
    public void setPage(int page) {
      this.page = page;
    }
}

测试类:

package test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import domain.Person;

public class DoPerson {
  public void addPerson(Person person1){
    String name = person1.getPname();
    String sex = person1.getPsex();
    int age = person1.getPage();
  Configuration configuration = new Configuration();
   //加载配置文件
  configuration.configure();
  //采用了工厂模式创建sessionFactory
  SessionFactory sessionfactory = configuration.buildSessionFactory();
  Session session = sessionfactory.openSession();
  Transaction transaction = session.beginTransaction();
  Person person = new Person();
  person.setPname(name);
  person.setPsex(sex);
  person.setPage(age);
  session.save(person);
  transaction.commit();
  session.close();
  }
public void DeletePerson(Person person2){
  int deleteId=person2.getPid();
  Configuration configuration = new Configuration();
  //加载配置文件
  configuration.configure();
  //采用了工厂模式创建sessionFactory
  SessionFactory sessionfactory = configuration.buildSessionFactory();
  Session session = sessionfactory.openSession();
  Transaction transaction = session.beginTransaction();
  Person person = (Person)session.get(Person.class, deleteId);
  session.delete(person);
  transaction.commit();
  session.close();
 }
public void UpdatePerson(Person person3,int age){
  int deleteId=person3.getPid();
  Configuration configuration = new Configuration();
  //加载配置文件
  configuration.configure();
  //采用了工厂模式创建sessionFactory
  SessionFactory sessionfactory = configuration.buildSessionFactory();
  Session session = sessionfactory.openSession();
  Transaction transaction = session.beginTransaction();
  Person person = (Person)session.get(Person.class, deleteId);
  person.setPage(age);
  session.save(person);
  transaction.commit();
  session.close();
}
public List<Person> SelectPerson(){
  Configuration configuration = new Configuration();
  //加载配置文件
  configuration.configure();
  //采用了工厂模式创建sessionFactory
  SessionFactory sessionfactory = configuration.buildSessionFactory();
  Session session = sessionfactory.openSession();
  Transaction transaction = session.beginTransaction();
  List<Person> personList = session.createQuery("from Person").list();
  return personList;
  }
}

我的工程路径如图:

工作原理

                    Configuration configuration = new Configuration();------加载配置文件

                    configuration.configure();------读取并解析hibernate.cfg.xml配置文件

                    SessionFactory sessionfactory = configuration.buildSessionFactory();------采用了工厂模式创建sessionFactory

                    Session session = sessionfactory.openSession();------得到session

                    Transaction transaction = session.beginTransaction();------开启事务

                    Person person = new Person();------创建对象

                    person.setPname(name);------对对象进行操作

                    session.save(person);------保存对象

                    transaction.commit();------提交事务

                    session.close();------关闭Session

分类:

技术点:

相关文章:

  • 2021-11-15
  • 2021-06-28
  • 2021-10-25
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2021-06-08
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案