Hibernate必知必会——Hibernate工程搭建

Maven依赖

maven的依赖,首先需要有hibernate的核心包和连接数据库MySQL的数据库驱动,再者就是打印日志的log4j的依赖包

<dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

新建maven工程的结构

这里写图片描述

hibernate配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/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</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="com/hibernate/pojo/Department.hbm.xml"/>
        <mapping resource="com/hibernate/pojo/Employee.hbm.xml"/>
        <mapping resource="com/hibernate/pojo/News.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
  1. connection.driver_class:属性配置是数据库驱动的完整类路径
  2. connection.url:数据库的地址信息
  3. connection.username:数据库用户名称
  4. connection.password:数据库密码
  5. show_sql:是否在打印日志的时候将执行的数据库执行的sql
  6. format_sql;是否在打印sql的时候格式化sql
  7. dialect:数据库方言,hibernate支持多种数据库,添加数据库方言能够在执行的时候使用到该数据的独有特性。
  8. hbm2ddl.auto:这项属性的取值有create,create-drop,update,validate,含义分别是create:每次应用启动都会重新的新建数据表,这样会把之前的数据给删除,然后新建表。create-drop:每次sessionFactory的开启和关闭数据表会新建和删除。update:第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。validate:每次加载hibernate时,验证创建数据库表结构,如果不匹配则会抛出异常。
  9. mapping:则是将实体类的配置文件导入进来。

实体类的配置文件

实体类的配置文件,可以使用hibernate的插件来生成。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Aug 4, 2018 9:34:52 AM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.hibernate.pojo.Department" table="DEPARTMENT">
        <id name="id" type="long">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="deptName" type="java.lang.String">
            <column name="DEPTNAME" />
        </property>
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Aug 4, 2018 9:34:52 AM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.hibernate.pojo.Employee" table="EMPLOYEE">
        <id name="id" type="long">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="firstName" type="java.lang.String">
            <column name="FIRSTNAME" />
        </property>
        <property name="salary" type="double">
            <column name="SALARY" />
        </property>
        <many-to-one name="department" class="com.hibernate.pojo.Department" fetch="join">
            <column name="DEPARTMENT" />
        </many-to-one>
    </class>
</hibernate-mapping>

主应用程序

主要是对SessionFactory的获取,这里我是讲这个获取的动作封装成了一个Util,SessionFactory是线程安全的,但是Session和Transaction不是线程安全的,所以在多线程的环境中不要将Session和Transaction设置成共享变量。

package com.hibernate.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static SessionFactory sessionFactory;

    static {
        Configuration configuration = new Configuration();
        configuration.configure();
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
        builder = builder.applySettings(configuration.getProperties());
        sessionFactory = configuration.buildSessionFactory(builder.build());
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void closeSessionFactory() {
        sessionFactory.close();
    }
}

执行

package com.hibernate.application;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.hibernate.pojo.Department;
import com.hibernate.pojo.Employee;
import com.hibernate.util.HibernateUtil;

public class App1 {

    public static void main(String[] args) {
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.getTransaction().begin();
        Department department = new Department();
        department.setDeptName("development");
        session.save(department);
        System.out.println("department id is" + department.getId());
        Employee employee = new Employee();
        employee.setFirstName("yogesh");
        employee.setSalary(50000);
        employee.setDepartment(department);
        session.save(employee);
        System.out.println("Employee saved id: " + employee.getId());
        session.getTransaction().commit();
        session.close();
        HibernateUtil.closeSessionFactory();
    }
}

猜你喜欢

转载自blog.csdn.net/u010871004/article/details/81430138