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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

 紧接上一篇,这里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,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
23 1
|
4月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
70 4
|
4月前
|
SQL Java 数据库连接
Hibernate 批量操作来袭!掌握最佳实践,轻松应对数据洪流,开启高效开发新时代
【9月更文挑战第3天】在软件开发中,高效数据操作至关重要。作为流行的Java持久化框架,Hibernate提供了强大的数据库操作功能。本文探讨了Hibernate批量操作,包括批量插入、更新和删除的最佳实践,通过使用原生SQL和`Session`的`createNativeQuery()`方法,结合`addBatch()`及`executeBatch()`方法实现高效批量操作。合理设置批量大小、事务管理和性能测试是优化的关键。在实际开发中,应根据业务需求和性能要求选择合适的方法,以提升程序性能和可维护性。
264 3
|
5月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
69 1
|
5月前
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
95 0
|
5月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
324 0
|
5月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
59 0
|
5月前
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
171 0
|
5月前
|
缓存 Java 数据库连接
|
5月前
|
SQL Java 数据库连接
Hibernate实体类的要求是什么?
【8月更文挑战第21天】
79 0