Hibernate框架以及搭建一个Hibernate环境

ORM概念:对象关系映射

O:object  对象  R:Realtion: 关系  M:Mapping:映射 

Hibernate与ORM的关系: Hibernate是ORM的实现

Hibernate:基于持久层的框架(数据的访问层使用)

搭建一个Hibernate环境步骤:

1.引入Jar文件

  --->:required文件下的所有包(必须要的包):

  --->:连接数据库的包

2.写

对象:(domain)[Student.java]以及

对象的映射:domain.hbm.xml[Student.hbm.xml]

3.src/hibernate.cfg.xml  主配置文件

  --->数据库连接配置

  --->加载所用的映射(*.hbm.xml)

具体代码实现:

①对象模型:domain:

public class Student {
    private Long id;
    private String name;
    private Integer age;}

对象的映射:Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 类和表的映射配置文件 hibernate-mapping: 映射文件的根节点 -->
<!-- name为对象的全限定名称    table为在数据库中与之相对应的表 -->
    <class name="com.gxxy.domain.Student" table="student">
        <!--
         id 表中的主键
         name="id"   id为对象的属性
         column="s_id"  s_id为数据库表中的字段 
         -->
        <id name="id" column="s_id">
            <generator class="native"/>
        </id>
        <!-- 
         property 为表中的其他字段
         name="对象的属性"   column="数据库表中的字段"  
         -->
        <property name="name" column="s_name"/>
        <property name="age" column="s_age"/>
    </class>
</hibernate-mapping>

②:src目录下的hibernate.cfg.xml  主配置文件

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--#hibernate.dialect   org.hibernate.dialect.MySQLDialect 
    #hibernate.dialect   org.hibernate.dialect.MySQLInnoDBDialect 
    #hibernate.dialect   org.hibernate.dialect.MySQLMyISAMDialect 
    #hibernate.connection.driver_class   com.mysql.jdbc.Driver 
    #hibernate.connection.url 
    jdbc:mysql:///test #hibernate.connection.username gavin 
    #hibernate.connection.password 
    hibernate.dialect org.hibernate.dialect.HSQLDialect -->
    <!--Hibernate配置文件
    1.配置文件的文件名我们都会按照默认的命名:hibernate.cfg.xml
    2. hibernate-configuration;hibernate文件的根节点
    3.session-factory:Session工厂,相当于JDBC中的DataSource
     -->
<hibernate-configuration>
    <session-factory>
    <!-- 设置连接数据库的四大参数 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql:///db_hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">******</property>
        <!-- 在控制台打印Hibernate自动生成的SQL语句 -->
        <property name="show_sql">true</property>
        <!-- 导入映射文件 -->
        <mapping resource="com/gxxy/domain/Students.hbm.xml" />

    </session-factory>
</hibernate-configuration>

③:具体实现类的代码:(增/删/改/查)

StudentOperateIMPL.java

package com.gxxy.dao.imp;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

import com.gxxy.dao.StudentDAO;
import com.gxxy.domain.Student;
import com.gxxy.utils.HibernateUtils;
@SuppressWarnings("all")
public class StudentOperateIMPL implements StudentDAO {
    /**
     * 添加一个学生
     */
    public void save(Student st) {
        /*
        Save方法的执行流程:
       1. 新建一个Configuration对象
       2. 利用方法[Configuration.configure()]加载`hibernate.cfg.xml`文件 3.根据hibernate.cfg.xml中的连接数据库的信息(className, URL, username,password)连接数据库 并配置相关的property属性
       4. 加载解析映射文件,把映射文件中的信息保存在Configuration对象中
       5. 根据config创建SessionFactory对象,并创建session对象
*/ // ①创建一个Configuration对象,利用创建的这个对象调用configure()方法,加载hibernate.cfg.xml文件 Configuration config = new Configuration().configure(); // ②获取session工厂创建的session Session session2 = config.buildSessionFactory().openSession(); // ③开始事务 session2.beginTransaction(); // ④保存对象 session2.save(st); // ⑤提交事务 session2.getTransaction().commit(); // ⑥关闭资源 session2.close(); } /** * 删除一个学生 */ public void delete(Student st) { Session session = HibernateUtils.getSession(); session.beginTransaction(); session.delete(st); ; session.getTransaction().commit(); session.close(); } /** * 更新学生信息 */ public void update(Student st) { Session session = HibernateUtils.getSession(); session.beginTransaction(); session.update(st); session.getTransaction().commit(); session.close(); } /** * 获取一个学生的信息 */ public Student get(Student st) { Configuration config = new Configuration().configure(); Session session = config.buildSessionFactory().openSession(); Student student = (Student) session.get(st.getClass(), st.getId()); session.close(); return student; } /** * 获取所有学生的信息 */ public List<?> list() { Session session = HibernateUtils.getSession(); return session.createQuery("FROM Student").list(); } }

以上的做法每调用一个方法就会new一个SessionFactory对象,这样就会降低性能,所以以下代码对其进行优化

public class HibernateUtils {
    private HibernateUtils() {
    }

    private static SessionFactory session = null;
    static {
        session = new Configuration().configure().buildSessionFactory();
    }

    public static Session getSession() {
        return session.openSession();
    }
}
原文地址:https://www.cnblogs.com/zhang-bo/p/6544977.html