第一个简单的hibernate程序

来源:互联网 发布:爱肯拿天峻授权淘宝店 编辑:程序博客网 时间:2024/05/20 18:02

           目前主流的数据库一般都是关系型的数据库,而我们目前的高级程序语言都支持面向对象等特性,数据库的编程语言之间存在的一条鸿沟。在面向对象的数据库还没有得到普及的时候,ORM(对象,关系,映射)都将作为一种简化编程的工具存在。

     下面就演示一个简单的利用hibernate(一个orm框架)框架写的一个小程序。

      首先我们写一个javabean,Userbean,我们的类最好不要设置成final类,因为hibernate框架有时候优化执行的时候,会继承我们的类,如果我们设置成final类的话,他就无能为力。

     类要提供默认构造函数,因为hibernate利用反射技术生成我们的类(如果没有提供默认构造函数,hibernate框架就无法管理类的生命周期)

       

public class UserBean {   private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

    UserBean与数据库的表之间的映射文件,id表示主键,generator表示主键的生成策略,native表示使用本地数据库的生成策略。

    如果没有指定表名,则默认和java类名称一致,即UserBean。id和property,如果也没有指定名称(即列名),则默认也是和类的属性名称一致。

    

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.shizhan.hibernate.domain"><class name="UserBean">   <id name="id">     <generator class="native"/>   </id>  <property name="username"/>  <property name="password"/></class></hibernate-mapping>

    利用oracle作为数据库的配置文件,像我们以前利用jdbc连接数据库一样,需要提供驱动名,url地址,用户名,密码等信息。这个配置文件中多了一个 <property name="dialect">用来告诉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"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>        <!-- 数据定义语言,告诉hibernate帮我们创建表 -->        <property name="hbm2ddl.auto">create</property>        <!-- 告诉hibernate程序与哪种数据库连接,本例子使用oracle -->        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>              <property name="connection.url">jdbc:oracle:thin:localhost:1521:orcl</property>        <property name="connection.username">scott</property>        <property name="connection.password">tiger</property>        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>        <property name="myeclipse.connection.profile">oracle.jdbc.driver.OracleDriver</property>                 <!-- 告诉hibernate我们的user.hbm.xml在哪 -->        <mapping resource="com/shizhan/hibernate/domain/User.hbm.xml"/>    </session-factory>  </hibernate-configuration>

   hibernate工具类

  

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {    private static  SessionFactory sessionFactory ;//不让其他用户轻易创建,因为我们有些操作只执行一次private HibernateUtil(){}static{  Configuration cfg = new Configuration();  cfg.configure();  sessionFactory = cfg.buildSessionFactory();}public static SessionFactory getSessionFactory() {return sessionFactory;}    public static Session getSession(){    return  sessionFactory.openSession();    }}


   测试类

   

package com.shizhan.hibernate.test;import org.hibernate.Session;import org.hibernate.Transaction;import com.shizhan.hibernate.domain.UserBean;import com.shizhan.util.HibernateUtil;public class TestHibernate {   public static void main(String[] args) {     Session   s = HibernateUtil.getSession();Transaction t = s.beginTransaction();UserBean user = new UserBean();user.setUsername("shizhan");user.setPassword("123");s.save(user);t.commit();s.close();}
  

   从s.save(user)中,我们发现可以直接将对象存储到数据库中,这就是hibernate的魅力所在,简化了之间利用原始jdbc插入数据时编程步骤。

    hibernate默认的事务是 不自动提交,这和jdbc的自动提交有点不一致,所以如果我们发现数据没有插入到数据库中,这时候问题可能就是我们没有开启事务,并且提交。

     Configuration cfg = new Configuration();

     cfg.configure(); 用来加载hibernate.cfg.xml文件,所以时间比较久,应保证我们的应用程序只调用一次。configure()函数默认加载hibernate.cfg.xml文件,所以如果我们的配置文件是其他的名称,需要显示的传入值。

原创粉丝点击