Hibernate中注解的开发
转自: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中注解的开发的更多相关文章
- Annotation(二)——Hibernate中注解的开发
在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hi ...
- hibernate使用注解简化开发
简述 在编写hibernate的时候,需要将实体类映射到数据库中的表.通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml) ...
- 【JavaWeb】Servlet3.0中注解驱动开发
一.概述 二.@WebServlet注解 三.共享库/运行时插件 2.1 注册Servlet 2.2 注册监听器 2.3 注册过滤器 一.概述 Servlet3.0中引入了注解开发 二.@WebSer ...
- 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ...
- Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题 在Hibernate注解中怎样你想保存一个字段为String数组类型.假设你想尝试保存为clob类型的话,普通情况下为定义为: @En ...
- 走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
原文地址:Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate ...
- MVC5中Model层开发数据注解
ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...
- hibernate中1对1的注解配置
hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public c ...
随机推荐
- 【BZOJ】1003 Cards
[解析]Burnside引理+背包dp+乘法逆元 [Analysis] 这道题卡了好久,就是没想懂置换跟着色是不一样的. 依据burnside引理.在一个置换群作用下不等价类的个数为每一个置换作用下不 ...
- 【BZOJ1115】[POI2009]石子游戏Kam 阶梯博弈
[BZOJ1115][POI2009]石子游戏Kam Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要 ...
- js实现网页中的"运行代码"功能
<!DOCTYPE html> <html> <head> <meta charset='utf8' /> <title>网页中的运行代码功 ...
- Notepad++ QuickText 插件的 HTML 配置: \Notepad++\plugins\Config\QuickText.ini
# 缩写的注解 abbr=<abbr title=''>$</abbr> # 覆盖默认的文本方向 bdo=<bdo dir='rtl'>$</bdo> ...
- sed 简单用法
sed的一个简单用法: eg:在某一个文件中的一个aaa字段前后添加某些字段. 在aaa前面添加字段:sed -ne 's/aaa/&HELLO/p' test 输出结果:aaaHELLO 在 ...
- 编写你的第一个web应用程序1
在shell中运行以下命令来检查django是否已安装及其版本 python -m django --version 如果django已经安装,你应该看到安装的版本号,如果还没有安装,你会看到一个‘n ...
- js正則函數 match、exec、test、search、replace、split 使用介紹集合
match 方法 使用正則表達式模式對字元串執行查找,並將包含查找的結果作為數組返回. stringObj.match(rgExp) 參數 stringObj 必選項.對其進行查找的 String 對 ...
- Spring Boot 生成接口文档 swagger2
swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试. 另外swagger很容易构建restful风格的api,简单优 ...
- Java中的内存泄漏
[转]介绍Java中的内存泄漏 1. 什么是内存泄漏? 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 要想理解这个定义,我们需要先了解一下对象在内存中的 ...
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5 ,PHP5.6)支持。
本人预装了一个wamp的集成环境(Apache 2.4.9 + PHP 5.5.12 + mysql 5.6.17),今天在wamp环境下 添加PHP多版本 (PHP 5.5.30).中间两个过程,1 ...