在开发需要数据库支持的软件时,Java开发者通常会面临一系列重复性的工作,如添加Hibernate依赖、创建实体、配置映射等。NW.ORM框架旨在简化数据库访问,提供一个统一且可重用的实现方法,让开发者能够专注于项目本身。
NW.ORM框架使用Hibernate库来处理数据库事务,提供了单一的数据库事务接口,无需多个数据访问对象。它支持在同一个应用中同时操作多个数据库,支持使用Hibernate Criteria、HQL或SQL进行查询,支持基于JPA和HBM文件的配置,并能够返回适当的类对象而无需强制类型转换。
要使用NW.ORM框架,首先需要从获取最新版本,并将其依赖添加到项目中。
NW.ORM框架依赖于以下库:
Hibernate和Slf4j的依赖可以从官方网站下载,而Neemworks Commons可以在NW.ORM的SourceForge文件目录中找到。
将NW.ORM的jar文件及其依赖添加到项目的类路径中。设置好类路径后,就可以开始实际使用了。通常,与数据库工作开始于创建必要的实体对象。可以通过扩展REntity
或IEntity
来创建实体,而不是从头开始。
所有实体都必须在Hibernate配置文件中进行映射。如果需要访问多个数据库,可以允许多个配置。下面是一个使用PostgreSQL数据库并映射了4个实体的示例配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">false</property>
<property name="use_sql_comments">false</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">false</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/**db</property>
<property name="hibernate.connection.username">**d**</property>
<property name="hibernate.connection.password">*minds</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">30</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<mapping class="com.nw.napi.model.NUser"/>
<mapping class="com.nw.napi.model.NimblarClient"/>
<mapping class="com.nw.napi.model.AccessToken"/>
<mapping class="com.nw.napi.model.ReleaseNotificationRequest"/>
</session-factory>
</hibernate-configuration>
初始化特定数据库的服务层,需要一个配置文件名,例如hibernate.cfg.xml
。需要创建一个REntityManager
的实例,如下所示:
REntityManager rm = REntityManager.getInstance("hibernate.cfg.xml");
如果需要多个数据库配置,可以重复上述步骤。以下是使用另一个配置文件text.cfg.xml
的代码片段:
REntityManager rmText = REntityManager.getInstance("text.cfg.xml");
REntityManager
为所有实体提供了基本的CRUD操作:
RAudit ra = new RAudit();
ra.setSourceMachine("mac");
rm.create(ra);
rm.update(ra);
rm.remove(ra);
以下是查询数据库的示例方法:
RAudit audit = rm.getByCriteria(RAudit.class, Restrictions.eq("sourceMachine", "mac"));
System.out.println(audit.getSourceMachine());
使用HQL查询:
Map parameters = new HashMap();
parameters.put("sa", "mac");
RAudit audit2 = rm.getByHQL("FROM RAudit r where r.sourceAddress = :sa", parameters, RAudit.class);
System.out.println(audit2.getSourceMachine());
使用getListxxxxxx方法可以返回列表:
List laudits = rm.getListByCriteria(RAudit.class);
List lauditsc = rm.getListByCriteria(RAudit.class, Restrictions.eq("sourceMachine", "mac"), Restrictions.eq("sourceMachinePublic", "mac"));
通过Criteria构建各种查询条件,并将它们传递给get by criteria查询方法。这个方法可以接收任意数量的限制条件:
RAudit audit = rm.getByCriteria(RAudit.class, Restrictions.eq("sourceMachine", "mac"), Restrictions.eq("sourceMachineId", "23-A"));
System.out.println(audit.getSourceMachine());
Map parameters = new HashMap();
parameters.put("sa", "mac");
RAudit audit2 = rm.getByHQL("FROM RAudit r where r.sourceAddress = :sa", parameters, RAudit.class);
System.out.println(audit2.getSourceMachine());