Hibernate中注解的開發


轉自:https://blog.csdn.net/liujiahan629629/article/details/22335563

在利用注解開發數據庫持久層以前,需要學習一個規范JPA(Java Persistence API),這也是SUN公司提出的數據庫的持久化規范。就類似於JDBC,Servlet,JSP等規范一樣。而hibernate框架就實現了此規范,我們可以通過注解和配置文件來實現此規范。前邊的學習都是建立在配置文件的基礎上,而注解開發現在也處於一種趨勢,畢竟它大大提高了開發速度。

 

        看一下注解在Hibernate框架中的開發知識。

 

        一,首先需要導入支持注解開發的jar包:

hibernate-annotations.jar

hibernate-commons-annotations.jar (Hibernate中支持注解開發的jar包)

 

ejb3-persistence.jar(API規范的jar包)

 

slf4j/slf4j-api-1.5.0.jar

slf4j-log4j12-1.5.0.jar

log4j-1.2.15.jar  (支持日志輸出的jar包,注意版本的匹配)

 

        二,在Hibernate框架進行注解開發時,主要是代替實體和數據表的映射文件,而核心配置文件中的,數據庫的連接等等,還是需要xml配置文件,進行配置的。先看一下Hibernate中常用的注解:

 

           1,@Entity : 表示當前的類為實體類,聲明在類的前面。可以將當前類和數據庫的表和字段進行關聯映射。

 

           2,@Table:表示映射的表,聲明在類的前面

 

           3,@Id:表示主鍵的映射,聲明在主鍵的get方法前邊,默認情況下主鍵利用assigned(用戶提供)生成策略。如果想要設置API規范提供了四種主鍵生成策略:

@GeneratedValue(strategy=GenerationType.AUTO)      相當於Hibernate框架的native主鍵生成策略

@GeneratedValue(strategy=GenerationType.IDENTITY)  相當於Hibernate框架的identity主鍵生成策略,適用於MySQL,SQL Server

@GeneratedValue(strategy=GenerationType.SEQUENCE)  相當於Hibernate框架的sequence主鍵生成策略,適用於Oracle,DB2

@GeneratedValue(strategy=GenerationType.TABLE)     使用一張單表管理主鍵值。

         默認情況下API規范是不支持Hibernate框架中的uuid的主鍵生成策略,假如我們想要使用,需要我們進行增加主鍵生成器,如下:

@GenericGenerator(name="hibernate-uuid",strategy="uuid")

@GeneratedValue(generator="hibernate-uuid")

 

           4,@Column : 表示映射屬性,和表的字段進行關聯

 

           5,@ManyToOne : 表示映射關系中的多對一

 

           6,@JoinColumn : 表示外鍵映射屬性,和表的外鍵字段進行關聯

 

           7,@OneToMany : 表示映射關系中的一對多,這里需要注意,一對多時,外鍵的維護需要翻轉交給多的一方進行維護,需要配置反轉屬性mappedBy,屬性取值為多的一方的映射屬性名稱。相當於xml配置文件中的Inverse="true"。

 

           8,@OrderBy : 表示排序字段

 

           9,@Transient : 表示聲明瞬時屬性,不和數據庫的字段發生關聯,也就是沒有表中列與之映射。

 

         等等吧,其實我感覺這些屬性和xml配置文件屬性都是一一對應的,及時不一樣,也會有與之類似的屬性進行實現其功能,所以我們可以對比着使用。當然這里只是一些常用的,當我們需要時還需要我們查看文檔進行編寫。

        

          三,看一個簡單的利用主鍵開發的實體類吧,這里就不需要我們再編寫配置文件了:

 

  1 <span style="font-size:18px;">@Entity
  2 @Table(name="t_org")
  3 public class Org {
  4 
  5     private String id;
  6     private String name;
  7     private String code;
  8     private String manager;
  9     private String remark;
 10     private String createtime;
 11     private String updatetime;
 12     
 13     private OrgType orgType;
 14     
 15     private String pid;
 16     
 17     @Transient
 18     public String getPid() {
 19         return pid;
 20     }
 21 
 22     public void setPid(String pid) {
 23         this.pid = pid;
 24     }
 25 
 26     private Org parentOrg;
 27     
 28     private Set<Org> childOrgSet ;
 29 
 30     @Id
 31     @GenericGenerator(name="hibernate-uuid", strategy="uuid")
 32     @GeneratedValue(generator="hibernate-uuid")
 33     public String getId() {
 34         return id;
 35     }
 36 
 37     public void setId(String id) {
 38         this.id = id;
 39     }
 40 
 41     public String getName() {
 42         return name;
 43     }
 44 
 45     public void setName(String name) {
 46         this.name = name;
 47     }
 48 
 49     public String getCode() {
 50         return code;
 51     }
 52 
 53     public void setCode(String code) {
 54         this.code = code;
 55     }
 56 
 57     public String getManager() {
 58         return manager;
 59     }
 60 
 61     public void setManager(String manager) {
 62         this.manager = manager;
 63     }
 64 
 65     public String getRemark() {
 66         return remark;
 67     }
 68 
 69     public void setRemark(String remark) {
 70         this.remark = remark;
 71     }
 72 
 73     @Column(updatable=false)
 74     public String getCreatetime() {
 75         return createtime;
 76     }
 77 
 78     public void setCreatetime(String createtime) {
 79         this.createtime = createtime;
 80     }
 81 
 82     @Column(insertable=false)
 83     public String getUpdatetime() {
 84         return updatetime;
 85     }
 86 
 87     public void setUpdatetime(String updatetime) {
 88         this.updatetime = updatetime;
 89     }
 90 
 91     @ManyToOne
 92     @JoinColumn(name="orgTypeId")
 93     public OrgType getOrgType() {
 94         return orgType;
 95     }
 96 
 97     public void setOrgType(OrgType orgType) {
 98         this.orgType = orgType;
 99     }
100 
101     @ManyToOne
102     @JoinColumn(name="pid", updatable=false)
103     public Org getParentOrg() {
104         return parentOrg;
105     }
106 
107     public void setParentOrg(Org parentOrg) {
108         this.parentOrg = parentOrg;
109     }
110 
111     @OneToMany(mappedBy="parentOrg")
112     @JoinColumn(name="pid")
113     @OrderBy("code")
114     public Set<Org> getChildOrgSet() {
115         return childOrgSet;
116     }
117 
118     public void setChildOrgSet(Set<Org> childOrgSet) {
119         this.childOrgSet = childOrgSet;
120     }
121 }
122 </span>

 

 

 

3.

四,當然用了注解的開發方式,我們的核心配置文件就需要我修改了,這里就需要Hibernate的AnnotationSessionFactoryBean工廠類了,

 

 1 <span style="font-size:18px;"> <!-- Hibernate核心對象 -->
 2     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 3           <!--省略……-->
 4          <!--指定進行了Hibernate注解開發的包,方便框架進行掃描設置-->
 5          <property name="packagesToScan">
 6             <list>
 7                 <value>com/ljh/ppp/domain</value>
 8             </list>
 9         </property>
10 </span>

 

 

 

這樣Hibernate框架的注解開發基本上就算完畢了,總體感覺是比較高效的。我們沒寫一個類一個方法,順便將注解編寫了,這樣我們就不用專門用來編寫映射文件了。掌握好注解的開發,在很多時候可以大大提高我們的效率。當然還有其它框架的注解運用,后邊總結。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM