【Hibernate框架开发之二】采用@Entity、@Id直接映射实体类

  1. 云栖社区>
  2. 博客>
  3. 正文

【Hibernate框架开发之二】采用@Entity、@Id直接映射实体类

余二五 2017-11-07 14:08:00 浏览600
展开阅读全文

紧接上一篇,这里Himi直接copy上一篇创建的HelloHibernate项目,然后改名为:HelloAnnonation,Ok;

 OK,准备工作:

首先第一步,继续再我们自定义的user libraries 中添加Annotation所需的包,如下3个jar包(共11个包):

               /hibernate-annotations-3.4.0.GA/hibernate-annotations.jar     (核心包)

               /hibernate-annotations-3.4.0.GA/lib/ejb3-persistence.jar   (jpa)

               /hibernate-annotations-3.4.0.GA/lib/hibernate-commons-annotations.jar   (反射所需的包)

如下图 ;

然后我们新建一个People类,如下:

 


  1. package com.himi; 
  2.  
  3. public class People { 
  4.  
  5.     private int id; 
  6.     private String name; 
  7.     private int age; 
  8.     private String title; 
  9.     private String birthday; 
  10.  
  11.     public int getId() { 
  12.         return id; 
  13.     } 
  14.     public void setId(int id) { 
  15.         this.id = id; 
  16.     } 
  17.     public String getName() { 
  18.         return name; 
  19.     } 
  20.     public void setName(String name) { 
  21.         this.name = name; 
  22.     } 
  23.     public int getAge() { 
  24.         return age; 
  25.     } 
  26.     public void setAge(int age) { 
  27.         this.age = age; 
  28.     } 
  29.     public String getTitle() { 
  30.         return title; 
  31.     } 
  32.     public void setTitle(String title) { 
  33.         this.title = title; 
  34.     } 
  35.     public String getBirthday() { 
  36.         return birthday; 
  37.     } 
  38.     public void setBirthday(String birthday) { 
  39.         this.birthday = birthday; 
  40.     } 
  41.  

最后准备工作在我们数据库中新建一个对应映射people实体类的表:(不赘述,直接看操作过程)

 


  1. mysql> use hibernate; 
  2. Reading table information for completion of table and column names 
  3. You can turn off this feature to get a quicker startup with -A 
  4.  
  5. Database changed 
  6. mysql> create table people(id int primary key, name varchar(20),age int ,title varchar(20), birthday varchar(20) ); 
  7. Query OK, 0 rows affected (0.06 sec) 
  8.  
  9. mysql> describe people; 
  10. +----------+-------------+------+-----+---------+-------+ 
  11. | Field    | Type        | Null | Key | Default | Extra | 
  12. +----------+-------------+------+-----+---------+-------+ 
  13. | id       | int(11)     | NO   | PRI | NULL    |       | 
  14. | name     | varchar(20) | YES  |     | NULL    |       | 
  15. | age      | int(11)     | YES  |     | NULL    |       | 
  16. | title    | varchar(20) | YES  |     | NULL    |       | 
  17. | birthday | varchar(20) | YES  |     | NULL    |       | 
  18. +----------+-------------+------+-----+---------+-------+ 
  19. 5 rows in set (0.01 sec) 

准备工作完成之后,那么如果通常我们会建立People.hbm.xml来对应数据库的组件和属性,然后将People在hibernate.cfg.xml配置文件中使用mapping resource声明我们有一个被加了映射,People是实体类;

但是本篇我们使用Annotation将不再创建对应的实体类对应数据库的xml,而是直接在People类中声明实体类就可以啦,修改People.java文件如下:

 


  1. package com.himi; 
  2.  
  3. import javax.persistence.Entity; 
  4. import javax.persistence.Id; 
  5.  
  6. @Entity 
  7. public class People { 
  8.  
  9.     private int id; 
  10.     private String name; 
  11.     private int age; 
  12.     private String title; 
  13.     private String birthday; 
  14.  
  15.     @Id 
  16.     public int getId() { 
  17.         return id; 
  18.     } 
  19.     public void setId(int id) { 
  20.         this.id = id; 
  21.     } 
  22.     public String getName() { 
  23.         return name; 
  24.     } 
  25.     public void setName(String name) { 
  26.         this.name = name; 
  27.     } 
  28.     public int getAge() { 
  29.         return age; 
  30.     } 
  31.     public void setAge(int age) { 
  32.         this.age = age; 
  33.     } 
  34.     public String getTitle() { 
  35.         return title; 
  36.     } 
  37.     public void setTitle(String title) { 
  38.         this.title = title; 
  39.     } 
  40.     public String getBirthday() { 
  41.         return birthday; 
  42.     } 
  43.     public void setBirthday(String birthday) { 
  44.         this.birthday = birthday; 
  45.     } 
  46.  

仔细观察,发现只有两处有改动,就是添加了一个 @Entity  和 @Id

@Entity   表示本类是个实体类,是javax.persistence.Entity

@Id   在组件getId ()函数上约定俗成加入注解 @Id

接着我们继续在hibernate.cfg.xml配置文件中声明我们的People是个映射实体类:

 


  1. <mapping resource="com/himi/Teacher.hbm.xml"/> <!-- 这里是将需要mapping的文件进行再次声明 --> 
  2.  
  3. <mapping class="com.himi.People"/> <!-- 这里是声明我们的People是个映射实体类--> 

上面的Teacher是上一篇介绍的,People是本篇中新建的实体类, 务必注意,两种方式的区别

  一个是      mapping resource , 一个是 mapping class  ;

             一个路径是  com/himi/Teacher.hbm.xml   一个路径的 com.himi.People ;

 

    最后一步,新建一个测试People的man类,名字为MainTestPeople.java:

 


  1. import org.hibernate.Session; 
  2. import org.hibernate.SessionFactory; 
  3. import org.hibernate.cfg.AnnotationConfiguration; 
  4. import org.hibernate.cfg.Configuration; 
  5.  
  6. import com.himi.People; 
  7.  
  8. public class MainTestPeople { 
  9.  
  10.     /** 
  11.      * @param args 
  12.      */ 
  13.     public static void main(String[] args) { 
  14.         People people = new People();// 新建我们需要存储的类对象,并且设置其对象的一些属性 
  15.         people.setId(2); 
  16.         people.setName("Himi"); 
  17.         people.setAge(22); 
  18.         people.setTitle("CTO"); 
  19.         people.setBirthday("1990-01-01"); 
  20.  
  21.         // Configuration主要用以读取配置文件 
  22.         //AnnotationConfiguration 专用于读取与Annotation相关的配置 
  23.         Configuration cfg = new AnnotationConfiguration(); 
  24.         SessionFactory sf = cfg.configure().buildSessionFactory(); 
  25.         // 这里注意了,cfg.configure()读取配置文件的时候,如果你的hibernate的文件名不采用默认的“hibernate.cfg.xml”的话,那么这里传入你定义的配置文件路径 
  26.         // buildSessionFactory();得到一个创建Session的工场 
  27.         Session ss = sf.openSession();// 这里的Session导入import 
  28.                                         // org.hibernate.Session;不要使用class经典的,因为可能会过时 
  29.         ss.beginTransaction();// OK,将操作放入事务中 
  30.         ss.save(people);// 保存你的对象 
  31.         ss.getTransaction().commit();// 得到事务并提交 
  32.  
  33.         ss.close();// Session关闭 
  34.         sf.close();// 工厂关闭 
  35.     } 

仔细以上观看代码,与上一篇测试我们的Teacher 一致,唯一要注意的是 Configuration的实例:

不使用Annotation实例配置对象,我们采用如下获取Configuration:

Configuration cfg = new Configuration();

使用Annotation时,我们采用如下获取Configuration:

 Configuration cfg = new AnnotationConfiguration();

OK, 右键MainTestPeople, run as -> Java  application;

运行结果:

 


  1. Hibernate: insert into People (age, birthday, name, title, id) values (?, ?, ?, ?, ?) 

ok,监测一下数据库的People表内是否已经成功插入了信息:

 


  1. mysql> select *from people; 
  2. +----+------+------+-------+------------+ 
  3. | id | name | age  | title | birthday   | 
  4. +----+------+------+-------+------------+ 
  5. |  1 | Himi |   23 | CTO   | 1990-01-01 | 
  6. |  2 | Himi |   22 | CTO   | 1990-01-01 | 
  7. +----+------+------+-------+------------+ 
  8. 2 rows in set (0.00 sec) 

没问题。本篇介绍Annotation第一个项目就到这里,比较eazy,而且Annotation使用起来相当方便!





本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/969774,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注