Java Web2.0项目开发进阶---Hibernate 对标注的支持

2024-03-26 18:32

本文主要是介绍Java Web2.0项目开发进阶---Hibernate 对标注的支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 在过去,Hibernate 依靠外部的XML文件来配置持久化对象,数据库映射文件定义在一组XML映射文件里并且在程序开始的时候被装载.有很多办法来创建这些映射文件,或者自动从一个已存在的数据库模式里创建,或者手动从java类对象中创建.不管那种情况,你都得产生一大堆Hibernate 映射文件而结束工作.,你也可以利用外部工具从javadoc-style 的注解中生成映射文件,但这给你的开发流程增加了额外的负担.

 

    在最近的Hibernate版本里,一个新的建立在Java 5 注解之上更为优雅的方法出现了.利用新的Hibernate Annonations ,你可以发布一次如你以前的映射文件所定义的信息,你猜到了-注解直接嵌入你的Java类文件里.注解带来了一种强大灵活地声明持久化映射的办法.在最新版的几个Java集成开发环境里都很好的支持,并带有代码自动完成和语法高亮功能.

 

    Hibernate annotations 也支持最新的EJB 3持久化规范,这些规范目的是提供一个标准的Java持久化机制.当然Hibernate 3也提供了更多的解决方案,你能非常容易的靠近保准并且利用EJB 3编程模型编写你的Hibernate持久化层.

12.12.1  创建一个注解项目

为了使用Hibernate Annotations,你需要最新的Hibernate 3.2以上版本,首先从Hibernate官方网站下载并解压Hibernate Annotations的发布包。http://www.hibernate.org/6.htmlhibernate-annotations-3.4.0.GA.zip,这个版本(预览版)要求使用Hibernate 3.3.1更高版本。

首先确定你已经安装了JDK 5.0

1 系统配置

首先就是设置classpath(当然是在IDE中创建了一个新项目之后)

Hibernate3核心文件以及其依赖的第三方库文件(请参考lib/README.txt文件)加入到你的classpath里面。

hibernate-annotations.jar lib/ejb3-persistence.jar加入到你的classpath里面。

我们推荐在一个包装器(wrapper)HibernateUtil 的静态初始化代码块中启动Hibernate。或许你在Hibernate文档的其他很多地方看到过这个类, 但是要在你的项目中使用注解,还需要对这个辅助(helper)类进行扩展。扩展如下:

import org.hibernate.*;

import org.hibernate.cfg.*;

import test.*;

import test.animals.Dog;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

    static {

        try {

 

            sessionFactory = new AnnotationConfiguration().buildSessionFactory();

        } catch (Throwable ex) {

            // Log exception!

            throw new ExceptionInInitializerError(ex);

        }

    }

    public static Session getSession()

            throws HibernateException {

        return sessionFactory.openSession();

    }

}

里比较有意思的是使用到了AnnotationConfiguration类。 XML配置文件(通常是hibernate.cfg.xml)中则定义了包和经过注解的类。下面的xml和前面的声明等价:

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

        <hibernate-configuration>

          <session-factory>

            <mapping package="test.animals"/>

            <mapping class="test.Flight"/>

            <mapping class="test.Sky"/>

            <mapping class="test.Person"/>

            <mapping class="test.animals.Dog"/>

            <mapping resource="test/animals/orm.xml"/>

          </session-factory>

        </hibernate-configuration>

注意现在你可以混合使用hbm.xml和注解。资源元素(resource element)可以是hbm文件也可以是EJB3 XML发布描述符,此差别对于配置过程是透明的。

 

除了上面的方式,你还可以通过编程的方式定义包括注解的类和包

sessionFactory = new AnnotationConfiguration()

                    .addPackage("test.animals") //the fully qualified package name

                    .addAnnotatedClass(Flight.class)

                    .addAnnotatedClass(Sky.class)

                    .addAnnotatedClass(Person.class)

                    .addAnnotatedClass(Dog.class)

                    .buildSessionFactory();

你也可以使用Hibernate Entity Manager来完成以上功能。Hibernate Entity Manager有自己的一套配置机制,详情请参考相关文档。

除了启动方式和配置文件有所改变之外,结合注解来使用Hibernate API和以前没有什么区别, 在其他方面你还是可以继续保持以前的习惯和喜好(hibernate.properties hibernate.cfg.xml programmatic APIs等等) 甚至对于同一个SessionFactory,你都可以混合带注解的持久类以及传统的bm.cfg.xml声明方式。 然而你不能多次声明同一个类(要么通过注解要么通过hbm.xml配置文件) 而且在一个映射实体的类继承层次中,这两个配置策略不能同时使用.

为了简化从hbm文件到注解的迁移过程, 配置机制将自动检测在注解和hbm文件中重复的映射。 默认情况下hbm文件中的声明比类中的注解元数据具有更高的优先级。 这种优先级的设定是以类为单位的。 你也可以通过hibernate.mapping.precedence修改这种优先级。 默认的值是hbm, class 如果改为class,hbm,当发生冲突的时候,类中的注解将比hbm文件具有更高的优先级。

 

这篇关于Java Web2.0项目开发进阶---Hibernate 对标注的支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849466

相关文章

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧