nullITeye - AG环亚娱乐集团

nullITeye

2019年03月13日08时38分18秒 | 作者: 云天 | 标签: | 浏览: 2091

在运用注解开发数据库耐久层曾经,需求学习一个标准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"。
 
  例如:
  @OneToMany(targetEntity = FundAllocationImpl.class, cascade = CascadeType.ALL, mappedBy = "policy")
  @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
  @JoinColumn(name = "policyId")
  private Set FundAllocation allocations = new HashSet FundAllocation
 
  @ManyToOne(targetEntity = InsurancePolicyImpl.class, fetch = FetchType.LAZY)
  @JoinColumn(name = "policyId")
  private InsurancePolicy policy;
  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 Org 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 Org getChildOrgSet() { 
  return childOrgSet; 
  } 
 
  public void setChildOrgSet(Set Org childOrgSet) { 
  this.childOrgSet = childOrgSet; 
  } 


  四,当然用了注解的开发方式,咱们的中心装备文件就需求我修改了,这儿就需求Hibernate的AnnotationSessionFactoryBean工厂类了,

span ! Hibernate中心目标  
  bean id="sessionFactory"  
  !省掉……  
  !指定进行了Hibernate注解开发的包,便利结构进行扫描设置  
  property name="packagesToScan"  
  list  
  value com/ljh/ppp/domain /value  
  /list  
  /property  
/span  
这样Hibernate结构的注解开发基本上就算结束了,
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章