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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
6天前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
18 1
|
6天前
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
14 1
|
6天前
|
SQL 缓存 Java
Java一分钟之-Hibernate:ORM框架实践
【5月更文挑战第15天】Hibernate是Java的ORM框架,简化数据库操作。本文列举并解决了一些常见问题: 1. 配置SessionFactory,检查数据库连接和JDBC驱动。 2. 实体类需标记主键,属性映射应匹配数据库列。 3. 使用事务管理Session,记得关闭。 4. CRUD操作时注意对象状态和查询结果转换。 5. 使用正确HQL语法,防止SQL注入。 6. 根据需求配置缓存。 7. 懒加载需在事务内处理,避免`LazyInitializationException`。理解和避免这些问题能提升开发效率。
25 0
|
6天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
6天前
|
Java 数据库连接
错误org.hibernate.AnnotationException: No identifier specified for entity
请根据你的实际情况,将实体类中的字段和注解进行适当的调整,以确保每个实体类都有一个明确定义的标识符(主键)。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
18 0
|
6天前
|
SQL Java 关系型数据库
数据库访问:什么是Hibernate框架?
【4月更文挑战第15天】Hibernate是开源ORM框架,将Java对象与数据库表映射,简化对象-关系映射,提升开发效率和性能。它自动化处理数据操作,支持多种数据库,自动生成SQL,提供配置选项和高级特性,减少手动SQL编写,便于切换数据库。
26 2
|
6天前
|
Java 数据库连接
hibernate注解实体类(Emp.java)
hibernate注解实体类(Emp.java)
18 1
|
6天前
|
JavaScript Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
24 0
|
6天前
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
56 0