hibernate是一个ORM(对象关系映射)框架,将实体类对象和数据库数据关系做了映射,使我们操作数据库时,方便简单。hibernate对JDBC重复的操作做了封装,而且使用hibernate开发的项目,不管数据库怎么改变,都不用修改代码,是需要将配置文件中的信息修改为对应的数据库信息即可。
下面示例简单介绍下hibernate的环境搭建跟配置。
hibernate资源下载地址:http://hibernate.org/orm/downloads/
首先看下项目整体架构:
1、新建java项目
2、导入相关jar包
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.11.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
mysql-connector-java-5.1.2-beta-bin.jar
3、编写相关配置文件hibernate.cfg.xml文件,
复制hibernate-release-4.3.11.Final\project\etc\hibernate.cfg.xml文件,修改内容,放到项目中src目录下:
<hibernate-configuration>
<session-factory>
<!-- 配置数据库连接信息 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">jdbc:mysql:///hibernatetest</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQL5Dialect
</property>
<mapping resource="com/test/pojo/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
4、创建数据库表以及对应的pojo对象
public class User {
private int id;
private String name;
private String pwd;
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
5、编辑*.hbm.xml文件,文件名一般为pojo类的名称,如User.hbm.xml,放在pojo类所在的包下
<hibernate-mapping>
<class name="com.test.pojo.User" table="user">
<id name="id">
<!-- 主键生成策略,设置为自增 -->
<generator class="native"></generator>
</id>
<!-- 实体类属性 -->
<property name="name"/>
<property name="pwd"/>
</class>
</hibernate-mapping>
6、测试(检查下是否将*.hbm.xml文件加入到hibernate.cfg.xml文件中,若无先将文件加入进去)
public static void main(String[] args) {
//1、新建Configuration对象
Configuration cfg=new Configuration().configure();
//2、通过Configuration创建SessionFactory对象
ServiceRegistry registry=new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
SessionFactory sf=cfg.buildSessionFactory(registry);
//3、通过SessionFactory得到session
Session session=sf.openSession();
//4、通过session对象得带Transaction对象,开启事务
Transaction tx=session.beginTransaction();
//5、保存数据
User user=new User();
user.setName("admin张");
user.setPwd("1111");
session.save(user);
//6、提交事务
tx.commit();
//7、关闭session
session.close();
}
Configuration管理读取配置文件。单例模式,通过Configuration来创建SessionFactory对象。当hibernate的核心配置文件名不是hibernate.cfg.xml时,获取方式为:
Configuration cfg=new Configuration().configure("*.cfg.xml");//与自定义文件名一致
SessionFactory对象:是一个session工厂,是一个重量级对象。在一个应用中最好也是单例。是一个
线程安全的。属于进阶级别的对象。
Session对象:使用hibernate进行数据库操作,主要使用Session。Session可以理解为对Connection对象的一个包装Session对象中提供了对数据库的crud操作。Session是一个线程安全的对象。生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。Session又是Transaction对象的工厂。
Transaction对象:事务管理对象,通过Session来获取到该对象。包括事务的开启,事务的提交,事物的回滚。
通过Session对象获取Transaction对象有两种方式:
一、Transaction tx=session.beginTransaction();
二、Transaction tx=session.getTransaction();
tx.begin();
7、事务和异常处理:
public static void main(String[] args) {
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction tran=null;
try{
cfg=new Configuration().configure();
ServiceRegistry registry=new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
sf=cfg.buildSessionFactory(registry);
session=sf.openSession();
tran=session.beginTransaction();
User u=(User) session.get(User.class, 1);
System.out.println("name="+u.getName());
//6、提交事务
tran.commit();
}catch(Exception e){
e.printStackTrace();
//回滚事务
tran.rollback();
}finally{
//7、关闭session
if(session!=null && session.isOpen())
session.close();
}
}