博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate中注解的开发
阅读量:6262 次
发布时间:2019-06-22

本文共 4883 字,大约阅读时间需要 16 分钟。

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

在利用注解开发持久层以前,需要学习一个规范JPA(Persistence API),这也是SUN公司提出的数据库的持久化规范。就类似于JDBC,Servlet,JSP等规范一样。而框架就实现了此规范,我们可以通过注解和配置文件来实现此规范。前边的学习都是建立在配置文件的基础上,而注解开发现在也处于一种趋势,毕竟它大大提高了开发速度。

 

        看一下注解在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主键生成策略,适用于,SQL Server

@GeneratedValue(strategy=GenerationType.SEQUENCE)  相当于Hibernate框架的sequence主键生成策略,适用于,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配置文件属性都是一一对应的,及时不一样,也会有与之类似的属性进行实现其功能,所以我们可以对比着使用。当然这里只是一些常用的,当我们需要时还需要我们查看文档进行编写。

        

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

 

1 @Entity  2 @Table(name="t_org")  3 public class Org {  4   5     private String id;  6     private String name;  7     private String code;  8     private String manager;  9     private String remark; 10     private String createtime; 11     private String updatetime; 12      13     private OrgType orgType; 14      15     private String pid; 16      17     @Transient 18     public String getPid() { 19         return pid; 20     } 21  22     public void setPid(String pid) { 23         this.pid = pid; 24     } 25  26     private Org parentOrg; 27      28     private Set
childOrgSet ; 29 30 @Id 31 @GenericGenerator(name="hibernate-uuid", strategy="uuid") 32 @GeneratedValue(generator="hibernate-uuid") 33 public String getId() { 34 return id; 35 } 36 37 public void setId(String id) { 38 this.id = id; 39 } 40 41 public String getName() { 42 return name; 43 } 44 45 public void setName(String name) { 46 this.name = name; 47 } 48 49 public String getCode() { 50 return code; 51 } 52 53 public void setCode(String code) { 54 this.code = code; 55 } 56 57 public String getManager() { 58 return manager; 59 } 60 61 public void setManager(String manager) { 62 this.manager = manager; 63 } 64 65 public String getRemark() { 66 return remark; 67 } 68 69 public void setRemark(String remark) { 70 this.remark = remark; 71 } 72 73 @Column(updatable=false) 74 public String getCreatetime() { 75 return createtime; 76 } 77 78 public void setCreatetime(String createtime) { 79 this.createtime = createtime; 80 } 81 82 @Column(insertable=false) 83 public String getUpdatetime() { 84 return updatetime; 85 } 86 87 public void setUpdatetime(String updatetime) { 88 this.updatetime = updatetime; 89 } 90 91 @ManyToOne 92 @JoinColumn(name="orgTypeId") 93 public OrgType getOrgType() { 94 return orgType; 95 } 96 97 public void setOrgType(OrgType orgType) { 98 this.orgType = orgType; 99 }100 101 @ManyToOne102 @JoinColumn(name="pid", updatable=false)103 public Org getParentOrg() {104 return parentOrg;105 }106 107 public void setParentOrg(Org parentOrg) {108 this.parentOrg = parentOrg;109 }110 111 @OneToMany(mappedBy="parentOrg")112 @JoinColumn(name="pid")113 @OrderBy("code")114 public Set
getChildOrgSet() {115 return childOrgSet;116 }117 118 public void setChildOrgSet(Set
childOrgSet) {119 this.childOrgSet = childOrgSet;120 }121 }122

 

 

 

3.

四,当然用了注解的开发方式,我们的核心配置文件就需要我修改了,这里就需要Hibernate的AnnotationSessionFactoryBean工厂类了,

 

1  
2
3
4
5
6
7
com/ljh/ppp/domain
8
9
10

 

 

 

这样Hibernate框架的注解开发基本上就算完毕了,总体感觉是比较高效的。我们没写一个类一个方法,顺便将注解编写了,这样我们就不用专门用来编写映射文件了。掌握好注解的开发,在很多时候可以大大提高我们的效率。当然还有其它框架的注解运用,后边总结。

 

你可能感兴趣的文章
程序包com.sun.image.codec.jpeg不存在解决方法
查看>>
Linux也有后悔药,五种方案快速恢复你的系统
查看>>
OpenLDAP在win2008上安装配置
查看>>
根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程
查看>>
如何提交内核补丁--checkpatch.pl使用【转】
查看>>
MFC程序显示控制台输出
查看>>
网易博客挂了,转一篇以前的文章过来纪念一下吧。。
查看>>
三角形(css3)
查看>>
Cgroups 与 Systemd
查看>>
java三大框架实现任务调度——IRemindService
查看>>
(Z)MySQL变量的使用
查看>>
浅谈命令查询职责分离(CQRS)模式
查看>>
洛谷P1481 魔族密码(LIS)
查看>>
SQL Server 访问URL 调用WebServer
查看>>
静态代码块在何时调用
查看>>
Kafka控制器选举流程剖析
查看>>
appium封装显示等待Wait类和ExpectedCondition接口
查看>>
Android 全局弹出版本更新 Dialog 思考和解决办法
查看>>
IDEA在当前类中查找方法快捷键--转
查看>>
初识少儿编程
查看>>