搭建第一个hibernate项目,因为只用到了数据库,我们这里建立java项目即可,之后用junit单元测
搭建步骤:
1 . 新建java项目
2 . 导入相关jar包
3 . 编写配置文件hibernate.cfg.xml(放在src下)
模板文件比如xml的头文件可以参考下载包里面的etc,以下是博主的路径
D:\soft\hibernate-release-4.3.10.Final\project\etc
里面有hibernate.cfg.xml 可以参考,拷贝过来,主要拷贝头文件。
里面要配置数据库信息,怎么配置,查看etc里面的hibrnate.properties,博主配的是mysql数据库,所以查看里面的mysql信息,如下:
所以hibernate.cdf.xml最终是
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate4
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQL5Dialect
</property>
<!--后面添加-->
<mapping resource="cn/siggy/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类下)
文件名字一般为pojo类名字,这里是User.hbm.xml
这里的头文件也需要拷贝,如下搜索输入*.hbm.xml,随便找一个拷贝一个头文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.siggy.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中)
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 cn.siggy.pojo.User;
public class Test {
public static void main(String[] args) {
//1.新建Configuration对象
Configuration cfg=new Configuration().configure();
//2.通过Configuration创建SessionFactory对象
//在Hibernate3.x是这种写法
//SessionFactory sf=cfg.buildSessionFactory();
//hibernate4.3---4.0
//hibernate4.3之前~hibernate4.0
// ServiceRegistry sr = new ServiceRegistryBuilder()
// .applySettings(cfg.getProperties())
// .buildServiceRegistry();
//hibernate4.3
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("张疯");
user.setPwd("1111");
session.save(user);
User u=(User)session.get(User.class, 2);
System.out.println("name="+u.getName());
//6.提交事务
tx.commit();
//7.关闭session
session.close();
}
}
配置详解:
1 .Configuration管理读取配置文件
//读取src下hibernate.properties,不推荐使用
Configuration cfg = new Configuration();
//默认读取hibernate.cfg.xml
Configuration cfg1 = new Configuration().configure("hb.cfg.xml");
//如果hibernate的核心配置文件 不叫 hibernate.cfg.xml
Configuration cfg2 = new Configuration().configure("hb.cfg.xml");
2 .SessionFactory 是session工厂,是一个重量级(消耗资源较多)对象。在一个应用中最好也是单例的,是线程安全的,属于进程级别(进程范围内都可以使用它,共享,因为线程安全)的对象
/*通过Configuration创建SessionFactory对象*/
/*在Hibernate3.x是这种写法*/
SessionFactory sf=cfg.buildSessionFactory();
/*hibernate4.3之前~hibernate4.0*/
ServiceRegistry sr = new ServiceRegistryBuil.applySettings(cfg.getProperties()) .buildServiceRegistry();
/*hibernate4.3*/
ServiceRegistry registry=new StandardServiceRegistryBuilder(). applySettings(cfg.getProperties()).build();
SessionFactory sf=cfg.buildSessionFactory(registry);
在4.3之后的版本也可以使用之前的两种方式,但是不推荐
3.Session对象:使用hibernate进行数据库操作,主要使用session。Session可以理解为对Connection对象的一个包装。Session对象中提供了对数据库的crud操作。Session是一个线程不安全的对象。生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。Session又是transaction对象的工厂。
4.Transaction对象:事务管理对象。通过session来获取到该对象。包括了事务的开启,事务的提交,事务的回滚。
//第一种写法
Transaction tx = session.beginTransaction();
//第二种写法
Transaction tran = session.getTransaction();
tran.begin();
- 实际上开启session的过程是有可能发生异常的
异常处理
public class TestException {
public static void main(String[] args) {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
Transaction tx = null;
try{
cfg = new Configuration().configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
sf = cfg.buildSessionFactory(registry);
session = sf.openSession();
tx = session.beginTransaction();
User u = (User)session.get(User.class, 2);
System.out.println("name="+u.getName());
//6.提交事务
tx.commit();
}catch (Exception e) {
e.printStackTrace();
if(tx!=null)
//回滚事务
tx.rollback();
}finally{
//7.关闭session
if(session!=null&&session.isOpen())
session.close();
}
}
}