Annotation(二)——Hibernate中注解的开发
来源:互联网 发布:中大网络续费后 编辑:程序博客网 时间:2024/05/16 16:11
在利用注解开发数据库持久层以前,需要学习一个规范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;@Transientpublic 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工厂类了,
<!-- Hibernate核心对象 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <!--省略……--> <!--指定进行了Hibernate注解开发的包,方便框架进行扫描设置--> <property name="packagesToScan"> <list> <value>com/ljh/ppp/domain</value> </list> </property>
这样Hibernate框架的注解开发基本上就算完毕了,总体感觉是比较高效的。我们没写一个类一个方法,顺便将注解编写了,这样我们就不用专门用来编写映射文件了。掌握好注解的开发,在很多时候可以大大提高我们的效率。当然还有其它框架的注解运用,后边总结。
- Annotation(二)——Hibernate中注解的开发
- Annotation(二)——Hibernate中注解的开发
- JEE之Annotation(二)——Hibernate中注解的开发
- Annotation——Hibernate中注解的开发
- Hibernate的Annotation注解
- Hibernate的Annotation注解
- Hibernate的Annotation注解
- Hibernate的Annotation注解
- Hibernate的Annotation注解
- Hibernate的Annotation注解
- Hibernate 注解(Annotation) 的配置
- Hibernate的Annotation中实体BLOB、CLOB类型的注解
- Hibernate的Annotation中实体BLOB、CLOB类型的注解
- Hibernate中,One2One的基于注解Annotation的实现
- Hibernate中,One2Many的基于注解Annotation的实现
- Hibernate中,Many2One的基于注解Annotation的实现
- Hibernate中注解的开发
- hibernate Annotation中,实体BLOB、CLOB类型的注解
- hdu 1257 最少拦截系统 动态规划
- Linux查看CPU和内存使用情况
- Mac&iOS Socket
- 2014.3各大软件(互联网)公司实习面试题
- body背景图片的拉伸效果
- Annotation(二)——Hibernate中注解的开发
- 详解 Android 中 Menu 的三种类型
- SD卡与fatfs文件系统(4)
- NetBeans部署项目(Extjs)报错(一)
- C#中的委托delegate
- 基于OpenLayer地块标识信息查询功能Javascript类定义
- 上次机试, 栽倒在求最值的问题上, 哎
- 精选30道Java笔试题解答
- 单引号需要敲两次才能输入