- 浏览: 414134 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
skying007:
...
Mysql coalesce() 函数认识和用法 -
kchiu:
关于这个心跳的发送和接收 晚上全是the fuccking s ...
socket心跳检测 -
bjsq618:
你的想法在大的物流公司已经实现了,只不过他们使用是GPS定位
ddd -
jiaguwen123:
2,AuthenticationHandler类的写法
pa ...
xfire客户端 -
sornor:
总结的不错哟!
Java中的函数yield(),sleep()和wait()的区别
1.到hibernate官网http://www.hibernate.org上下载您需要的版本。本人下载了hibernate3.2.5和hibernate3.3.1两个版本。
2.将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:
antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar。
当然,为了方便也可以直接把/lib目录下的所有jar一次性导入classpath下即可。
3. 将你要连接的具体数据库的驱动类jar包加入到classpath中。
4. 建立实体类:
我的实体类创建如下所示:
Java代码
package com.reiyen.hibernate.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
package com.reiyen.hibernate.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
5. 建立实体类与数据库表的映射关系(ORMapping)User.hbm.xml,将此配置文件置于与你创建的实体类的同一个包中,而不是直接放在classpath下面:
User.hbm.xml映射文件配置如下:(如果是在Oracle数据库中运行,此配置文件必须修改,改成<class name="User" table="test_user">即可,因为user在oracle数据库中是数据库关键字。如果表名一定是叫user的话,可以进行如下处理:table="`user`",给user加上反引号,告诉数据库将它当作一个普通的字符串来处理,而不是当作关键字来处理(如:定单order,它就是一个数据库关键字,所以必须处理,table="orders")。如果你的实体类中有其他的属性名(如:date)与数据库中的关键字冲突,你都可以修改它在数据库中映射的字段名或加反引号解决。)
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="com.reiyen.hibernate.domain">
<!--用class元素来定义一个持久化类 -->
<class name="User" >
<id name="id" >
<generator class="native" />
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping>
<?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="com.reiyen.hibernate.domain">
<!--用class元素来定义一个持久化类 -->
<class name="User" >
<id name="id" >
<generator class="native" />
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping> 6.将你的配置文件hibernate.cfg.xml和hibernate.properties中的任一一个加入到classpath下(配置文件有xml和properites两种), 这两个文件的作用是一样的,提供一个即可(如果两个配置文件都有的情况下,XML配置文件会覆盖掉properites文件中的属性,因为XML文件中的属性信息反馈级高于properties中的属性)。(这里需要注意一点:
一般在实际应用中,你的hibernate.cfg.xml配置文件并没有直接像导入jar包一样导入到classpath下,而只要放到你的Eclipse建立的工程的src目录下即可,hibernate就能自动找到。这是为什么呢?因为src目录确实不在classpath下面,但因为你的项目进行编译时,Eclipse会将你的源文件编译后存在一个叫bin的目录下,同时你的配置文件也相应的复制过去了,而这个bin目录属于classpath的一部分,所以Hibernat就能自动找到你的配置文件了。你可以打开你的工程下的.classpath文件,里面有一行:<classpathentry kind="output" path="bin"/>。你也可以把bin目录下的hibernate.cfg.xml文件删除然后再运行一下原来的程序,它会抛出如下 的一个异常:Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found。如果你的工程是Web工程,则配置文件会复制到WebRoot/WEB-INF/classes下面去。同时在你的.classpath文件下有一行:<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>)。同时将你的映射配置文件User.hbm.xml在此配置文件中注册。推荐xml格式的文件。下载目录/etc(版本hibernate3.2.5)或下载目录/project/etc(版本hibernate3.3.1)下是示例配置文件。
可以在配置文件中指定:
数据库的URL、用户名、密码、JDBC驱动类、方言等。
程序启动时,hibernate会在CLASSPATH下寻找这个配置文件。当然这个文件你也可以不放在CLASSPATH下,这在以后再详细说明。
我的配置文件hibernate.cfg.xml(当然名字也可以取成其他名字,这也这以后详解)如下所示:
Xml代码
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在 Hibernate3.2.5软件包中的src\org\hibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--设置数据库的连接url:jdbc:mysql://localhost:port/test,其中localhost表示mysql服务器名称,此处为本机。port代表mysql服务器的端口号,默认是3306。test是数据库名,这是你要连接的数据库名-->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!--如果你的mysql服务器都是默认设置的,且装在本机器上,则也可以写成
property name="hibernate.connection.url">
jdbc:mysql://localhost/test
</property>或
<property name="hibernate.connection.url">
jdbc:mysql:///test
</property>
-->
<!--连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--连接数据库的密码-->
<property name="hibernate.connection.password"></property>
<!--hibernate.dialect 是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器。-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--hibernate.hbm2ddl
.auto
指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--是否在后台显示Hibernate生成的查询数据库的SQL语句,开发时设置为true,便于查询错误,程序运行时可以在Eclipse的控制台显示Hibernate执行的Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="show_sql">true</property>
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在 Hibernate3.2.5软件包中的src\org\hibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--设置数据库的连接url:jdbc:mysql://localhost:port/test,其中localhost表示mysql服务器名称,此处为本机。port代表mysql服务器的端口号,默认是3306。test是数据库名,这是你要连接的数据库名-->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!--如果你的mysql服务器都是默认设置的,且装在本机器上,则也可以写成
property name="hibernate.connection.url">
jdbc:mysql://localhost/test
</property>或
<property name="hibernate.connection.url">
jdbc:mysql:///test
</property>
-->
<!--连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--连接数据库的密码-->
<property name="hibernate.connection.password"></property>
<!--hibernate.dialect 是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器。-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--hibernate.hbm2ddl
.auto
指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--是否在后台显示Hibernate生成的查询数据库的SQL语句,开发时设置为true,便于查询错误,程序运行时可以在Eclipse的控制台显示Hibernate执行的Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="show_sql">true</property>
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>7.用JUnit对第一个hibernate实例进行测试(即在eclipse中创建一个junit.test.case,然后导入junit jar包):
测试代码如下:
Java代码
public class TestUser {
@Test
public void test1(){
Configuration config = new Configuration();
config.configure();
// 如果hibernate.cfg.xml中没有配置的某些属性,你可以通过config.setProperty(propertyName, value);来配置.
//如config.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction tran = session.beginTransaction();
User user = new User();
user.setBirthday(new Date());
user.setName("xxlong1");
session.save(user);
//session.persist(user);
tran.commit();
session.close(); }
}
public class TestUser {
@Test
public void test1(){
Configuration config = new Configuration();
config.configure();
// 如果hibernate.cfg.xml中没有配置的某些属性,你可以通过config.setProperty(propertyName, value);来配置.
//如config.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction tran = session.beginTransaction();
User user = new User();
user.setBirthday(new Date());
user.setName("xxlong1");
session.save(user);
//session.persist(user);
tran.commit();
session.close(); }
}
测试结果显示是绿条,说明测试成功。然后进入我的mysql的test数据库中发现创建了一个新的user表,且表中有了一条新记录!在测试时一定要记得开启事务,否则,虽然会在你的Eclipse控制台打印出Hibernate: insert into User (name, birthday) values (?, ?), junit测试结果报告也是绿条,但在数据库里面是没有相应的记录的。因为你未开启事务,数据插入数据库里面后,在Session关闭前它一直没有等到commit命令,所以在Session关闭时,记录又被rollback了。这就是你在控制台能看到hibernate打印出insert into语句,但数据库里却没有相应记录的原因。在测试时,保存对象时也可以用persist方法。使用此方法时,如果未开启事务,测试报告也会是绿条,但同样也不会在数据库里面是没有相应的记录的。但和save方法的区别是,你在控制台也看不到hibernate产生的insert into语句,这就说明在未开启事务时,persist方法压根就不会往数据库里面插入数据。
注意:1.一定要记得加入具体数据库的驱动jar包,否则会出现JDBC Driver class not found的异常!
2. 一定要记隹在hibernate配置文件hibernate.cfg.xml中注册你的映射文件
Xml代码
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />否则会出现异常:org.hibernate.MappingException: Unknown entity: com.reiyen.hibernate.domain.User
3.保证你的mysql中存在名为test的数据库。
4.为了能让hibernate在数据库中自动创建表,配置文件hibernate.cfg.xml中项:hbm2ddl.auto这一项不能少:
Xml代码
<!--hibernate.hbm2ddl.auto指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--hibernate.hbm2ddl.auto指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
"hibernate.hbm2ddl .auto "包含以下四个属性:(http://www.jroller.com/eyallupu/entry/hibernate_s_hbm2ddl_tool有详细的说明)
create-drop : 会根据你的实体类来生成表。但是hibernate每次初始化时都会删除掉上一次的所有表,再重新生成表,即使这两次的表结构没有任何改变,但虚拟机退出时(即Web程序服务器关闭,应用程序运行结束时)又会删除此次所创建的表。
create : 会根据你的实体类来生成表。但是hibernate每次初始化时都会删除掉上一次的所有表,再重新生成表,即使这两次的表结构没有任何改变,但虚拟机退出时(即Web程序服务器关闭,应用程序运行结束时)不会删除此次所创建的表。
update : 最常用的属性,会根据你的实体类来生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行,只会更新表结构。
validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
2.将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:
antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar。
当然,为了方便也可以直接把/lib目录下的所有jar一次性导入classpath下即可。
3. 将你要连接的具体数据库的驱动类jar包加入到classpath中。
4. 建立实体类:
我的实体类创建如下所示:
Java代码
package com.reiyen.hibernate.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
package com.reiyen.hibernate.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
5. 建立实体类与数据库表的映射关系(ORMapping)User.hbm.xml,将此配置文件置于与你创建的实体类的同一个包中,而不是直接放在classpath下面:
User.hbm.xml映射文件配置如下:(如果是在Oracle数据库中运行,此配置文件必须修改,改成<class name="User" table="test_user">即可,因为user在oracle数据库中是数据库关键字。如果表名一定是叫user的话,可以进行如下处理:table="`user`",给user加上反引号,告诉数据库将它当作一个普通的字符串来处理,而不是当作关键字来处理(如:定单order,它就是一个数据库关键字,所以必须处理,table="orders")。如果你的实体类中有其他的属性名(如:date)与数据库中的关键字冲突,你都可以修改它在数据库中映射的字段名或加反引号解决。)
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="com.reiyen.hibernate.domain">
<!--用class元素来定义一个持久化类 -->
<class name="User" >
<id name="id" >
<generator class="native" />
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping>
<?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="com.reiyen.hibernate.domain">
<!--用class元素来定义一个持久化类 -->
<class name="User" >
<id name="id" >
<generator class="native" />
</id>
<property name="name" />
<property name="birthday" />
</class>
</hibernate-mapping> 6.将你的配置文件hibernate.cfg.xml和hibernate.properties中的任一一个加入到classpath下(配置文件有xml和properites两种), 这两个文件的作用是一样的,提供一个即可(如果两个配置文件都有的情况下,XML配置文件会覆盖掉properites文件中的属性,因为XML文件中的属性信息反馈级高于properties中的属性)。(这里需要注意一点:
一般在实际应用中,你的hibernate.cfg.xml配置文件并没有直接像导入jar包一样导入到classpath下,而只要放到你的Eclipse建立的工程的src目录下即可,hibernate就能自动找到。这是为什么呢?因为src目录确实不在classpath下面,但因为你的项目进行编译时,Eclipse会将你的源文件编译后存在一个叫bin的目录下,同时你的配置文件也相应的复制过去了,而这个bin目录属于classpath的一部分,所以Hibernat就能自动找到你的配置文件了。你可以打开你的工程下的.classpath文件,里面有一行:<classpathentry kind="output" path="bin"/>。你也可以把bin目录下的hibernate.cfg.xml文件删除然后再运行一下原来的程序,它会抛出如下 的一个异常:Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found。如果你的工程是Web工程,则配置文件会复制到WebRoot/WEB-INF/classes下面去。同时在你的.classpath文件下有一行:<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>)。同时将你的映射配置文件User.hbm.xml在此配置文件中注册。推荐xml格式的文件。下载目录/etc(版本hibernate3.2.5)或下载目录/project/etc(版本hibernate3.3.1)下是示例配置文件。
可以在配置文件中指定:
数据库的URL、用户名、密码、JDBC驱动类、方言等。
程序启动时,hibernate会在CLASSPATH下寻找这个配置文件。当然这个文件你也可以不放在CLASSPATH下,这在以后再详细说明。
我的配置文件hibernate.cfg.xml(当然名字也可以取成其他名字,这也这以后详解)如下所示:
Xml代码
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在 Hibernate3.2.5软件包中的src\org\hibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--设置数据库的连接url:jdbc:mysql://localhost:port/test,其中localhost表示mysql服务器名称,此处为本机。port代表mysql服务器的端口号,默认是3306。test是数据库名,这是你要连接的数据库名-->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!--如果你的mysql服务器都是默认设置的,且装在本机器上,则也可以写成
property name="hibernate.connection.url">
jdbc:mysql://localhost/test
</property>或
<property name="hibernate.connection.url">
jdbc:mysql:///test
</property>
-->
<!--连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--连接数据库的密码-->
<property name="hibernate.connection.password"></property>
<!--hibernate.dialect 是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器。-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--hibernate.hbm2ddl
.auto
指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--是否在后台显示Hibernate生成的查询数据库的SQL语句,开发时设置为true,便于查询错误,程序运行时可以在Eclipse的控制台显示Hibernate执行的Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="show_sql">true</property>
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在 Hibernate3.2.5软件包中的src\org\hibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--设置数据库的连接url:jdbc:mysql://localhost:port/test,其中localhost表示mysql服务器名称,此处为本机。port代表mysql服务器的端口号,默认是3306。test是数据库名,这是你要连接的数据库名-->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!--如果你的mysql服务器都是默认设置的,且装在本机器上,则也可以写成
property name="hibernate.connection.url">
jdbc:mysql://localhost/test
</property>或
<property name="hibernate.connection.url">
jdbc:mysql:///test
</property>
-->
<!--连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--连接数据库的密码-->
<property name="hibernate.connection.password"></property>
<!--hibernate.dialect 是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器。-->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--hibernate.hbm2ddl
.auto
指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--是否在后台显示Hibernate生成的查询数据库的SQL语句,开发时设置为true,便于查询错误,程序运行时可以在Eclipse的控制台显示Hibernate执行的Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="show_sql">true</property>
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>7.用JUnit对第一个hibernate实例进行测试(即在eclipse中创建一个junit.test.case,然后导入junit jar包):
测试代码如下:
Java代码
public class TestUser {
@Test
public void test1(){
Configuration config = new Configuration();
config.configure();
// 如果hibernate.cfg.xml中没有配置的某些属性,你可以通过config.setProperty(propertyName, value);来配置.
//如config.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction tran = session.beginTransaction();
User user = new User();
user.setBirthday(new Date());
user.setName("xxlong1");
session.save(user);
//session.persist(user);
tran.commit();
session.close(); }
}
public class TestUser {
@Test
public void test1(){
Configuration config = new Configuration();
config.configure();
// 如果hibernate.cfg.xml中没有配置的某些属性,你可以通过config.setProperty(propertyName, value);来配置.
//如config.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction tran = session.beginTransaction();
User user = new User();
user.setBirthday(new Date());
user.setName("xxlong1");
session.save(user);
//session.persist(user);
tran.commit();
session.close(); }
}
测试结果显示是绿条,说明测试成功。然后进入我的mysql的test数据库中发现创建了一个新的user表,且表中有了一条新记录!在测试时一定要记得开启事务,否则,虽然会在你的Eclipse控制台打印出Hibernate: insert into User (name, birthday) values (?, ?), junit测试结果报告也是绿条,但在数据库里面是没有相应的记录的。因为你未开启事务,数据插入数据库里面后,在Session关闭前它一直没有等到commit命令,所以在Session关闭时,记录又被rollback了。这就是你在控制台能看到hibernate打印出insert into语句,但数据库里却没有相应记录的原因。在测试时,保存对象时也可以用persist方法。使用此方法时,如果未开启事务,测试报告也会是绿条,但同样也不会在数据库里面是没有相应的记录的。但和save方法的区别是,你在控制台也看不到hibernate产生的insert into语句,这就说明在未开启事务时,persist方法压根就不会往数据库里面插入数据。
注意:1.一定要记得加入具体数据库的驱动jar包,否则会出现JDBC Driver class not found的异常!
2. 一定要记隹在hibernate配置文件hibernate.cfg.xml中注册你的映射文件
Xml代码
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />
<!--指定映射文件为"com/reiyen/hibernate/domain/User.hbm.xml"-->
<mapping resource="com/reiyen/hibernate/domain/User.hbm.xml" />否则会出现异常:org.hibernate.MappingException: Unknown entity: com.reiyen.hibernate.domain.User
3.保证你的mysql中存在名为test的数据库。
4.为了能让hibernate在数据库中自动创建表,配置文件hibernate.cfg.xml中项:hbm2ddl.auto这一项不能少:
Xml代码
<!--hibernate.hbm2ddl.auto指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
<!--hibernate.hbm2ddl.auto指定由java代码生成数据库脚本,进而生成具体的表结构的具体方式 -->
<property name="hbm2ddl.auto">update</property>
"hibernate.hbm2ddl .auto "包含以下四个属性:(http://www.jroller.com/eyallupu/entry/hibernate_s_hbm2ddl_tool有详细的说明)
create-drop : 会根据你的实体类来生成表。但是hibernate每次初始化时都会删除掉上一次的所有表,再重新生成表,即使这两次的表结构没有任何改变,但虚拟机退出时(即Web程序服务器关闭,应用程序运行结束时)又会删除此次所创建的表。
create : 会根据你的实体类来生成表。但是hibernate每次初始化时都会删除掉上一次的所有表,再重新生成表,即使这两次的表结构没有任何改变,但虚拟机退出时(即Web程序服务器关闭,应用程序运行结束时)不会删除此次所创建的表。
update : 最常用的属性,会根据你的实体类来生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行,只会更新表结构。
validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
发表评论
-
入门 05 - Query接口
2012-09-05 08:13 1662入门 05 - Query接口 我 ... -
Hibernate 5种查询方式代码示例
2011-08-13 09:52 1707package com.cstp.hibernate; im ... -
Java Hibernate Criteria 用法
2010-11-07 23:43 508315.1. 创建一个Criteria 实例org.hibern ... -
hibernate技巧 封装查询结果
2010-11-07 23:30 1254hibernate技巧 封装查询结果 将hibernate 查 ... -
hibernate调用数据库自定义函数
2010-10-31 17:31 1726本文使用的是Oracle9i数据库,hibernate3.0, ... -
HibernateTemplate 的 find方法使用
2010-10-27 22:04 2298一、find(String queryString); ... -
hibernate分组查询
2010-10-26 21:54 1645private static final Str ... -
Hibernate Criteria
2010-10-10 21:58 991Hibernate QBC查询 QBC查询: ... -
论述Hibernate中抓取策略
2010-10-10 21:27 1317Hibernate抓取策略(fetch ... -
Hibernate3的DetachedCriteria支持
2010-10-10 08:42 914Hibernate3支持DetachedCriteria,这是 ... -
hibernate 中对象操作中evict方法和clear方法的区别
2010-09-14 10:11 1266session.evict(obj),会把指定的缓冲对象进行清 ... -
Hibernate三种状态的区分
2010-09-14 10:02 965Hibernate的对象有3种状态,分别为:瞬时态(Trans ... -
hibernate查询多对多数据范例
2010-09-03 16:38 1070public class StuDao<T> ex ... -
hibernate生成数据库表
2010-08-19 08:22 4141import org.hibernate.cfg.Config ... -
hibernate二级缓存
2010-08-19 07:56 1116二级缓存也称进程级的缓存或SessionFactory级的缓存 ... -
hibernate一级缓存
2010-08-18 23:11 1262一级缓存很短和session的生命周期一致,一级缓存也叫ses ... -
hibernate向MYSQL插入数据的乱码问题
2010-08-17 21:55 1284向数据库插入数据的时候出现乱码,解决办法: 一、数据库连接串 ... -
composite-id 学习
2010-08-15 17:10 1296组件作为联合标识符,必须满足: 它必须实现java.io.Se ... -
hibernate存储过程调用
2010-08-12 17:28 1604听说Hibenate3可以在执行 ... -
Hibernate对视图的操作
2010-08-12 17:08 1262Hibernate对视图进行操作时和对普通的表有些不同,下面就 ...
相关推荐
【标题】"eclipse项目Hibernate实例"涉及到的是Java开发中的持久化框架Hibernate在Eclipse集成开发环境中的实际应用。Hibernate是一种流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的Java语言来操作...
在"SpringMVC+Hibernate实例"中,我们可以看到这两个框架如何协同工作。通常,SpringMVC会通过Controller接收HTTP请求,然后调用Service层(这里可能使用了Hibernate进行数据库操作)处理业务逻辑。Service层利用...
标题“hibernate实例连oracle”表明我们正在讨论如何使用Hibernate框架来连接并操作Oracle数据库。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来处理数据库交互,而无需...
这篇名为"spring整合hibernate实例"的内容,显然是关于如何将这两个框架协同工作,构建一个高效、灵活的Java应用的教程。在整合过程中,我们将探讨以下几个关键知识点: 1. **Spring的ApplicationContext**: 这是...
标题"Hibernate实例 oracel数据库"表明我们将探讨如何使用ORM框架Hibernate与Oracle数据库进行交互。在实际开发中,Hibernate是Java领域非常流行的一个对象关系映射工具,它允许开发者以面向对象的方式操作数据库,...
【hibernate,hibernate实例源码】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。通过提供一套API和元数据配置,Hibernate可以将Java对象自动持久化到关系数据库...
在这个"Flex+Hibernate实例"中,ADC(ActionScript Data Services)可能被用来在Flex客户端和Hibernate驱动的服务器端之间传输数据。ADC提供了一种方式,使得Flex应用能够透明地访问由Hibernate管理的后端数据源。这...
**Hibernate 实例教程** Hibernate 是一个强大的开源对象关系映射(ORM)框架,它极大地简化了Java 应用程序对数据库的操作。这个“Hibernate 实例教程”是为初学者准备的,旨在帮助他们快速理解并掌握Hibernate 的...
在这个"简单Struts+Hibernate实例"中,我们将深入探讨这两个框架如何协同工作以构建高效、灵活的J2EE应用。 首先,让我们了解一下Struts。Struts框架提供了丰富的控制器组件,如Action和ActionForm,用于处理用户...
**hibernate实例** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。这个实例将深入探讨Hibernate的配置、搭建以及如何在实际项目中...
在“Hibernate实例”中,我们将深入探讨如何利用Hibernate来实现数据库关系,以及其核心概念和常用功能。首先,让我们了解Hibernate的基本架构: 1. **配置文件**:`hibernate.cfg.xml`是Hibernate的核心配置文件,...
使用MyEclipse创建hibernate实例入门教程
总的来说,这个"struts+hibernate实例 网上书店"项目是一个典型的Java Web开发案例,它展示了如何结合使用Struts和Hibernate来构建一个功能完善的网上商城系统。通过学习和实践这个实例,开发者不仅可以深入理解这两...
通过"hibernate实例.zip"提供的代码示例,你可以深入了解Hibernate的实际应用,包括实体类的定义、配置文件的编写、以及如何在代码中操作这些对象,从而实现对数据库的增删改查。这些实例是学习和理解Hibernate工作...
在"jsf+spring+hibernate实例"中,JSF可能作为前端展示层,负责接收用户请求,处理用户交互,并展示数据。 **Spring Framework** Spring是Java企业级应用的核心框架,提供依赖注入(DI)、面向切面编程(AOP)、...
在“Spring Hibernate实例”这个主题中,我们将深入探讨这两个框架如何协同工作以及它们的关键功能。 首先,让我们关注Spring框架。Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP)。依赖注入允许开发者...
在“Struts+Hibernate实例”中,我们看到一个简单的身份认证系统的开发过程。这个系统基于JSP、Struts、Hibernate和MySQL5.x构建,使用MyEclipse 6.0 GA作为开发环境。首先,创建一个新的Web项目,如"blipnet",然后...
在"Ajax+Hibernate 实例"中,你可能学习到如何在用户界面上实现无刷新的数据交互,例如表单提交、数据查询等操作,同时利用 JSON(JavaScript Object Notation)格式进行数据传输,因为 JSON 更加轻量级且易于解析。...
标题"Spring+Hibernate实例"暗示我们将探讨如何将这两个框架集成在一起,以构建一个高效且灵活的Java应用。在这个实例中,我们可能会遇到以下几个关键知识点: 1. **Spring框架**:首先,Spring的核心特性是依赖...