我通常在 web 应用程序中使用 hibernate 和 spring,所以我使用 DI 和 maven 进行配置,现在我想在不使用 maven 或 spring 的桌面/swing 应用程序中使用 hibernate,我想知道以下几点:
- 我需要什么罐子?
- 如何配置休眠,以及如何进行示例查询?
请指教,谢谢。
我通常在 web 应用程序中使用 hibernate 和 spring,所以我使用 DI 和 maven 进行配置,现在我想在不使用 maven 或 spring 的桌面/swing 应用程序中使用 hibernate,我想知道以下几点:
请指教,谢谢。
我不了解 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文件中注册的EntityClass1、EntityClass2、EntityClass3的常用方法创建实体类。
然后,对于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
...
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>
SessionFactory 是在任何(基于 Web 或桌面)应用程序中使用 Hibernate 的最佳方式。只需从http://sourceforge.net/projects/hibernate/files/hibernate4/下载最新的休眠版本包。在 lib 文件夹下有一个必需的文件夹。包括所有这些 jar,因为它们对于休眠项目都是必需的。然后定义一个类,它将为您提供 SessionFactory 的单例实例。您可以在 Configuration 实例上使用 buildSessionFactory() 方法获取此实例(这是一个可以读取和处理休眠配置文件的类)。您必须在文件 hibernate.cfg.xml 中定义所有连接和其他参数(您也可以使用您想要的任何其他名称)。有关更多详细信息,请访问http://javabrains.koushik.org/. 在那里,在 Hibernate 部分下,只需阅读前几个教程。那里解释得很好。