首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate入门(1)第一个应用实例

2012-11-01 
hibernate入门(一)第一个应用实例packagecom.asm.hibernate.domainimportjava.util.Datepublic class Us

hibernate入门(一)第一个应用实例

packagecom.asm.hibernate.domain;

importjava.util.Date;

public class User {

??? private int id;

??? private String name;

??? private Date date;

?

??? 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 getDate() {

?????? return date;

??? }

??? public void setDate(Date date) {

?????? this.date = date;

??? }

}

<?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.asm.hibernate.domain">

?

??? <class name="User">

?????? <id name="id">

?????????? <generator class="native"/>

?????? </id>

?????? <propertyname="name"></property>

?????? <propertyname="date"></property>?

??? </class>

配置文件:hibernate.cfg.xml。它放在当前的项目的根目录下。内容如下:

<!DOCTYPE hibernate-configuration PUBLIC

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

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

?

<hibernate-configuration>

??? <session-factoryname="foo">

?????? <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

?????? <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>

?????? <propertyname="hibernate.connection.username">root</property>

?????? <propertyname="hibernate.connection.password">123456</property>

??????

?????? <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

?????? <propertyname="hibernate.hbm2ddl.auto">create</property>

?????? <mapping resource="com/asm/hibernate/domain/User.hbm.xml"/>???

??? </session-factory>

</hibernate-configuration>
主配置文件,完成了驱动注册,数据库连接,并关联了相应的java对象配置文件。

说明:<mapping>具体指定了关联的所有实体配置文件,关于它的作用可以注释掉此属性看效果。另通过<propertyname="hibernate.hbm2ddl.auto">create</property>指定了根据实体配置文件来自动生成表,其中包括:create/create-drop/update/validate四种可选方式。

packagecom.asm.hibernate.test;

?

importjava.util.Date;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.Transaction;

importorg.hibernate.cfg.Configuration;

importcom.asm.hibernate.domain.User;

?

public class UserTest {

??? public static void main(String []args){

?????? Configuration cf=new Configuration();

?????? cf.configure();?????

?????? SessionFactorysf=cf.buildSessionFactory();

??????

?????? Session s=sf.openSession();

?????? Transaction ts=s.beginTransaction(); //事务

??????

?????? User user=new User();

?????? user.setName("jack");

?????? user.setDate(new Date());

?????? s.save(user);

?????? ts.commit(); //提交事务

?????? s.close();

?????? System.out.println("done");

??? }

}

6.分析流程:首先抛开Transaction tx=s.beginTransaction()和tx.commit(),因为它们是提交事务得。支持提交事务意味着支持数据回滚。说明,通常情况下,很多数据库都默认支持提交事务,所以加这两句代码非常必要。下面具体谈流程:

第一步:获取SessionFactory对象,它会首先构建一个Configuration对象,此对象调用可以调用configure()和configure(String resource)这两种方法:这两种方法在Configuration中的源代码如下:

public Configuration configure() throws HibernateException {

?????? configure( "/hibernate.cfg.xml" );

?????? return this;

public Configuration configure(String resource) throws HibernateException {

?????? log.info( "configuring from resource: " + resource );

?????? InputStream stream =getConfigurationInputStream( resource );

?????? return doConfigure( stream, resource );

??? }
分析这两个源代码可以知道:无参调用最终也是调用这个有参数的方法,所以我们也可以直接传参数调用。现在的重点是读配置文件,这个配置文件我们一般放在eclipse的scr根目录下,而当eclipse编译时会自动把这个目录下的文件编译到bin目录下,而这个bin目录下是被配置成classpath环境变量,而configure方法就是在classpath环境变量下查找配置文件。再来分析,无参调用configure方法时,默认的是传递的hibernate.cfg.xml配置文件,所以只有取名为这个的配置文件,才可以调用无参的configure方法,如果是其它名字的配置文件,则调用含参的配置文件,并且这个参数名应为这个配置文件的名字。当读取配置文件后的Configuration对象,才是一个真正意义上可操控的实例对象。 然后,再用这个对象来构建一个SessionFactory对象。 强调说明,这一步整个操作最好是放在类的静态代码块中,因为它只在该类被加载时执行一次。

第二步得到一个Session实例,以进行数据库CRUD操作
第三步:实例化一个java类
第四步:持久化操作

第五步后续操作:主要是关闭连接

7.实体类定义规则:

Domainobject(java对象)必须要有构造方法,同时建议有一个id属性,为了赖加载,这个java类的声明最好不用final。

8.开发流程:

官方推荐:先Domain object 再mapping,最后是DB。 常用开发方式:DB开始,由工具来生成mapping和Domain object。

9.总结基本步骤:

环境搭建(导入相关包等) —>实体类及配置文件—>

主配置文件(完成了数据库的配置及通过设置属性创建了相应的表)—>得到Session测试应用。

热点排行