5

我通常在 web 应用程序中使用 hibernate 和 spring,所以我使用 DI 和 maven 进行配置,现在我想在不使用 maven 或 spring 的桌面/swing 应用程序中使用 hibernate,我想知道以下几点:

  1. 我需要什么罐子?
  2. 如何配置休眠,以及如何进行示例查询?

请指教,谢谢。

4

3 回答 3

6

我不了解 Spring,所以如果你真的想使用它,你将不得不稍微更新一下我的答案(例如 Spring 有自己的初始化实体管理器的机制)。

依赖项

这是我最近用于我的一个桌面项目的配置(某些版本可能已经演变),它使用 Hibernate over JPA(即它使用 EntityManager):

org.hibernate:hibernate:3.2.7.ga
org.hibernate:hibernate-annotations:3.4.0.GA
org.hibernate:hibernate-entitymanager:3.4.0.GA

您可能还需要:

commons-collections:commons-collections:3.2.1
asm:asm:3.2
cglib:cglib:2.2
dom4j:dom4j:1.6.1
antlr:antlr:2.7.7
c3p0:c3p0:0.9.1.2

你可以在maven central上找到它们。

配置

您需要 META-INF 文件夹中的有效 persistence.xml :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <persistence-unit name="NONJTAPersistenceUnit" transaction-type="RESOURCE_LOCAL">

        <class>com.yourpackage.EntityClass1</class>
        <class>com.yourpackage.EntityClass2</class>
        <class>com.yourpackage.EntityClass3</class>

        <properties>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://hostXYZ/yourdatabase"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

使用您自己的数据库信息/驱动程序更新它。

用法

使用上面persitence.xml文件中注册的EntityClass1EntityClass2EntityClass3的常用方法创建实体类。

然后,对于EntityManager ...由于您不在 EE 环境中,您必须从EntityManagerFactoty获取它的实例:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("NONJTAPersistenceUnit");
EntityManager em = emf.createEntityManager();

(同样,Spring 可能会提供另一种获取方式,请查看文档)。

从那里您可以通过以下方式执行例如持久化操作:

em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();

您需要阅读一些文档以使整个事情都与 Spring 保持一致。

编辑

示例查询:

Query query = em.createQuery("select e from EntityClass1 where e.name = :name");
query.setParameter(:name, "foo");
List results = query.getResultList();

编辑

更新版本:

hibernate-core-3.5.1-Final
hibernate-entitymanager-3.5.1-Final
hibernate-jpa-2.0-api-1.0.0.Final
hibernate-annotations-3.5.1-Final
hibernate-commons-annotations-3.2.0.Final
dom4j-1.6.1
slf4j-api-1.6.4
slf4j-log4j12-1.6.4
...
于 2012-05-14T13:02:51.817 回答
1

WebApp 和使用 Spring/Hibernate 进行配置的 StandAlone 应用程序之间没有区别。对于休眠,您需要相同的 JAR 文件。对于 spring,您可以取消面向 Web 的 JAR,否则需要所有核心内容。

将 JAR 放在“/lib”文件夹中,并通过在 Manifest.mf 中将其指定为 Maven 构建的一部分,将其添加到类路径中。

要在命令行上引导 Java 应用程序,只需调用/加载 ApplciationContext 以从您的 Main 类开始,如下所示......

public static void main(String[] args) {
...

String[] contextXml = new String[]{ "resources/spring-context.xml", "resources/spring-db.xml" };

ApplicationContext ctx = new ClassPathXmlApplicationContext(contextXml);

// invoke your business logic

MyBusinessService bean = getBean(MyBusinessService.class);

bean.doSomething();
...
}

这是一个示例 DAO

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class MyDaoHibernate extends HibernateDaoSupport {


    /*** Functional methods ***/

    public void save(MyValueObject vo) throws DatabaseException {       
        getHibernateTemplate().saveOrUpdate(vo);
    }

    public MyValueObject get(Long id) throws DatabaseException {
        return getHibernateTemplate().get(MyValueObject.class, id);
    }

    /*** Getter & Setters ***/

    @Autowired
    public void initSessionFactory(SessionFactory sessionFactory) {
        this.setSessionFactory(sessionFactory);
    }   
}

[编辑]

Yanflea 提出的好观点,您将希望使用数据库连接池库,因为在 Web 应用程序中并没有像现在这样为您提供。下载commons-dbcp.jar并将以下内容添加到您的 Spring 配置中...

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"    value="com.sybase.jdbc2.jdbc.SybDriver" />
    <property name="url"                value="${jdbc.url}" />
    <property name="username"           value="${jdbc.username}" />
    <property name="password"           value="${jdbc.password}" />
</bean> 
于 2012-05-14T12:41:32.443 回答
0

SessionFactory 是在任何(基于 Web 或桌面)应用程序中使用 Hibernate 的最佳方式。只需从http://sourceforge.net/projects/hibernate/files/hibernate4/下载最新的休眠版本包。在 lib 文件夹下有一个必需的文件夹。包括所有这些 jar,因为它们对于休眠项目都是必需的。然后定义一个类,它将为您提供 SessionFactory 的单例实例。您可以在 Configuration 实例上使用 buildSessionFactory() 方法获取此实例(这是一个可以读取和处理休眠配置文件的类)。您必须在文件 hibernate.cfg.xml 中定义所有连接和其他参数(您也可以使用您想要的任何其他名称)。有关更多详细信息,请访问http://javabrains.koushik.org/. 在那里,在 Hibernate 部分下,只需阅读前几个教程。那里解释得很好。

于 2012-05-14T17:29:52.940 回答