您的位置:首页 > 编程语言 > Java开发

Hibernate的XML和annotation两种方式简单例子

2016-12-21 10:12 225 查看
Hibernate概述:

ORM的全称Object/RelationMapping,对象/关系数据库映射。可以理解是一种规范,基本特征是完成面向对象的编程语言到关系数据库的映射。

Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于Sql的关系模型数据库结构中去。
Hibernate中的底层依然是基于JDBC的,因此在应用程序中使用Hibernate执行持久化时一定少不了JDBC的驱动
下面小例子XML方式:
1.建立类Student,就是相当于一个POJO类。这个类主要的作用就是一个简单类,用于数据库表的字段的映射。

packagecom.hibernate.model;

publicclassStudent{

privateintid;

privateStringname;

privateintage;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}


}


2.这个普通的类还不具有持久化操作的能力,为了使其具备持久化操作的能力,这个方式采用的是XML的方式Student.hbm.xml

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

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


<hibernate-mappingpackage="com.hibernate.model">


<classname="Student">

<!--主键-->

<idname="id"></id>

<!--其他属性-->

<propertyname="name"/>

<propertyname="age"/>


</class>

</hibernate-mapping>


3.以上的XML文件持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据表列之间的对应关系。对于连接数据库的类型等通用的信息需要Hibernate的配置信息,配置信息需要指定的配置文件。hibernate.cfg.xml

<?xmlversion='1.0'encoding='utf-8'?>

<!DOCTYPEhibernate-configurationPUBLIC

"-//Hibernate/HibernateConfigurationDTD3.0//EN"

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


<hibernate-configuration>


<session-factory>


<!--Databaseconnectionsettings数据库配置文件-->

<!--指定数据库所用的驱动-->

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

<!--指定数据库的url,hibernate连接的数据库名-->

<propertyname="connection.url">jdbc:mysql://localhost/hibernate?useUnicode=true&characterEncoding=UTF-8</property>

<!--指定数据库连接的用户名-->

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

<!--数据库连接用的密码-->

<propertyname="connection.password">123</property>


<!--JDBCconnectionpool(usethebuilt-in)实际开发中不用hibernate的连接池-->

<propertyname="connection.pool_size">1</property>


<!--SQLdialect数据库方言-->

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


<!--EnableHibernate'sautomaticsessioncontextmanagement-->

<!--<propertyname="current_session_context_class">thread</property>-->


<!--Disablethesecond-levelcache-->

<propertyname="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>


<!--EchoallexecutedSQLtostdout显示sql语句-->

<propertyname="show_sql">true</property>


<!--Dropandre-createthedatabaseschemaonstartup自动创建表的-->

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

<!--罗列所有的映射文件-->

<mappingresource="com/hibernate/model/Student.hbm.xml"/>

<!--这种方式是利用注解的方式-->

<mappingclass="com.hibernate.model.Teacher"/>

</session-factory>


</hibernate-configuration>


4.进行测试

packagecom.hibernate.test;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

importcom.hibernate.model.Student;


publicclassStudentTest{


publicstaticvoidmain(String[]args){

Students=newStudent();

s.setId(1);

s.setAge(1);

s.setName("tom");

//实例化Configuration

Configurationcfg=newConfiguration();

//以Configuration默认加载Hibernate创建SessionFactory

SessionFactorysf=cfg.configure().buildSessionFactory();

//创建Session

Sessionsession=sf.openSession();

//开始事务

session.beginTransaction();

//保存信息

session.save(s);

//获得事务并且提交

session.getTransaction().commit();

//关闭Session

session.close();

sf.close();

}

}


SessionFactory:这是Hibernate关键的对象,它是单个数据库映射关系经过编译后的内存镜像,它也是线程安全。它是生成Session的工厂,本身依赖ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据库可以提供可选的二级缓存。
Session:它是应用程序与持久化之间的操作的单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象的生存期很短。底层封装了JDBC的连接,也是Transaction的工厂。Session对象持有一个必选的一级缓存。
持久化对象:系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化状态。
事务:代表一个原子操作,它具有数据库事务的概念,虽然事务操作是可选的,但是所有的持久化操作都应该在事务管理中。

接下来运用注解的方式进行。建立Teacher类。

packagecom.hibernate.model;

importjavax.persistence.Entity;

importjavax.persistence.Id;


//表示实体类

@Entity

publicclassTeacher{


privateintid;

privateStringname;

privateStringtitle;

//一般都放在get方法这边·@Id表示主键

@Id

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetTitle(){

returntitle;

}

publicvoidsetTitle(Stringtitle){

this.title=title;

}


}


这里就可以舍弃掉Teacher.hbm.xml.利用两个注解就可以搞定,但是在Hibernate.cfg.xml中要加入

<!--这种方式是利用注解的方式-->

<mappingclass="com.hibernate.model.Teacher"/>


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息