zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    读写锁机制原理
    jvm
    (WPF) 再议binding:点击User Control时,User Control变换颜色或做其他的处理。
    (WF)
    (C# ) 解析XML。
    (C#) 调用执行批处理文件
    (WPF, Service) 删除注册表中的USB Enum值.
    (C#) 文件操作
    (C#) Parse xml 时, 返回的node值总是null。
    (PowerShell) Managing Windows Registry
  • 原文地址:https://www.cnblogs.com/zhang-bo/p/6544977.html
Copyright © 2011-2022 走看看