Annotation(二)——Hibernate中注解的开发
在利用注解开发数据库持久层以前,需要学习一个规范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; @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;
}
}
</span>

四,当然用了注解的开发方式,我们的核心配置文件就需要我修改了,这里就需要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>
</bean>

Annotation(二)——Hibernate中注解的开发的更多相关文章
- Hibernate中注解的开发
		转自:https://blog.csdn.net/liujiahan629629/article/details/22335563 在利用注解开发数据库持久层以前,需要学习一个规范JPA(JavaPe ... 
- 【JavaWeb】Servlet3.0中注解驱动开发
		一.概述 二.@WebServlet注解 三.共享库/运行时插件 2.1 注册Servlet 2.2 注册监听器 2.3 注册过滤器 一.概述 Servlet3.0中引入了注解开发 二.@WebSer ... 
- hibernate使用注解简化开发
		简述 在编写hibernate的时候,需要将实体类映射到数据库中的表.通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml) ... 
- 多线程编程之二 ---MFC中的多线程开发
		下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ... 
- 002-Spring4 快速入门-项目搭建、基于注解的开发bean,Bean创建和装配、基于注解的开发bean,Bean初始化销毁、Bean装配,注解、Bean依赖注入
		一.项目搭建 1.项目创建 eclipse→project explorer→new→Project→Maven Project 默认配置即可创建项目 2.spring配置 <dependenc ... 
- 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
		近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ... 
- SpringMVC笔记:annotation注解式开发
		一.配置式开发 在我们之前的学习中,springmvc使用配置式开发模式,需要在核心配置文件中springmvc.xml注册大量的bean来注入controller控制器,工作繁琐容易出错,下面我们学 ... 
- Hibernate基于注解annotation的配置
		Annotation在框架中是越来越受欢迎了,因为annotation的配置比起XML的配置来说方便了很多,不需要大量的XML来书写,方便简单了很多,只要几个annotation的配置,就可以完成我们 ... 
- 【Spring注解驱动开发】面试官:如何将Service注入到Servlet中?朋友又栽了!!
		写在前面 最近,一位读者出去面试前准备了很久,信心满满的去面试.没想到面试官的一个问题把他难住了.面试官的问题是这样的:如何使用Spring将Service注入到Servlet中呢?这位读者平时也是很 ... 
随机推荐
- lesson5:Condition的原理分析及demo展示
			Condition 将 Object 监视器方法(wait,notify,和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待 set(wa ... 
- Gulp 简单的开发环境搭建
			//获取gulp //require()是 node (CommonJS)中获取模块的语法 var gulp=require('gulp'); //获取gulp-concat模块(用于合并文件):np ... 
- Java基础知识强化65:基本类型包装类之Integer的构造方法
			1. Integer类概述 (1)Integer类在对象中包装了一个基本类型 int 的值,Integer类型的对象包含一个int类型的字段. (2)该类提供了多个方法,能在int类型和String类 ... 
- XtraBackup做mysql主从同步
			一.背景: 线上一个主库压力比较大,所以增加一个从库,但是不能重启或者停止主库的正常运行,不能锁库锁表影响业务的正常运行.所以这里想到了XtraBackup 二.XtraBackup介绍: Xtrab ... 
- SQL Profiler工具简介
			一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问 ... 
- Android(工具・集成)
			■ NDK Android从始(2009)至终是支持JNI的. 只不过一开始没有NDK.需要自己安装交叉编译器创建so,然后放到assert之类捆绑so发布. 有了NDK.有了什么? libc lib ... 
- FeatureClass的"import"(转换)功能
			/// <summary> /// FeatureClass的"import"功能. /// </summary> /// <param name=& ... 
- mysql 分区表详解
			项目中要一张库表实现 list分区.并且支持多种数据库. oracle 很顺利,只是mysql 听说5.1版本就已经支持了, 可是试了很多个版本,都不行,后来查到原因是要5.5 以上版本 分区才支持 ... 
- Asp.Net--主题/皮肤文件
			主题 是皮肤的集合.皮肤描述了控件应该如何显示,它可以定义样式的属性,图片,颜色等. 如果拥有多个主题,用户可以根据需要选择主题来显示站点,这只需要通过点击按钮,从一个皮肤切换到另一个皮肤. 皮肤文件 ... 
- Ajax--WebService返回List
			WebService: using System.Web.Script.Services; [GenerateScriptType(typeof(people))] [WebMethod] publi ... 
