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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

紧接上一篇,这里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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
29天前
ssm使用全注解实现增删改查案例——Dept
ssm使用全注解实现增删改查案例——Dept
16 0
|
29天前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——实体层(User.java)
mybatis简单案例源码详细【注释全面】——实体层(User.java)
13 0
|
29天前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——实体层(Role.java)
mybatis简单案例源码详细【注释全面】——实体层(Role.java)
7 0
|
29天前
|
Java 数据库连接 网络安全
mybatis使用全注解的方式案例(包含一对多关系映射)
mybatis使用全注解的方式案例(包含一对多关系映射)
12 0
|
8月前
|
Java 数据库连接 数据库
深入解析Java中的MyBatis Plus注解 @TableName:简化数据表映射
在基于Java的持久层开发中,数据库表与实体类之间的映射是一个重要而繁琐的工作。MyBatis Plus作为一款优秀的ORM框架,提供了许多便利的注解和功能来简化这一过程。本文将重点介绍MyBatis Plus中的`@TableName`注解,它在表名与实体类之间建立了重要的桥梁,使得数据表映射更加简单和灵活。
1343 0
|
SQL Java
Spring-data-jpa EntityManager封装通用Dao
由于在项目中添加新的业务,该项目使用jpa 但是表结构不是这个项目产生,所以使用jpa实体管理器(EntityManager)封装了一个通用的Dao sql封装类 package com.
4547 0