由于之前搭建过了SS,此处加入Hibernate,原来以为会很容易的,没想到去被一个问题难住了两天,纠结!!!

Hibernate在Maven中所需包:Hibernate-core

同时还要加入Jdbc包:sqlJdbc,这个包我在Maven中没有找到,只好自己下载下来,放入项目中

首先:Hibernate.cfg.xml文件:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <!-- Database connection settings,Sql2000与2005有区别,此处是SQL2005的 -->
  <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  <property name="connection.url">jdbc:sqlserver://localhost:1433; DatabaseName=Test;</property>
  <property name="connection.username">sa</property>
  <property name="connection.password">sa</property>

  <!-- JDBC connection pool (use the built-in) Hibernate自带的连接池,一般不用,注释掉! -->
  <!-- <property name="connection.pool_size">1</property> -->

  <!-- SQL dialect(方言)用于指定何种数据库,可以在Hibernate的文档中查到 -->
  <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

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

  <!-- Disable the second-level cache 二级缓存,优化Hibernate时再说! -->
  <property name="cache.provider_class">
   org.hibernate.cache.NoCacheProvider
  </property>

  <!-- Echo all executed SQL to stdout 是否显示生成的SQL生成语句!开发时,一定要显示,方便调试! -->
  <property name="show_sql">true</property>
       <!-- 使显示的sql格式化-->
       <property name="format_sql">true</property>
  <!-- Drop and re-create the database schema on startup hbm是Hibernate Maping
   ddl是数据定义语句 这句话的意思是:是否要Hibernate指定映射成数据定义语句。 -->
  <!-- <property name="hbm2ddl.auto">update</property> -->
  <property name="myeclipse.connection.profile">msdriver</property>
<!--设置自动生成数据库表,update时自动更新表结构-->

  <property name="hibernate.hbm2ddl.auto">create</property>

  <mapping resource="demo/entity/demoEntity.hbm.xml" />
 </session-factory>
</hibernate-configuration>

Hibernate它在代码中写死了,默认下是放在WEB-INF\classes下,它在代码中的体现是:\Hibernate.cfg.xml

同时在此文件中加入引用实体映射文件:demo/entity/demoEntity.hbm.xml,此处的路径是相对本文件的相对路径。

demoEntity.hbm.xml文件配置:

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="demo.entity">
 <class name="demoEntity" table="demoEntity">
  <!-- 如果是Model类和表名一样,则table属性可以省略 -->
  <id name="id" column="id"></id>
  <!-- 指定数据库主键, name指定Model类中的属性,column属性指定表中的列。如果是Model类属性和列名一样,则column属性可以省略 -->
  <property name="name" column="name"></property><!-- 指定其他属性 -->
  <property name="age" column="age"></property>
 </class>
</hibernate-mapping>

注意在指定package时指定到包就行了,开始习惯和spring配置样写到了java文件级别,结在class.forname时总是抱错。

demo.entity.domoEntity:

package demo.entity;


public class demoEntity implements java.io.Serializable{
 /**
  *
  */
 private static final long serialVersionUID = 1L;

 public demoEntity(){}
 private int id;
 private String name;
 private int age;

 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 int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

}

调用:

demoService.println();
  System.out.print("aaaaaaaaaaaaaa");
  demoEntity s = new demoEntity();
  s.setId(1);
  s.setName("s1");
  s.setAge(1);
  Transaction tx=null;
  try{
   Configuration cfg = new Configuration();
   SessionFactory sf = cfg.configure().buildSessionFactory();// 默认读取的是sre下面的hibernate.cfg.xml
   Session session = sf.openSession();
   tx = session.beginTransaction();
   //   tx.commit();
   session.save(s);
   tx.commit();
   session.close();
  } catch (HibernateException e){
   e.printStackTrace();
   try {
    tx.rollback();
   } catch (HibernateException e1) {
    e1.printStackTrace();
   }
  }
  finally{
   return SUCCESS;
  }

posted on 2011-10-02 18:34  叩亦杰  阅读(9385)  评论(0编辑  收藏  举报