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   (反射所需的包)

如下图 ;

12.png

然后我们新建一个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使用起来相当方便!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Union-SQL Server学习笔记

1、简单笔记 数据库查询语句中&#xff0c;通过UNION组合查询语句&#xff0c;可以将两个或更多查询的结果组合为单个结果集&#xff0c;该结果集包含组合查询中的所有查询的全部行。 利用UNION语句可以实现将不同数据表中符合条件&#xff0c;不同列种的数据信息&#xff0c;显…

从Java集成Active Directory

首先&#xff0c;您将需要设置Active Directory&#xff0c;以便可以运行和测试代码。 如果&#xff08;像我一样&#xff09;没有一台装有Windows Server的计算机&#xff0c;那么即使在Mac OSX上&#xff0c;也可以通过这种方法设置Active Directory。 您要做的第一件事是在…

编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装

mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到cmake来进行编译了&#xff0c;编译的过程没有本质mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到c…

云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时&#xff0c;而且是发生在读取开始的字节&#xff0c;甚至在socket写数据时&#xff08;比如写入缓存key&#xff09;也会出现超过50ms的情况&#xff0c;我们的好奇心被激发到一个新的高度。 根据我们的实测…

Cobertura和Sonar 5.1的问题

最近&#xff0c;我有些麻烦&#xff0c;试图在我的Grails 2.4.4项目中使用Sonar 5.1。 我使用的是Groovy常用的东西&#xff1a; Gmetrics&#xff0c;Codenarc和Cobertura 。 对于Sonar数据库&#xff0c;我使用的是Postgres 9.4 。 声纳跑步者的日志文件给了我这个&#xf…

centos6.4 卸载mysql_彻底删除MYSQL-CENTOS

yum remove mysql mysql-server mysql-libs compat-mysql51rm -rf /var/lib/mysqlrm /etc/my.cnf查看是否还有mysql软件&#xff1a;rpm -qa|grep mysql有的话继续删除RPM方式安装MySQL5.6a. 检查MySQL及相关RPM包&#xff0c;是否安装&#xff0c;如果有安装&#xff0c;则移除…

ARIMA模型建模步骤

ARIMA模型建模步骤一. 绘制时序图判断序列是否有明显的趋势或周期二. 单位根检验检验方法ADFDFGLSPPKPSSERSNP前三种有有关常数与趋势项假设&#xff0c;应用不方便&#xff0c;建议少用。后三种是去除原序列趋势后进行检验&#xff0c;应用方便。原假设6种方法除KPPS外&#x…

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域&#xff0c;多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能&#xff0c;以满足用户多样化的需求。针对这一市场趋势&#xff0c;唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C&#xff0c;实现了单…

rabbitmq订单模块_RabbitMQ播放模块! 构架

rabbitmq订单模块RabbitMQ提供了具有可预测且一致的吞吐量和延迟的高可用性&#xff0c;可伸缩和便携式消息传递系统。 RabbitMQ是AMQP &#xff08;业务消息传递的开放标准&#xff09;的领先实现 &#xff0c;并且通过适配器支持XMPP&#xff0c;SMTP&#xff0c;STOMP和HTTP…

mysql as join_mysql as 别名与 join 多表连接语法

在MySQL中&#xff0c;使用AS关键字为字段、表、视图取别名&#xff0c;或者不用as&#xff0c;用空格隔开&#xff1a;SELECT (SELECT id a,title b FROM blog c limit 1)d;使用字段别名&#xff0c;可以帮助我们有效的组织查询的输出结果。---------------------------------…

'固定' table宽度,走起!

为了让表格能够填充屏幕(剩余空白区域)&#xff0c;常将其宽度属性定义为&#xff1a;100%&#xff0c;单元格也是用百分数来定义。 但这样就会出现问题&#xff1a; 如果单元格中的文本超过宽度限制&#xff0c;就会自动换行&#xff0c;高度自动增高&#xff0c;导致整个表格…

python中view的用法_APIview使用

ModelVIewSet 是对 APIView 封装ModelSerializer 是对 Serializer1.1 在user/urls.py中添加路由urlpatterns [ path(apiview/, views.UserInfoViewSet.as_view()), ]1.2 创建user/serializers.py写序列化器serializers.ModelSerializer 和 serializers.Serializer field参数…

HDU 1597 find the nth digit (二分查找)

二分查找 1 #include<stdio.h>2 __int64 a[65555];3 void init()4 {5 a[0]0;6 for(int i1;i<65537;i)7 {8 a[i]a[i-1]i;9 } 10 } 11 int search(int n,int low,int high) 12 { 13 int temp(lowhigh)/2; 14 if(na[temp]) return temp-…

java 注解应用技巧_改善Java应用程序性能的快速技巧

java 注解应用技巧曾经遇到过性能问题吗&#xff1f; 我也是。 如果我的经理再喊一次“ faaaaster”&#xff0c;我一生都会有听力障碍。 顺便说一句&#xff0c;我能听到所有噪音中的德语发音吗&#xff1f; ;-) 您可以相信仍然有人无知地在谈论垃圾收集器&#xff08;得到它吗…

字符串系列函数(不断跟新)

1.sprintf,sprintf_s sprintf(char* buffer, const char* format, [argument]); vs下需要加上_CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int main() {char name[1];int input 9099;sprintf(name,"%d", input);system("pause&qu…

python获取指定区域的像素_如何获得某个区域的像素值?

因此&#xff0c;由于我对编程比较陌生&#xff0c;所以我需要一些帮助来解决这个问题。我在Windows计算机上使用SimpleCV和python2.7。我要做的是让一个(自写)程序告诉我沿着一条预设线的像素值&#xff0c;这里最重要的是每个像素的颜色。在我真的不知道从哪里开始&#xff0…

Windows 键盘操作快捷方式积累

复制、粘贴&#xff1a; CTRLC 复制被选择的项目到剪贴板 CTRLV 粘贴剪贴板中的内容到当前位置 CTRLX 剪切被选择的项目到剪贴板 Alt space E P CMD 窗口…

step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。

step7中的难点&#xff1a;间接寻址示例&#xff0c;中文详细注释。推荐欢迎纠错&#xff0c;防止误导。FUNCTION "DBtoDB" : VOID //该功能块的作用是把一个数据块中的指定的一批数据&#xff0c;复制到另一个块的指定位置。TITLE //标题&#xf…

spring mvc 教程_Spring MVC开发–快速教程

spring mvc 教程这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图…

今天才知道css hack是什么

先来个冷笑话&#xff1a;一晚下班回家&#xff0c;一民警迎面巡逻而来。突然对我大喊&#xff1a;站住&#xff01; 民警&#xff1a;int类型占几个字节? 我&#xff1a;4个。 民警&#xff1a;你可以走了。 我感到很诧异。 我&#xff1a;为什么问这样的问题&#xff1f; 民…