文档章节

创建实体类使用Hibernate

secondriver
 secondriver
发布于 2015/09/17 09:27
字数 979
阅读 10
收藏 0

 

   目前我们在使用Hibernate的时候往往先建立关系型数据表,这样的方式其实是没有正真体现Hibernate操作的内涵。

   合理的操作应该是建立实体类来生成关系型数据表,然后根据操作对象来操作数据表,这里的数据表对于开发者而言是绝对的透明的。

   Hibernate轻量级框架的使用就是为了提高开发效率,使用操作对象的方式来达到操作关系型数据库,正真的达到万物皆对象。

   下面是我采用手工的方式从正面使用Hibernate。

    1.创建Hibernate项目工程,即JavaWeb工程或者Java工程

    2.创建自定义类库,添加工程中要使用到的Jar包

     参见:自定义用户类库的方法 

   3.创建POJO即java实体类

     


  
  1. package xiao.zhang.hbean; 
  2.  
  3. import java.util.Date; 
  4.  
  5. public class Person { 
  6.  
  7.     private String perId; 
  8.     private String perName; 
  9.     private Date creatTime; 
  10.  
  11.     public Person() { 
  12.         super(); 
  13.     } 
  14.  
  15.     public Person(String perId, String perName, Date creatTime) { 
  16.         super(); 
  17.         this.perId = perId; 
  18.         this.perName = perName; 
  19.         this.creatTime = creatTime; 
  20.     } 
  21.  
  22.     //getter() setter() 

   4.创建实体类Person的配置文件,Person.hbm.xml

     放在实体类的目录下; 到Hibernate的实例工程中拷贝模版修改即可.

     


  
  1. <?xml version="1.0"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  5. <hibernate-mapping package="org.hibernate.auction"> 
  6.  
  7.     <class name="xiao.zhang.hbean.Person" table="Person" lazy="true" schema="dbo" catalog="ext"> 
  8.         <id name="perId"> 
  9.             <generator class="uuid" /> 
  10.         </id> 
  11.         <property name="perName"> 
  12.             <column name="perNamee" length="20" ></column> 
  13.         </property> 
  14.         <property name="creatTime"> 
  15.             <column name="creatTime"></column> 
  16.         </property> 
  17.     </class> 
  18. </hibernate-mapping> 

 5.将Person.hbm.xml文件添加到hibernate.cfg.xml文件中的映射中。

   在hibernate.cfg.xml文件中配置数据库连接信息。

   


  
  1. <?xml version='1.0' encoding='UTF-8'?> 
  2. <!DOCTYPE hibernate-configuration PUBLIC 
  3.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  4.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
  5.  
  6.     <!-- Generated by MyEclipse Hibernate Tools.   --> 
  7. <hibernate-configuration> 
  8.  
  9.     <session-factory> 
  10.         <property name="dialect"> 
  11.             org.hibernate.dialect.SQLServerDialect 
  12.     </property> 
  13.         <property name="hibernate.connection.username">sa</property> 
  14.         <property name="hibernate.connection.password">sa</property> 
  15.         <property name="hibernate.connection.url"> 
  16.             jdbc:sqlserver://localhost:1433;databaseName=ext 
  17.     </property> 
  18.         <property name="hibernate.connection.driver_class"> 
  19.             com.microsoft.sqlserver.jdbc.SQLServerDriver 
  20.     </property> 
  21.         <property name="hibernate.show_sql">true</property> 
  22.  
  23.         <mapping resource="xiao/zhang/hbean/Person.hbm.xml" /> 
  24.     </session-factory> 
  25.  
  26. </hibernate-configuration> 

注意手工配置:添加相应的数据库方言。

并且将Person.hbm.xml文件的资源路径添加到mapping映射中去。

6.编写一个将Person类生成为数据库表的类

 


  
  1. import org.hibernate.cfg.Configuration; 
  2. import org.hibernate.tool.hbm2ddl.SchemaExport; 
  3. public class HBCreateTable { 
  4.  
  5.     /** 
  6.      * @param args 
  7.      */ 
  8.     public static void main(String[] args) { 
  9.         Configuration   cfg=new Configuration().configure(); 
  10.          
  11.         SchemaExport sexport=new SchemaExport(cfg); 
  12.         sexport.create(truetrue); 
  13.     } 

Configuration().configure()默认加载hibernate.cfg.xml;如果有改动则需要在configure方法中传入资源路径字符串

运行后生成在数据库中生成Person表。生成数据库中的表名在Person.hbm.xml文件中定义。

程序执行的SQL语句如下:



  
  1. drop table ext.dbo.Person 
  2. create table ext.dbo.Person (perId varchar(255) not null, perNamee varchar(20) null, creatTime datetime nullprimary key (perId)) 

数据库中的情况如下图:


7.编写程序,对对象进行操作。



  
  1. import java.util.Date; 
  2. import org.hibernate.SessionFactory; 
  3. import org.hibernate.cfg.Configuration; 
  4. import org.hibernate.Session; 
  5.  
  6. public class TestPeson { 
  7.  
  8.     /** 
  9.      * @param args 
  10.      */ 
  11.     public static void main(String[] args) { 
  12.         Configuration cfg = new Configuration().configure(); 
  13.         SessionFactory sf = cfg.buildSessionFactory(); 
  14.  
  15.         Session session = null
  16.         try { 
  17.             session = sf.openSession(); 
  18.             session.beginTransaction(); 
  19.             //**************************// 
  20.              
  21.              
  22.             //*************************// 
  23.             session.getTransaction().commit(); 
  24.  
  25.         } catch (Exception e) { 
  26.             session.getTransaction().rollback(); 
  27.             if (session != null) { 
  28.                 if (session.isOpen()) { 
  29.                     session.close(); 
  30.                 } 
  31.             } 
  32.  
  33.         } 
  34.     } 

基本的操作框架如上面的代码,下面的操作代码添加到//*******//这里//*******//

向数据库中Person表中添加20个Person对象



  
  1. for(int i=0; i<20; i++){ 
  2.                 Person p = new Person(); 
  3.                 p.setPerName("name_"+i); 
  4.                 p.setCreatTime(new Date()); 
  5.                 System.out.println(p.toString()); 
  6.                 session.save(p);     
  7.             } 

控制太打印输出的SQL语句为:


  
  1. Person [creatTime=Fri Jul 20 03:14:59 CST 2012, perId=null, perName=name_0] 
  2. Person [creatTime=Fri Jul 20 03:14:59 CST 2012, perId=null, perName=name_1] 
  3. Person [creatTime=Fri Jul 20 03:14:59 CST 2012, perId=null, perName=name_2] 
  4. Person [creatTime=Fri Jul 20 03:14:59 CST 2012, perId=null, perName=name_3] 
  5. .......................................................... 
  6. Person [creatTime=Fri Jul 20 03:14:59 CST 2012, perId=null, perName=name_19] 

上面是创建的每一个对象的信息


  
  1. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  2. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  3. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  4. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  5. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  6. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  7. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  8. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  9. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 
  10. Hibernate: insert into ext.dbo.Person (perNamee, creatTime, perId) values (?, ?, ?) 


一共有20条向数据库插入数据的操作。


数据库的显示:

 

本文出自 “野马红尘” 博客,谢绝转载!

© 著作权归作者所有

secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
初始Hibernate4.3-01

关于Hinernate三个非常重要的类,配置类(Configuration)、会话工厂类(SessionFactory)、会话类(Session)。 配置类:Configuration 配置类主要负责管理Hibernate的配置信息以及启动信息。如:...

Mr_K
2016/06/22
72
0
如何完全根据官方下载包搭建hibernate框架

  好久没有用s2sh的框架了,最近业务需要又要拾起来。在搭框架时,发现之前都是复制配置文件,对具体的细节却很懵懂,所以要从新来一遍,也是一次新的学习。   我使用的版本是hibernate...

宇的季节
2017/11/21
0
0
Spring Boot中使用Spring-data-jpa

为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:Hibernate。通过整合Hibernate之后,我们以操作Java实体的方式最终将数据改变映射到数据库表中。 为了解决抽象各...

architect刘源源
2018/01/14
0
0
Hibernate注解(一)类级别注解

1、Hibernate注解简介 2、JPA与Hibernate的关系 3、Hibernate注解分类 4、@Entity 5、@Table 6、@Embeddable 7、schema与catalog 一、Hibernate注解简介 使用注解的目的:为了简化繁琐的ORM...

leeqico
2018/06/28
0
0
hibernate中get/load有什么区别

Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于:  1.如果...

hanzhankang
2014/02/10
98
0

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
5
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部