转自:https://blog.csdn.net/liujiahan629629/article/details/22335563

在利用注解开发数据库持久层以前,需要学习一个规范JPA(JavaPersistence 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配置文件属性都是一一对应的,及时不一样,也会有与之类似的属性进行实现其功能,所以我们可以对比着使用。当然这里只是一些常用的,当我们需要时还需要我们查看文档进行编写。

三,看一个简单的利用主键开发的实体类吧,这里就不需要我们再编写配置文件了:

 <span style="font-size:18px;">@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>

3.

四,当然用了注解的开发方式,我们的核心配置文件就需要我修改了,这里就需要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框架的注解开发基本上就算完毕了,总体感觉是比较高效的。我们没写一个类一个方法,顺便将注解编写了,这样我们就不用专门用来编写映射文件了。掌握好注解的开发,在很多时候可以大大提高我们的效率。当然还有其它框架的注解运用,后边总结。

Hibernate中注解的开发的更多相关文章

  1. Annotation(二)——Hibernate中注解的开发

    在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hi ...

  2. hibernate使用注解简化开发

    简述 在编写hibernate的时候,需要将实体类映射到数据库中的表.通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml) ...

  3. 【JavaWeb】Servlet3.0中注解驱动开发

    一.概述 二.@WebServlet注解 三.共享库/运行时插件 2.1 注册Servlet 2.2 注册监听器 2.3 注册过滤器 一.概述 Servlet3.0中引入了注解开发 二.@WebSer ...

  4. 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法

    近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ...

  5. Hibernate中使用@Lob 注解保存String[] 问题

    Hibernate中使用@Lob 注解保存String[] 问题 在Hibernate注解中怎样你想保存一个字段为String数组类型.假设你想尝试保存为clob类型的话,普通情况下为定义为: @En ...

  6. 走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

    原文地址:Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate ...

  7. MVC5中Model层开发数据注解

    ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...

  8. 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

    原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...

  9. hibernate中1对1的注解配置

    hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public c ...

随机推荐

  1. linux memcached php 整合

    http://blog.csdn.net/liruxing1715/article/details/8269563

  2. go module

    前言 go 1.5 引进了vendor管理工程依赖包,但是vendor的存放路径是在GOPATH底下,另外每个依赖还可以有自己的vendor,通常会弄得很乱,尽管dep管理工具可以将vendor平级化 ...

  3. CentOS6.5安装MySQL5.6 过程记录

    刚开始,还不太懂,直接上了MySQL5.7版本的二进制安装,结果遇到了各种问题,从5.6到5.7还是做了很大改变的,比如mysql_install_db的文件位置变更到了/bin文件下等等,觉得现在用 ...

  4. 【BZOJ4843】[Neerc2016]Expect to Wait 排序

    [BZOJ4843][Neerc2016]Expect to Wait Description ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 ...

  5. vue如何做分页?

    原创作品转载请注明出处 先来看一下效果图:    功能描述: 1. 点击页面序号跳转到相应页面: 2. 点击单左/单右,向后/向前跳转一个页面: 3. 点击双左/双右,直接跳转到最后一页/第一页: 3 ...

  6. Elasticsearch基本语法

    match和match_phrase区别 match: 索引中只要有任意一个匹配拆分后词就可以出现在结果中,只是匹配度越高的排越前面 match_phrase: 索引中必须同时匹配拆分后词就可以出现在 ...

  7. 【模板】区间第k小

    [模板]区间第k小 我实在是太弱了现在才会这个东西QAQ. 主席树做法. 一张关于主席树的无字说明 线段树\(2\)是只单点修改了实心酒红色点的线段树\(2\),线段树\(2\)中的蓝色节点实际上就是 ...

  8. python manage.py shell 的增删改查

    python manage.py shell 的增删改查 guoguo-MacBook-Pro:myblog guoguo$ python manage.py shell Python 3.5.1 ( ...

  9. 如何使用doctrine:migrations:migrate

    doctrine:migrations:migrate: 可以生成数据库表 当新建完实体之后需要执行 doctrine:migrations:diff 更新差异到db 然后就ok了,这时候你的app/ ...

  10. jforum二次开发教程

    环境准备: 一.Tomcat服务器     首先需要在本地搭建tomcat.tomcat搭建过程本人博客中有,不再重复纪录.因为开始没有搭建成功,浪费了一定时间.   二.Mysql服务器     在 ...