程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Annotation(二)——Hibernate中注解的開發

Annotation(二)——Hibernate中注解的開發

編輯:C++入門知識

在利用注解開發數據庫持久層以前,需要學習一個規范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配置文件屬性都是一一對應的,及時不一樣,也會有與之類似的屬性進行實現其功能,所以我們可以對比著使用。當然這裡只是一些常用的,當我們需要時還需要我們查看文檔進行編寫。

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

@Entity
@Table(name="t_org")
public class Org {

	private String id;
	private String name;
	private String code;
	private String manager;
	private String remark;
	private String createtime;
	private String updatetime;
	
	private OrgType orgType;
	
	private String pid;
	
	@Transient
	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	private Org parentOrg;
	
	private Set childOrgSet ;

	@Id
	@GenericGenerator(name="hibernate-uuid", strategy="uuid")
	@GeneratedValue(generator="hibernate-uuid")
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getManager() {
		return manager;
	}

	public void setManager(String manager) {
		this.manager = manager;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	@Column(updatable=false)
	public String getCreatetime() {
		return createtime;
	}

	public void setCreatetime(String createtime) {
		this.createtime = createtime;
	}

	@Column(insertable=false)
	public String getUpdatetime() {
		return updatetime;
	}

	public void setUpdatetime(String updatetime) {
		this.updatetime = updatetime;
	}

	@ManyToOne
	@JoinColumn(name="orgTypeId")
	public OrgType getOrgType() {
		return orgType;
	}

	public void setOrgType(OrgType orgType) {
		this.orgType = orgType;
	}

	@ManyToOne
	@JoinColumn(name="pid", updatable=false)
	public Org getParentOrg() {
		return parentOrg;
	}

	public void setParentOrg(Org parentOrg) {
		this.parentOrg = parentOrg;
	}

	@OneToMany(mappedBy="parentOrg")
	@JoinColumn(name="pid")
	@OrderBy("code")
	public Set getChildOrgSet() {
		return childOrgSet;
	}

	public void setChildOrgSet(Set childOrgSet) {
		this.childOrgSet = childOrgSet;
	}
}


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

 
    
          
         
         
            
                com/ljh/ppp/domain
            
        


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved