一、Hibernate简介
Hibernate是一个开源的对象/关系映射(ORM)框架,它对JDBC进行了轻量级的封装。所谓ORM就是Object/Relationship Mapping,为什么要使用对象/关系映射呢?因为使用面向对象思想编写的数据库应用程序都是要把信息存储到关系型数据库中的,使用Hibernate就可以使用面向对象的方法来操作和使用数据库了。
二、Hibernate简单实例
下面通过一个简单的例子来介绍一下使用Hibernate的基本步骤,本实例使用了MySQL数据库,并使用JUnit来进行测试。首先要引入使用的jar包,在本例中需要引入Hibernate使用的相关jar包、MySQL数据库连接jar包和JUnit测试jar包,在pom文件中添加以下依赖。
- <dependencies>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>5.2.0.Final</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.38</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
1、创建Hibernate的配置文件(hibernate.cfg.xml)
首先我们需要创建Hibernate的配置文件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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- 数据库密码 -->
- <property name="hibernate.connection.password">root</property>
- <!-- 数据库用户名 -->
- <property name="hibernate.connection.username">root</property>
- <!-- 数据库url,类似于JDBC中连接数据库的url -->
- <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8</property>
- <!-- 数据库使用的方言 -->
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- 是否把输出到控制台的sql进行格式化 -->
- <property name="format_sql">true</property>
- <!-- 是否将Hibernate运行时的sql输出到控制台 -->
- <property name="show_sql">true</property>
- <!-- 自动创建|更新|验证数据库表结构 -->
- <property name="hbm2ddl.auto">create</property>
- </session-factory>
- </hibernate-configuration>
- package com.imooc.vo;
- import java.util.Date;
- public class User {
- private int id;
- private String name;
- private int age;
- private String sex;
- private Date birthday;
- private String address;
- public User() {
- }
- public User(int id, String name, int age, String sex, Date birthday, String address) {
- this.id = id;
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.birthday = birthday;
- this.address = address;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "Student [id=" + id + ", name=" + name + ", age=" + age
- + ", sex=" + sex + ", birthday=" + birthday + ", address="
- + address + "]";
- }
- }
- <?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 2016-9-19 19:59:35 by Hibernate Tools 3.4.0.CR1 -->
- <hibernate-mapping>
- <class name="com.imooc.vo.User" table="USER">
- <id name="id" type="int">
- <column name="ID" />
- <generator class="assigned" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="NAME" />
- </property>
- <property name="age" type="int">
- <column name="AGE" />
- </property>
- <property name="sex" type="java.lang.String">
- <column name="SEX" />
- </property>
- <property name="birthday" type="java.util.Date">
- <column name="BIRTHDAY" />
- </property>
- <property name="address" type="java.lang.String">
- <column name="ADDRESS" />
- </property>
- </class>
- </hibernate-mapping>
- <mapping resource="com/imooc/map/User.hbm.xml"/>
4、通过Hibernate的API来编写操作数据库的代码
在上面一系列的配置完成之后我们就可以使用JUnit来编写一个测试类UserTest来使用Hibernate了。- package com.imooc.test;
- import java.util.Date;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import com.imooc.vo.User;
- public class UserTest {
- private SessionFactory sessionFactory;
- private Session session;
- private Transaction transaction;
- @Before
- public void init() {
- //创建配置对象
- Configuration config = new Configuration().configure();
- //创建会话工厂对象
- sessionFactory = config.buildSessionFactory();
- //创建会话对象
- session = sessionFactory.openSession();
- //开启事务
- transaction = session.beginTransaction();
- }
- @After
- public void destory() {
- //提交事务
- transaction.commit();
- //关闭会话
- session.close();
- //关闭会话工厂
- sessionFactory.close();
- }
- @Test
- public void saveNewUser() throws Exception{
- User s = new User(1, "张三", 12, "男", new Date(), "上海市");
- session.save(s);
- }
- }
下面使用JUnit执行saveNewUser()方法,执行完成后,我们去数据库中会发现新生成了一张表USER,查询表中的内容,我们会发现刚刚定义的名为张三的用户已经插入成功了,这说明使用Hibernate操作数据库成功了。