一、前言
在上一篇博客中向大家介绍了《【SSH】SSH框架(三)——Spring》,Spring解决企业应用开发的复杂性,使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。接下来向大家介绍的是Hibernate。
二、Hibernate是什么?
在学习Hibernate之前呢,小编曾经在.Net中接触过“EF框架”,它是一种ORM(Object Relational Mapping)映射工具,能够建立面向对象的域模型和关系数据库之间的映射。在学习了Hibernate之后,发现他们两个非常的相似,下面小编一点一点的告诉您,什么是Hibernate~
用比较通俗点来解释,Hibernate核心就是:
Java应用和数据库之间的桥梁。它能够进行Java对象和关系数据之间的映射。
除了这些,Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。可以看出Hibernate起了中间件的作用,可以为任何一个需要访问关系数据库的Java应用服务。中间件有透明性,作为Hibernate的使用者,无须关系它是如何实现的,只需要知道如何访问它的接口就行了。
图一 Hibernate的中间件特性
三、Hibernate优点
- 开源的,允许开发人员在需要的时候研究源代码,改写源代码,定制客户化功能
- 具有详细的参考文档
- 对JDBC仅做了轻量级的封装,如果有必要,用户可以绕过Hibernate,直接访问JDBC API。
- 具有可拓展性。
- 使用方便,容易上手。
- 适用于独立的Java程序,也适用于Java Web应用,而且还可以在J2EE架构中取代CMP(Container-managered Presistence ,由容器管理持久化),完成对象持久化的重任,Hibernate能集成到会话EJB和集成BMP(由实体EJB本身管理持久化)的实体EJB中。
四、Hibernate怎么使用?
在Java应用中使用Hibernate包含以下几个步骤:
(1)创建Hibernate的配置文件
(2)创建持久化类
(3)创建对象-关系映射文件
(4)通过Hibernate API编写访问数据库的代码
下面小编通过一个简单的例子,向大家依次介绍如何使用Hibernate:
【jar包】
小编的项目是在MyEclipse中的,所以需要导入Hibernate的jar包。jar包中包含了我们Hibernate需要的一些信息。在导入关于Hibernate的jar包后,为了连接数据库,我们需要导入数据库的驱动jar包,小编使用的是MySQL,所以导入MySQL 的jar包。
- hibernate-distribution-3.6.10.Final\hibernate3.jar
- hibernate-distribution-3.6.10.Final\lib\required*.jar
- hibernate-distribution-3.6.10.Final\lib\jpa*.jar
- mysql-connector-java-5.0.4-bin.jar
【配置文件】
Hibernate从其配置文件中读取和数据库连接有关的信息,下面是配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- 配置连接池: -->
<!-- 引入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置C3P0连接池: -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Hibernate的相关信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的其他的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<value>cn/itcast/shop/user/vo/User.hbm.xml</value>
<value>cn/itcast/shop/category/vo/Category.hbm.xml</value>
<value>cn/itcast/shop/product/vo/Product.hbm.xml</value>
<value>cn/itcast/shop/categorysecond/vo/CategorySecond.hbm.xml</value>
</list>
</property>
</bean>
【UI层】
//登录-Ares-2016年9月26日11:37:44
public String login(){
User existUser = userService.login(user);
//判断
if(existUser== null){
//登录失败
this.addActionMessage("登录失败:用户名或密码错误或用户未激活!");
return LOGIN;
}else{
//登录成功
//将用户信息存人Session中
ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
//页面跳转
return "loginSuccess";
}
}
【持久层】
//登录-Ares-2016年9月26日11:37:44
public User login(User user) {
return userDao.login(user);
}
【数据层】
//登录-Ares-2016年9月26日11:37:44
public User login(User user) {
String hql ="from User where username = ? and password =? and state =?";
List<User> list = this.getHibernateTemplate().find(hql,user.getUsername() ,user.getPassword(),1);
if(list!=null && list.size()>0){
return list.get(0);
}
return null;
}
五、小结
这次学习Hibernate算是对Java有了一个新的理解,其中的一些不足也是由了了解,算是对其中的一些的知识有是更加扎实的了解,不过还是要多多的跟项目,多多的学习。