由于之前搭建过了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;
}