【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)

来源:互联网 发布:nginx源码阅读 编辑:程序博客网 时间:2024/05/25 21:48
 

【Hibernate框架开发之二】第一个Hibernate-Annonation项目(采用@Entity、@Id直接映射实体类)

分类: 【SSH之Hibernate框架】 2224人阅读 评论(0) 收藏 举报
hibernate框架stringsessionclassnull


本站文章均为 李华明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类,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
packagecom.himi;
 
publicclass People {
 
    privateint id;
    privateString name;
    privateint age;
    privateString title;
    privateString birthday;
 
    publicint getId() {
        returnid;
    }
    publicvoid setId(intid) {
        this.id = id;
    }
    publicString getName() {
        returnname;
    }
    publicvoid setName(String name) {
        this.name = name;
    }
    publicint getAge() {
        returnage;
    }
    publicvoid setAge(intage) {
        this.age = age;
    }
    publicString getTitle() {
        returntitle;
    }
    publicvoid setTitle(String title) {
        this.title = title;
    }
    publicString getBirthday() {
        returnbirthday;
    }
    publicvoid setBirthday(String birthday) {
        this.birthday = birthday;
    }
 
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> use hibernate;
Readingtableinformation forcompletion oftable and column names
You can turn offthis feature toget a quicker startup with-A
 
Databasechanged
mysql>createtable people(id intprimary key,namevarchar(20),ageint,title varchar(20), birthday varchar(20) );
Query OK, 0 rowsaffected (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   |       |
+----------+-------------+------+-----+---------+-------+
5rowsin set (0.01 sec)

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
packagecom.himi;
 
importjavax.persistence.Entity;
importjavax.persistence.Id;
 
@Entity
publicclass People {
 
    privateint id;
    privateString name;
    privateint age;
    privateString title;
    privateString birthday;
 
    @Id
    publicint getId() {
        returnid;
    }
    publicvoid setId(intid) {
        this.id = id;
    }
    publicString getName() {
        returnname;
    }
    publicvoid setName(String name) {
        this.name = name;
    }
    publicint getAge() {
        returnage;
    }
    publicvoid setAge(intage) {
        this.age = age;
    }
    publicString getTitle() {
        returntitle;
    }
    publicvoid setTitle(String title) {
        this.title = title;
    }
    publicString getBirthday() {
        returnbirthday;
    }
    publicvoid setBirthday(String birthday) {
        this.birthday = birthday;
    }
 
}

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

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

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

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

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

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

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

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.cfg.AnnotationConfiguration;
importorg.hibernate.cfg.Configuration;
 
importcom.himi.People;
 
publicclass MainTestPeople {
 
    /**
     * @param args
     */
    publicstatic void main(String[] args) {
        People people = newPeople();// 新建我们需要存储的类对象,并且设置其对象的一些属性
        people.setId(2);
        people.setName("Himi");
        people.setAge(22);
        people.setTitle("CTO");
        people.setBirthday("1990-01-01");
 
        // Configuration主要用以读取配置文件
        //AnnotationConfiguration 专用于读取与Annotation相关的配置
        Configuration cfg = newAnnotationConfiguration();
        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;

运行结果:

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

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

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

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


0 0
原创粉丝点击