一、hibernate介绍
1、什么是Hibernate?
数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。Hibernate是用面向对象的思想来操作数据库的数据持久层的一个轻量级框架,并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,节省了我们开发处理数据的时间。
2、Hibernate的优点
1)、使用简洁的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。
2)、使用orm映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。
3)、没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。
4)、支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。
3、深度理解一下Hibernate
1)、Hibernate是对JDBC进一步封装
没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理。使用了Hibernate封装了JDBC,不再需要操作数据,直接操作Hibernate就行了。
2)、Hibernate是开源的一个ORM(对象关系映射)框架
ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
3)、代码分层
典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
二、hibernate环境搭建
1、下载hibernate相关jar包,hibernate基于eclipse的插件。
2、导入hibernate相关jar包,安装hibernate基于eclipse的插件。
三、第一个hibernate程序
先配置hibernate的hibernate.cfg.xml配置文件,相应代码如下:
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 设置数据库URL -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 指定ddl的生成方式 -->
<property name="hibernate.hbm2ddl.auto">create</property>
<mapping resource="com/lhb/HibernateText/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
其中的<mapping resource="com/lhb/HibernateText/model/User.hbm.xml"/>表示映射文件
创建Model类,相应代码如下:
package com.lhb.HibernateText.model;
public class User {
private int id;
private String userNme;
private String password;
public User() {
}
public User(int id, String userNme, String password) {
this.id = id;
this.userNme = userNme;
this.password = password;
}
public User(String userNme, String password) {
this.userNme = userNme;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserNme() {
return userNme;
}
public void setUserNme(String userNme) {
this.userNme = userNme;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Urse [id=" + id + ", userNme=" + userNme + ", password=" + password + "]";
}
}
配置映射文件,将hibernate和Model类关联起来,代码如下:
<?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 2017-1-9 9:28:56 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.lhb.HibernateText.model.User" table="USER">
<id name="id" type="int">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="userNme" type="java.lang.String">
<column name="USERNME" />
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" />
</property>
</class>
</hibernate-mapping>
创建一个测试类,检测hibernate是否能运行成功,测试类使用eclipse自带的单元测试JUnit。
使用了
hibernate的核心接口,另附博文阐述。
相关代码如下:
package com.lhb.HibernateText.model;
import static org.junit.Assert.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class UserTest {
SessionFactory sessionFactory;
Transaction transaction;
Session session;
@Before
//该方法运行在Text测试之前
public void setUp() throws Exception {
// 读取hibernate.cfg.xml文件
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties())
.build();
// 建立SessionFactory
sessionFactory = config.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
@After
//该方法运行在Text测试之后
public void tearDown() throws Exception {
transaction.commit();
session.close();
sessionFactory.close();
}
@Test
public void test() {
User user = new User(1002, "admin", "123456");
session.save(user);
}
}
数据库运行结果:
测试成功。