(七)利用Annotation开发Hibernate

        在Hibernate设计的初期,考虑到配置文件与程序相分离的特点,所以来讲定义出了一系列的*.hbm.xml文件目的是让简单java类与数据表的字段进行一个有效的验证,

        可是却产生了一个严重的问题--在任何一个中大型的项目之中,数据表至少会存在有几百个,如果所有的简单Java类都要定义一个完全与之对应的*.hbm.xml文件,那么这回项目就乱了,整个项目完成之后就同时存在有几百个配置文件,要从几百个配置文件之中选择所需要的内容,并且很多时候还会存在有关联问题.

        随后在Java行业内考虑到了数据层的操作问题,所以推出了一个JPA的操作标准(Java持久 化API),在JPA里面提供有一系列的Annotation的配置操作,也就是说利用Annotation就可以实现与*.hbm.xml文件理论上等价的形式,现在的Hibernte开发很少再去直接使用*.hbm.xml文件完成,全部都使用Annotation的配置完成,

        特别需要提示的:在行业之中还有一个JAP的开发框架,如果已经清楚了Hibernate的所有Annotation的配置,你就会使JPA了,也就会使EJB3.x了

        Hibernate从3.2版本增加了Annotation的支持,


  选择这个随后就将生成支持与Annotation(JPA标准)的POJO类

        当添加完Annotation支持的映射操作之后,首先会发现在hiberante.cfg.xml文件里面出现如下配置

<mapping class="cn.zwb.pojo.Member" />

        那么随后最关键的部分就在于POJO类的生成上了.

package cn.zwb.pojo;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity   //表示这个一个数据实体类型
@Table(name = "member", catalog = "aaa")  //映射的数据表名称

public class Member implements java.io.Serializable {

	// Fields

	private String mid;
	private String name;
	private Integer age;
	private Double salary;
	private Date birthday;
	private String note;

	// Constructors

	/** default constructor */
	public Member() {
	}

	/** minimal constructor */
	public Member(String mid) {
		this.mid = mid;
	}

	/** full constructor */
	public Member(String mid, String name, Integer age, Double salary, Date birthday, String note) {
		this.mid = mid;
		this.name = name;
		this.age = age;
		this.salary = salary;
		this.birthday = birthday;
		this.note = note;
	}

	// Property accessors
	@Id  //设置主键属性

	@Column(name = "mid",   //主键列的名称
	unique = true,       //是否为唯一
	nullable = false, 	//是否允许为空
	length = 50)  		//字段长度

	public String getMid() {   //setter没有变化
		return this.mid;
	}

	public void setMid(String mid) {
		this.mid = mid;
	}

	@Column(name = "name", length = 50)

	public String getName() {
		return this.name;
	}

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

	@Column(name = "age")

	public Integer getAge() {
		return this.age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Column(name = "salary", precision = 22, scale = 0)

	public Double getSalary() {
		return this.salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

	@Temporal(TemporalType.DATE)   //定义的是一个日期型的操作
	@Column(name = "birthday", length = 10)

	public Date getBirthday() {
		return this.birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Column(name = "note", length = 65535)

	public String getNote() {
		return this.note;
	}

	public void setNote(String note) {
		this.note = note;
	}

}

        整个JPA的标准就是直接在简单Java类上明确的表示出每一个getter()方法对应的数据列.

范例:测试程序

package cn.zwb.test;

import java.util.Date;

import cn.zwb.dbc.HibernateSessionFactory;
import cn.zwb.pojo.Member;

public class TestMemberInsert {
	public static void main(String[] args) {
		Member member=new Member();
		member.setMid("啦啦啦");
		member.setAge(13);
		member.setBirthday(new Date());
		member.setName("zwb");
		member.setNote("66666");
		System.out.println(HibernateSessionFactory.getSession().save(member));
		HibernateSessionFactory.getSession().beginTransaction().commit();
		HibernateSessionFactory.closeSession();
	}
}

        使用Annotation配置的项目更加的简单


猜你喜欢

转载自blog.csdn.net/qq1019648709/article/details/80732129