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