Hibernate4 hello案例

来源:互联网 发布:虚拟机网络没有连接 编辑:程序博客网 时间:2024/05/20 04:15

搭建第一个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();
  1. 实际上开启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();        }    }}
原创粉丝点击