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