⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用hibernate和spring开发事务持久层.htm

📁 在java中使用Hibernate和Spring开发事务持久层
💻 HTM
📖 第 1 页 / 共 4 页
字号:
                        <P>  清单 1. 将 Java 类映射到 DB 表<BR>  [User.java]</P>
                        <P style="BACKGROUND: #eeeeee">/**<BR>&nbsp;* 
                        @hibernate.class table="TBL_USER"<BR>&nbsp;* 
                        ..<BR>&nbsp;* ..<BR>&nbsp;* ...<BR>&nbsp;*/<BR>public 
                        class User {<BR><BR>&nbsp;private Long id = new 
                        Long(-1);<BR>&nbsp;private String 
                        email;<BR>&nbsp;private String 
                        password;<BR>&nbsp;<BR>&nbsp;.<BR>&nbsp;.<BR>&nbsp;.<BR><BR>&nbsp;/**<BR>&nbsp; 
                        * @return<BR>&nbsp; * @hibernate.id column="PK_USER_ID" 
                        <BR>&nbsp; * unsaved-value="-1" <BR>&nbsp; * 
                        generator-class="native"&nbsp; <BR>&nbsp; 
                        */<BR>&nbsp;public Long getId() {<BR>&nbsp;&nbsp;return 
                        id;<BR>&nbsp;}<BR><BR>&nbsp;...<BR><BR>&nbsp;/**<BR>&nbsp; 
                        * @hibernate.property column="VC_EMAIL" <BR>&nbsp; * 
                        type="string" <BR>&nbsp; * update="false"<BR>&nbsp; * 
                        insert="true"<BR>&nbsp; * unique="true"<BR>&nbsp; * 
                        not-null="true"<BR>&nbsp; * length="82" <BR>&nbsp; * 
                        @return<BR>&nbsp; */<BR>&nbsp;public String getEmail() 
                        {<BR>&nbsp;&nbsp;return 
                        email;<BR>&nbsp;}<BR><BR>&nbsp;/**<BR>&nbsp; * 
                        @hibernate.property column="VC_PASSWORD" <BR>&nbsp; * 
                        type="string" <BR>&nbsp; * update="false"<BR>&nbsp; * 
                        insert="true"<BR>&nbsp; * unique="true"<BR>&nbsp; * 
                        not-null="true"<BR>&nbsp; * length="20" <BR>&nbsp; * 
                        @return<BR>&nbsp; */<BR>&nbsp;public String 
                        getPassword() {<BR>&nbsp;&nbsp;return 
                        password;<BR>&nbsp;}<BR><BR>&nbsp;...<BR>&nbsp;...<BR>&nbsp;...<BR>}</P>
                        <P>  可以看到,@hibernate.class table="TBL_USER" 标签将 User 映射到 
                        TBL_USER 表。@hibernate.property column="VC_PASSWORD" 将 
                        JavaBean 属性 password 映射到 VC_PASSWORD 列。@hibernate.id 
                        column="PK_USER_ID" 标签声明id 
                        属性是主键,它将使用本机(generator-class="native")数据库机制生成键(例如,Oracle 
                        sequences 和 SQL Server Identity 键)。Hibernate 可以指定 
                        generator-class="native" 以外的、其他可以想象的得到主键获得策略,不过我更愿意使用 
                        native。type 和 length 属性用于从 Hibernate *.hbm.xml OR 
                        映射文件生成表。这些 final 属性是可选的,因为使用的可能不是 green-field 
                        数据库。在这个例子中,已经有数据库了,所以不需要额外的属性。(green-field 应用程序 
                        是一个新的应用程序, green-field 数据 
                        是新应用程序的一个新数据库。不会经常开发一个全新的应用程序,不过偶尔有一两次也不错)。</P>
                        <P>  看过了表如何映射到类以及列如何映射到 JavaBean 属性,该使用 Hibernate 在 OR 
                        数据库中设置一些关系了。</P>
                        <P>  <STRONG>设置对象关系</STRONG></P>
                        <P>  在本节中,我将只触及 Hibernate 提供的设置对象间关系的选项的一小部分。首先设置像 
                        User、User Group、Roles 和 ContactInfo 这些类之间的关系。其中一些关系如图 1 
                        所示,这是数据库的验证对象模型。</P>
                        <P align=center><IMG height=286 
                        src="用Hibernate和Spring开发事务持久层.files/20041223180912100.jpg" 
                        width=600><BR>图 1. 关系的图示</P>
                        <P>  如您所见,在上述抽象中存在各种各样的关系。User 与 ContactInfo 
                        有一对一关系。ContactInfo 的生命周期与 User 相同(用数据库的术语,UML 中的组成 aka 
                        级联删除)。如果删除 User,则相应的 ContactInfo 也会删除。在 Users 与 Roles 
                        之间存在多对多关系(即与独立生命周期相关联)。在 Groups 与 Users 
                        之间存在一对多关系,因为组有许多用户。用户可以存在于组外,即是 aggregation 而不是 
                        composition (用数据库的说法,在 Groups 和 Users 
                        之间没有级联删除关系)。此外,User 和 Employee 有子类关系,就是说,Employee 的类型为 
                        User。表 1 显示了如何用 XDoclet 标签创建一些不同类型的对象关系。</P>
                        <DIV align=center>表 1. 用 XDoclet 创建对象关系</DIV>
                        <TABLE cellSpacing=1 cellPadding=1 width=690 
                        align=center bgColor=#999999 border=0>
                          <TBODY>
                          <TR bgColor=#ffffff>
                            <TD align=middle height=25><STRONG>关系</STRONG></TD>
                            <TD align=middle 
                              height=25><STRONG>Java/XDoclet</STRONG></TD>
                            <TD align=middle height=25><STRONG>SQL DDL(由 
                              Hibernate Schema Export 生成的 MySQL)</STRONG></TD></TR>
                          <TR bgColor=#ffffff>
                            <TD 
                              height=25><STRONG>组包含用户</STRONG><BR>一对多<BR>Aggregation<BR>双向<BR>(Group&lt;--&gt;Users)</TD>
                            <TD height=25>[Group.java]<BR>/**<BR>* <BR>* 
                              @return<BR>* <BR>* @hibernate.bag 
                              name="users"<BR>* cascade="save-update"<BR>* 
                              lazy="true"<BR>* inverse="true"<BR>* <BR>* 
                              @hibernate.collection-key <BR>* 
                              column="FK_GROUP_ID"<BR>* <BR>* 
                              @hibernate.collection-one-to-many <BR>* 
                              class="net.sf.hibernateExamples.User"<BR>*/<BR>public 
                              List getUsers() {<BR>return users;<BR>} 
                              <P>[User.java]<BR>/**<BR>* @hibernate.many-to-one 
                              <BR>* column="FK_GROUP_ID" <BR>* 
                              class="net.sf.hibernateExamples.Group"<BR>*/<BR>public 
                              Group getGroup() {<BR>return group;<BR>}</P></TD>
                            <TD height=25>create table TBL_USER 
                              (<BR>PK_USER_ID BIGINT NOT NULL 
                              AUTO_INCREMENT,<BR>USER_TYPE VARCHAR(255) not 
                              null,<BR>FK_GROUP_ID BIGINT,<BR>VC_EMAIL 
                              VARCHAR(82) not null unique,<BR>primary key 
                              (PK_USER_ID)<BR>) 
                              <P><BR>create table TBL_GROUP (<BR>PK_GROUP_ID 
                              BIGINT NOT NULL AUTO_INCREMENT,<BR>VC_DESCRIPTION 
                              VARCHAR(255),<BR>VC_NAME VARCHAR(40) 
                              unique,<BR>primary key (PK_GROUP_ID)<BR>)</P>
                              <P>alter table TBL_USER add index (FK_GROUP_ID), 
                              <BR>add constraint FK_111 foreign key 
                              (FK_GROUP_ID) <BR>references TBL_GROUP 
                              (PK_GROUP_ID)</P></TD></TR>
                          <TR bgColor=#ffffff>
                            <TD 
                              height=25><STRONG>用户有联系信息</STRONG><BR>一对一<BR>Composition 
                              <BR>单向<BR>(User--&gt;ContactInfo)</TD>
                            <TD height=25>[User.java]<BR>/**<BR>* @return<BR>* 
                              <BR>* @hibernate.one-to-one cascade="all" <BR>* 
                              <BR>*/<BR>public ContactInfo getContactInfo() 
                              {<BR>return contactInfo;<BR>} 
                              <P>[ContactInfo.java]<BR>(Nothing to see here. 
                              Unidirectional!)</P></TD>
                            <TD height=25>create table TBL_USER 
                              (<BR>PK_USER_ID BIGINT NOT NULL 
                              AUTO_INCREMENT,<BR>USER_TYPE VARCHAR(255) not 
                              null,<BR>FK_GROUP_ID BIGINT,<BR>VC_EMAIL 
                              VARCHAR(82) not null unique,<BR>primary key 
                              (PK_USER_ID)<BR>) 
                              <P>create table TBL_CONTACT_INFO 
                              (<BR>PK_CONTACT_INFO_ID BIGINT not 
                              null,<BR>...<BR>...<BR>...<BR>primary key 
                              (PK_CONTACT_INFO_ID)<BR>)</P></TD></TR>
                          <TR bgColor=#ffffff>
                            <TD 
                              height=25><STRONG>用户与角色关联</STRONG><BR>多对多<BR>Association<BR>单向<BR>(Users--&gt;Roles)</TD>
                            <TD height=25>[User.java]<BR>/**<BR>* @return<BR>* 
                              @hibernate.bag <BR>* 
                              table="TBL_JOIN_USER_ROLE"<BR>* cascade="all"<BR>* 
                              inverse="true"<BR>* <BR>* 
                              @hibernate.collection-key <BR>* 
                              column="FK_USER_ID"<BR>* <BR>* 
                              @hibernate.collection-many-to-many <BR>* 
                              class="net.sf.hibernateExamples.Role" <BR>* 
                              column="FK_ROLE_ID"<BR>* <BR>*/<BR>public List 
                              getRoles() {<BR>return roles;<BR>} 
                              <P>[Role.java]<BR>Nothing to see here. 
                              Unidirectional!</P></TD>
                            <TD height=25>create table TBL_ROLE 
                              (<BR>PK_ROLE_ID BIGINT NOT NULL 
                              AUTO_INCREMENT,<BR>VC_DESCRIPTION 
                              VARCHAR(200),<BR>VC_NAME VARCHAR(20),<BR>primary 
                              key (PK_ROLE_ID)<BR>) 
                              <P>create table TBL_USER (<BR>PK_USER_ID BIGINT 
                              NOT NULL AUTO_INCREMENT,<BR>USER_TYPE VARCHAR(255) 
                              not null,<BR>FK_GROUP_ID BIGINT,<BR>VC_EMAIL 
                              VARCHAR(82) not null unique,<BR>primary key 
                              (PK_USER_ID)<BR>)</P>
                              <P>create table TBL_JOIN_USER_ROLE (<BR>FK_USER_ID 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -