【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)
来源:互联网 发布:数据分类 编辑:程序博客网 时间:2024/06/08 15:51
本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/hibernate/789.html
☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
紧接上一篇,这里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类,如下:
package
com.himi;
public
class
People {
private
int
id;
private
String name;
private
int
age;
private
String title;
private
String birthday;
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age = age;
}
public
String getTitle() {
return
title;
}
public
void
setTitle(String title) {
this
.title = title;
}
public
String getBirthday() {
return
birthday;
}
public
void
setBirthday(String birthday) {
this
.birthday = birthday;
}
}
最后准备工作在我们数据库中新建一个对应映射people实体类的表:(不赘述,直接看操作过程)
mysql> use hibernate;
Reading
table
information
for
completion
of
table
and
column
names
You can turn
off
this feature
to
get a quicker startup
with
-A
Database
changed
mysql>
create
table
people(id
int
primary
key
,
name
varchar
(20),age
int
,title
varchar
(20), birthday
varchar
(20) );
Query OK, 0
rows
affected (0.06 sec)
mysql> describe people;
+
----------+-------------+------+-----+---------+-------+
| Field | Type |
Null
|
Key
|
Default
| Extra |
+
----------+-------------+------+-----+---------+-------+
| id |
int
(11) |
NO
| PRI |
NULL
| |
|
name
|
varchar
(20) | YES | |
NULL
| |
| age |
int
(11) | YES | |
NULL
| |
| title |
varchar
(20) | YES | |
NULL
| |
| birthday |
varchar
(20) | YES | |
NULL
| |
+
----------+-------------+------+-----+---------+-------+
5
rows
in
set
(0.01 sec)
准备工作完成之后,那么如果通常我们会建立People.hbm.xml来对应数据库的组件和属性,然后将People在hibernate.cfg.xml配置文件中使用mapping resource声明我们有一个被加了映射,People是实体类;
但是本篇我们使用Annotation将不再创建对应的实体类对应数据库的xml,而是直接在People类中声明实体类就可以啦,修改People.java文件如下:
package
com.himi;
import
javax.persistence.Entity;
import
javax.persistence.Id;
@Entity
public
class
People {
private
int
id;
private
String name;
private
int
age;
private
String title;
private
String birthday;
@Id
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age = age;
}
public
String getTitle() {
return
title;
}
public
void
setTitle(String title) {
this
.title = title;
}
public
String getBirthday() {
return
birthday;
}
public
void
setBirthday(String birthday) {
this
.birthday = birthday;
}
}
仔细观察,发现只有两处有改动,就是添加了一个 @Entity 和 @Id
@Entity 表示本类是个实体类,是javax.persistence.Entity
@Id 在组件getId ()函数上约定俗成加入注解 @Id
接着我们继续在hibernate.cfg.xml配置文件中声明我们的People是个映射实体类:
<
mapping
resource
=
"com/himi/Teacher.hbm.xml"
/>
<!-- 这里是将需要mapping的文件进行再次声明 -->
<
mapping
class
=
"com.himi.People"
/>
<!-- 这里是声明我们的People是个映射实体类-->
上面的Teacher是上一篇介绍的,People是本篇中新建的实体类, 务必注意,两种方式的区别:
一个是 mapping resource , 一个是 mapping class ;
一个路径是 com/himi/Teacher.hbm.xml 一个路径的 com.himi.People ;
最后一步,新建一个测试People的man类,名字为MainTestPeople.java:
import
org.hibernate.Session;
import
org.hibernate.SessionFactory;
import
org.hibernate.cfg.AnnotationConfiguration;
import
org.hibernate.cfg.Configuration;
import
com.himi.People;
public
class
MainTestPeople {
/**
* @param args
*/
public
static
void
main(String[] args) {
People people =
new
People();
// 新建我们需要存储的类对象,并且设置其对象的一些属性
people.setId(
2
);
people.setName(
"Himi"
);
people.setAge(
22
);
people.setTitle(
"CTO"
);
people.setBirthday(
"1990-01-01"
);
// Configuration主要用以读取配置文件
//AnnotationConfiguration 专用于读取与Annotation相关的配置
Configuration cfg =
new
AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
// 这里注意了,cfg.configure()读取配置文件的时候,如果你的hibernate的文件名不采用默认的“hibernate.cfg.xml”的话,那么这里传入你定义的配置文件路径
// buildSessionFactory();得到一个创建Session的工场
Session ss = sf.openSession();
// 这里的Session导入import
// org.hibernate.Session;不要使用class经典的,因为可能会过时
ss.beginTransaction();
// OK,将操作放入事务中
ss.save(people);
// 保存你的对象
ss.getTransaction().commit();
// 得到事务并提交
ss.close();
// Session关闭
sf.close();
// 工厂关闭
}
}
仔细以上观看代码,与上一篇测试我们的Teacher 一致,唯一要注意的是 Configuration的实例:
不使用Annotation实例配置对象,我们采用如下获取Configuration:
Configuration cfg = new Configuration();
使用Annotation时,我们采用如下获取Configuration:
Configuration cfg = new AnnotationConfiguration();
OK, 右键MainTestPeople, run as -> Java application;
运行结果:
Hibernate: insert into People (age, birthday, name, title,
id
) values (?, ?, ?, ?, ?)
ok,监测一下数据库的People表内是否已经成功插入了信息:
mysql>
select
*
from
people;
+
----+------+------+-------+------------+
| id |
name
| age | title | birthday |
+
----+------+------+-------+------------+
| 1 | Himi | 23 | CTO | 1990-01-01 |
| 2 | Himi | 22 | CTO | 1990-01-01 |
+
----+------+------+-------+------------+
2
rows
in
set
(0.00 sec)
没问题。本篇介绍Annotation第一个项目就到这里,比较eazy,而且Annotation使用起来相当方便!
- 【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)
- 【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)
- Hibernate框架学习之注解映射实体类
- Hibernate框架学习之注解映射实体类
- Hibernate(二)开发第一个hibernate基本详解
- 细谈Hibernate(二)开发第一个hibernate基本详解
- Hibernate 映射实体关联关系(二)
- Hibernate之@Entity,@Table,@Id
- hibernate实体类映射
- Hibernate映射实体类时解决没有ID的问题
- Hibernate之实体关系映射
- Hibernate之实体关系映射
- hibernate实体映射之讲解
- Hibernate 二 实体映射(一对一映射)
- Hibernate-----第一个hibernate项目
- 一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)
- 【HIbernate框架学习】:Hibernate对象关系映射之一对一关联映射(二)
- Hibernate总结之二实体与表的映射关系
- 前几天参加了云计算大会
- JSP使用
- 【Hibernate框架开发之一】搭建Hibernate环境并成功运行第一个项目HelloHibernate并解决3个常出现的运行问题;
- IBM RSA (IBM rational software architect ) V8 建模学习之六 C++类模板设计
- 使用HDFS上传
- 【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)
- 【iOS-cocos2d-X 游戏开发之十五】Cocos2dx中响应Android的Back(返回)与Menu(小房子)事件&&Cocos2dx自动释放粒子内存函数!
- 怎样从10亿查询词找出出现频率最高的10个
- 静态导入
- asp.net mvc winform benchmark
- 【iOS-cocos2d-X 游戏开发之十六】配置你的Cocos2dx项目编译后的Android自动使用(-hd)高清图&设置Android自适应屏幕、缩放比例方法!
- OAuth
- 我眼中的移动互联网(多原创视频)
- jquery入门第一课