Hibernate4 hello案例

本文详细介绍如何从零开始搭建一个Hibernate项目,包括创建Java项目、配置文件编写、数据库表及POJO对象创建等步骤,并提供了完整的测试示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建第一个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();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值