Hibernate快速起步

创建第一个Hibernate实例:

 

  • 创建实例数据库:名为hibernatetest;及库表tUser,tUser中包含“id”,“name”两个字段;
  • 构建Hibernate基础代码:POJO类和Hibernate映射文件;

 

POJO类就是无格式普通的java类,可以简单的理解为一个不包含逻辑代码的值对象(Value Object,简称VO),从数据库层来看,POJO作为数据实体的对象化表现形式,也称实体类。数据库tUser与其相对应的实体类命名为:Tuser.java

例:

 

public class Tuser implements Serializable{
	
	private Integer id;
	private String name;

	public Tuser() {
	}
....
}

 

tUser类在这里体现的是ORM中的Object层的语义,即对“用户”实体的抽象,它包含了“用户”相关属性。

tUser表是关系型数据库表,用于存储“用户”数据,根据Object和数据库定义,就可以通过映射文件建立两者之间的关联(映射)关系,这就是所谓的Mapping。

Hibernate是一种“对象---关系型数据库映射组件”,它使用映射文件将对象(object)与关系型数据(Relational)相关联。在Hibernate中通常用"*.hbm.xml"作为后缀;

构建Hibernate基础代码,有很多工具,包括常用的MyEclipse中也有,新手建议手工编写;

  • 添加Hibernate所需的jar包:

hibernate-distribution-3.5.3-Final/lib/required下左右jar文件;

hibernate下的hibernate3.jar;

  • Hibernate配置

 

Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性;Hibernate支持XML格式的配置文件和传统的.properties文件配置方式,建议用XML配置文件。XML的结构清晰,可读性好,可以直接对映射文件加以配置并由Hibernate自动加载,而.properties文件的方式,无法做到这一点(必须在程序中通过编码进行加载);

Hibernate配置文件名默认为:“hibernate.cfg.xml”(Hibernate.properties),Hibernate初始化会在CLASSPATH中寻找这个文件,并读取信息,为后期数据库操作做好准备;不推荐Hibernate内在连接池;使用第3方连接池!

典型的Hibernate配置文件如下:

 

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>

        <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>

        <property name="connection.username">sa</property>

        <property name="connection.password"></property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

日志配置:采用log4j;在hibernate/lib/required下有slf4j-api-1.5.8.jar,这只是api需要为其添加实现:slf4j-log4j12-1.5.8.jar,使用slf4j-log4j,必须添加log4j的实现:log4j-1.2.16.jar;然后从/project/etc下的log4j.properties复制到项目的SRC下,log4j.properties中需要这样的配置即可:

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate=info
log4j.logger.org.hibernate.type=info
log4j.logger.org.hibernate.tool.hbm2ddl=debug

 

我们需要一个Hibernate工具类(HibernateUtil.java  ),来创建Session:

 

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();
    private static SessionFactory buildSessionFactory() {
        try {
            return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;

    }
}
 

 

 以上完成了基础代码和Hibernate所需要的配置文件,感受下Hibernate所提供的功能,体验下Hibernate强大的功能:

 

	public static void saveTest() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Tuser tUser = new Tuser();
		tUser.setName("keith");
		session.save(tUser);
		session.getTransaction().commit();
	}

 

 可以看到控制台上的输出:

 

Hibernate: insert  into  tUser(uName)  values(?)

 

 看下数据库,发现tUser中会多条数据;

在java中如果要进行数据库访问,一般均通过JDBC进行,期间需要进行SQL语句的编写,并通过JDBC执行这些SQL语句;通过上面例子,我们可以看出基于Hibernate的数据插入操作并不需要指定对应的SQL语句,也能完成此操作,但是代码中仅仅先用实体类的set()方法,然后session.save()操作就完成了;这正是Hibernate优势所在,它对JDBC进行了妥善封装,会自动根据对象和表之间的映射关系,将对象操作转换为SQL加以执行;

在基于JDBC的实际开发中,还需要考虑更多的问题,如:连接的关闭策略(一旦程序中出现连接泄漏,对于整个程序带来的后果可能是致命的),连接池和Statement缓存的应用等;另外一旦库表或表字段发生更改意味着开发人员要改变其SQL和其相关代码;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值