你好,游客 登录 注册 搜索
背景:
阅读新闻

Hibernate 注解案例

[日期:2012-12-26] 来源:Linux社区  作者:ch656409110 [字体: ]

一、介绍

在以前弄hibernate的时候,每创建一个数据库表都要在entity下 新建对应的*.hbm.xml 配置文件,当数据库表很多之后就会严重影响开发效率和维护成本,所以 就有了注解,原理在于 省去之前繁琐的配置文件,取代的是在实体类中加上以“@”开头的标记,命之为 注解,待会一一解释其中含义:

二、准备

jar 文件:

hibernate-core-3.3.2.GA.jar

ejb3-persistence-1.0.2.GA.jar

hibernate-annotations-3.4.0.GA.jar

hibernate-commons-annotations-3.1.0.GA.jar

javassist-3.11.0.GA.jar

(缺一不可)

三、实现

package com.hibernate.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


/**
 * 电影详情类
 * @author Administrator
 *
 */
@Entity  //标记为 数据库表
@Table(name = "tb_film_info")  // 指定该实体类映射的对应的数据库表名
public class FilmInfo implements Serializable{

 private static final long serialVersionUID = 1L;

 private Long fiId;
 private String fiName;
 private String fiActor;
 private String fiDirector;
 private Double fiTicketPrice;
 
 private FilmType filmType;
 
 @Id  //主键id
 @SequenceGenerator(name = "generator", sequenceName = "seq_film_info" )  //指定序列
 @GeneratedValue(generator = "generator", strategy = GenerationType.SEQUENCE) //指定主键生成策略 
 @Column(name = "fi_id")  //因为数据表中的结构都是以“_”分割,然后 hibernate默认识别方式没有以任何方式分割,所以每个列都要在getter()方法标记
 public Long getFiId() {
  return fiId;
 }
 public void setFiId(Long fiId) {
  this.fiId = fiId;
 }
 @Column(name = "fi_name")
 public String getFiName() {
  return fiName;
 }
 public void setFiName(String fiName) {
  this.fiName = fiName;
 }
 @Column(name = "fi_actor")
 public String getFiActor() {
  return fiActor;
 }
 public void setFiActor(String fiActor) {
  this.fiActor = fiActor;
 }
 @Column(name = "fi_director")
 public String getFiDirector() {
  return fiDirector;
 }
 public void setFiDirector(String fiDirector) {
  this.fiDirector = fiDirector;
 }
 @Column(name = "fi_ticket_price")
 public Double getFiTicketPrice() {
  return fiTicketPrice;
 }
 public void setFiTicketPrice(Double fiTicketPrice) {
  this.fiTicketPrice = fiTicketPrice;
 }
 @ManyToOne(fetch = FetchType.LAZY)  //多对一关联关系,采用@ManyToOne标记,指定下加载方式
 @JoinColumn(name = "fi_film_type_id")  //指定下 关联的外键
 public FilmType getFilmType() {
  return filmType;
 }
 public void setFilmType(FilmType filmType) {
  this.filmType = filmType;
 }
}

 

package com.hibernate.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * 电影类型类
 * @author Administrator
 *
 */
@Entity//标记为 数据库表
@Table(name = "tb_film_type")// 指定该实体类映射的对应的数据库表名 
public class FilmType implements Serializable{

 private static final long serialVersionUID = 1L;
 
 private Long ftId;
 private String ftName;

 private List<FilmInfo> filmInfos = new ArrayList<FilmInfo>();
 
 @Id
 @SequenceGenerator(name = "generator", sequenceName = "seq_film_type")
 @GeneratedValue(generator = "generator", strategy = GenerationType.SEQUENCE)
 @Column(name = "ft_id")
 public Long getFtId() {
  return ftId;
 }
 public void setFtId(Long ftId) {
  this.ftId = ftId;
 }
 @Column(name = "ft_name")
 public String getFtName() {
  return ftName;
 }
 public void setFtName(String ftName) {
  this.ftName = ftName;
 }
 
 @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)  //一对多关联关系,指定级联方式
 @JoinColumn(name = "fi_film_type_id")  // 这里指定 tb_Film_info 表的主键id,和引用tb_film_type表的外键都可以。
 public List<FilmInfo> getFilmInfos() {
  return filmInfos;
 }
 public void setFilmInfos(List<FilmInfo> filmInfos) {
  this.filmInfos = filmInfos;
 }
 
}

 

基本就是这个样子,然后以前使用hibernate映射文件配置获得SessionFactory 的方式是Configuration 的实例,但是使用hibernate注解之后要使用AnnotationConfiguration 的实例,如下:

 //第一次加载该类才会执行,仅仅一次
 static{
 /*  当使用的是entity.hbm.xml 映射文件时,就使用下面的方式读取配置文件
   Configuration configuration = new Configuration().configure();
  sessionFactory = configuration.buildSessionFactory();
 */
 /*  如果实体类使用的是注解完成的,就使用下面的方式完成读取配置信息*/
  AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration().configure();
  sessionFactory = annotationConfiguration.buildSessionFactory();
 }

其他的实现方式 和以前是一样的。

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款