python映射实体类_【HIBERNATE框架开发之二】第一个HIBERNATE-ANNONATION项目(采用@ENTITY、@ID直接映射实体类)...
緊接上一篇,這里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;
publicclassPeople{
privateintid;
privateStringname;
privateintage;
privateStringtitle;
privateStringbirthday;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicStringgetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Stringbirthday){
this.birthday=birthday;
}
}
最后準備工作在我們數據庫中新建一個對應映射people實體類的表:(不贅述,直接看操作過程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql>usehibernate;
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A
Databasechanged
mysql>createtablepeople(idintprimarykey,namevarchar(20),ageint,titlevarchar(20),birthdayvarchar(20));
QueryOK,0rowsaffected(0.06sec)
mysql>describepeople;
+----------+-------------+------+-----+---------+-------+
|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||
+----------+-------------+------+-----+---------+-------+
5rowsinset(0.01sec)
準備工作完成之后,那么如果通常我們會建立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
publicclassPeople{
privateintid;
privateStringname;
privateintage;
privateStringtitle;
privateStringbirthday;
@Id
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicStringgetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Stringbirthday){
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;
publicclassMainTestPeople{
/**
* @param args
*/
publicstaticvoidmain(String[]args){
Peoplepeople=newPeople();// 新建我們需要存儲的類對象,并且設置其對象的一些屬性
people.setId(2);
people.setName("Himi");
people.setAge(22);
people.setTitle("CTO");
people.setBirthday("1990-01-01");
// Configuration主要用以讀取配置文件
//AnnotationConfiguration 專用于讀取與Annotation相關的配置
Configurationcfg=newAnnotationConfiguration();
SessionFactorysf=cfg.configure().buildSessionFactory();
// 這里注意了,cfg.configure()讀取配置文件的時候,如果你的hibernate的文件名不采用默認的“hibernate.cfg.xml”的話,那么這里傳入你定義的配置文件路徑
// buildSessionFactory();得到一個創建Session的工場
Sessionss=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:insertintoPeople(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|
+----+------+------+-------+------------+
2rowsinset(0.00sec)
沒問題。本篇介紹Annotation第一個項目就到這里,比較eazy,而且Annotation使用起來相當方便!
總結
以上是生活随笔為你收集整理的python映射实体类_【HIBERNATE框架开发之二】第一个HIBERNATE-ANNONATION项目(采用@ENTITY、@ID直接映射实体类)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php与mysql连接程序_PHP与My
- 下一篇: python中view的用法_APIvi