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集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏