在利用注解开发数据库持久层以前,需要学习一个规范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 style="font-size:18px;"> <!-- Hibernate核心对象 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!--省略……-->
<!--指定进行了Hibernate注解开发的包,方便框架进行扫描设置-->
<property name="packagesToScan">
<list>
<value>com/ljh/ppp/domain</value>
</list>
</property>
</span>
这样Hibernate框架的注解开发基本上就算完毕了,
分享到:
相关推荐
IOC之基于注解的配置bean(上) ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/category/3073841
hibernate的注解开发 注解开发关联映射 HQL、QBC、本地SQL检索数据
通过@Bean 和spring的factoryBean注入的bean. 以及对应@service注解注入的类 通过@Autowired 注入对象的时间是现根据类型在根据beanName获取的案例集合
基于注解驱动的Struts_Spring_Hibernate开发 实例详解
Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
基于注解的开发,很重要,开发中经常用,通过注解能够很快找到controler并对请求处理进行暴露
基于spring+springmvc+hibernate的全注解开发,在与数据库打交道的过程中不需要写繁琐的配置文件,仅通过相关的注解即可。
自定义注解得使用,模拟spring通过注解方式创建bean实例!
JavaEE 使用注解配置Bean的一个示例
hibernate注解说明文档,hibernate注解说明文档
基于注解的spring struts hibernate 示例工程 基于注解的spring struts hibernate 示例工程
介绍使用Hibernate注解来进行关联关系的配置,结合我的博客文章阅读更方便理解。
使用hibernate注解,必须要使用库hibernate-commons-annotations,hibernate-core,hibernate-jpa,ejb3-persistence,javassist等
hibernate注解开发所需的jar包 包括 ejb3-persistance.jar、hibernate-commons-annotations.jar、hibernate-annotations.jar
一个很好的的学习struts2+spring+hibernate 实例。思路很新颖。包含一个很好的分页代码。基于hibernate的Annotations方式配置。代码很完整。实例中包含数据库文件。
spring2.5向spring3过渡,必学零配置注解实现Bean定义。
Hibernate 注解的说明文档,有pdf和html.工具类文档
基于Hibernate开发的商城网站,注解齐全,实现增改查功能,适合初学者,并通过该项目练习Hibernate