我通常在Web应用程序中使用带有spring的hibernate,所以我使用DI和maven进行配置,现在我想在不使用maven或spring的桌面/ swing应用程序中使用hibernate,我想知道以下内容:< / p>
请告知,谢谢。
答案 0 :(得分:6)
我不知道Spring,所以如果你真的想要使用它,你必须稍微更新我的答案(例如Spring有自己的机制来初始化实体管理器)。
<强>依赖关系强>
这是我用于最近的桌面项目的配置(某些版本可能已经发展),使用Hibernate而不是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
...
答案 1 :(得分:1)
WebApp和使用Spring / Hibernate进行配置的StandAlone应用程序之间没有区别。你需要为hibernate提供相同的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>
答案 2 :(得分:0)
SessionFactory是在任何(基于Web或桌面)应用程序中使用Hibernate的最佳方式。 只需从http://sourceforge.net/projects/hibernate/files/hibernate4/下载最新的hibernate发行包。在lib文件夹下有一个必需的文件夹。包括所有这些罐子,因为它们对于hibernate项目都是强制性的。 然后定义一个类,它将为您提供SessionFactory的单例实例。您可以在Configuration实例上使用buildSessionFactory()方法获取此实例(它是一个可以读取和处理hibernate配置文件的类)。您必须在文件hibernate.cfg.xml中定义所有连接和其他参数(您还可以使用任何其他名称)。 有关详细信息,请转到http://javabrains.koushik.org/。在Hibernate部分,只需要阅读前几个教程。它的解释非常好。