Hibernate数据过滤器是一个创新的方法,以一种更具可重用性的方式和“可视化”规则来过滤从数据库获取的数据。数据过滤器有一个唯一的名字,可进行全局访问,并能接受参数值用于过滤规则。可以在Hibernate session中启用或禁用数据过滤。
请看下面的Hibernate数据过滤器示例。
在这个示例程序中,定义了一个数据过滤器,使用指定的日期过滤集合数据。Hibernate数据过滤器可以使用XML映射文件实现,也可以使用标注实现。
1、在XML映射文件中实现Hibernate数据过滤器
使用“filter-def”关键字定义一个数据过滤器,并接受一个日期参数。
<filter-def name="stockRecordFilter">
<filter-param name="stockRecordFilterParam" type="date"/>
</filter-def>
下面的XML映射文件中,声明过滤器并将其赋予set集合。
<hibernate-mapping>
<class name="com.xuejava.common.Stock" table="stock" catalog="xuejava">
...
<set name="stockDailyRecords" inverse="true" table="stock_daily_record">
<key>
<column name="STOCK_ID" not-null="true" />
</key>
<one-to-many class="com.xuejava.common.StockDailyRecord" />
<filter name="stockRecordFilter" condition="date >= :stockRecordFilterParam"/>
</set>
</class>
<filter-def name="stockRecordFilter">
<filter-param name="stockRecordFilterParam" type="date"/>
</filter-def>
</hibernate-mapping>
在condition=”date >= :stockRecordFilterParam”中,“date”是“StockDailyRecord”的一个属性。
2、在标注(注解)中实现Hibernate数据过滤器
使用“@FilterDef”关键字定义一个数据过滤器,并使用“@ParamDef”接收一个日期参数。
@FilterDef(name="stockRecordFilter",
parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
下面是完整的标注示例,其中声明了一个数据过滤器并将其赋予set集合。
...
@Entity
@FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
@Table(name = "stock", catalog = "xuejava")
public class Stock implements java.io.Serializable {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
@Filter(
name = "stockRecordFilter",
condition="date >= :stockRecordFilterParam"
)
public Set<StockDailyRecord> getStockDailyRecords() {
return this.stockDailyRecords;
}
在condition=”date >= :stockRecordFilterParam”中,“date”是“StockDailyRecord”的一个属性。
3、怎样启用和禁用数据过滤
启用数据过滤:
Filter filter = session.enableFilter("stockRecordFilter");
filter.setParameter("stockRecordFilterParam", new Date());
禁用数据过滤:
session.disableFilter("stockRecordFilter");
4、应用和实现数据过滤器
下面的代码片段演示了怎样应用和实现数据过滤器。
Session session = HibernateUtil.getSessionFactory().openSession();
System.out.println("****** Enabled Filter ******");
Filter filter = session.enableFilter("stockRecordFilter");
filter.setParameter("stockRecordFilterParam", new Date());
Stock stock = (Stock)session.get(Stock.class, 2);
Set<StockDailyRecord> sets = stock.getStockDailyRecords();
for(StockDailyRecord sdr : sets){
System.out.println(sdr.getDailyRecordId());
System.out.println(sdr.getDate());
}
System.out.println("****** Disabled Filter ******");
session.disableFilter("stockRecordFilter");
//清除已加载的实例,重新获得Stock(只是为了演示)
session.evict(stock);
Stock stock2 = (Stock)session.get(Stock.class, 2);
Set<StockDailyRecord> sets2 = stock2.getStockDailyRecords();
for(StockDailyRecord sdr : sets2){
System.out.println(sdr.getDailyRecordId());
System.out.println(sdr.getDate());
}
输出结果如下:
****** Enabled Filter ******
58
2011-07-31
****** Disabled Filter ******
60
2011-07-02
58
2010-07-31
63
2010-07-23
61
2010-07-03
...
在这个示例中(包括XML映射和标注),在启用了过滤器后,所有的“StockDailyRecord”集合都由参数日期所过滤。
分享到:
相关推荐
3. 配置web.xml,设置过滤器和监听器,使Spring和Struts2协同工作。 4. 在Action类上添加注解或配置,与Spring的Bean管理相结合。 5. 使用Hibernate配置hibernate.cfg.xml,设置数据库连接和实体类映射。 通过这个...
- **过滤器**:使用`@Filter`注解配置动态过滤条件。 - **查询**:使用`@NamedNativeQuery`等注解预定义查询。 #### 六、通过XML覆写元数据 - **原则**: - **全局级别的元数据**:在`persistence.xml`中配置。 ...
在`web.xml`中,我们需要配置Struts2的FilterDispatcher过滤器,它是Struts2处理请求的主要入口点。`struts.xml`是Struts2的主配置文件,定义了Action和结果映射。我们还可以通过`<include>`标签引入其他配置文件,...
- **2.2.1.2 乐观锁定版本控制**:使用 `@Version` 注解来实现乐观锁机制,确保数据的一致性和完整性。 - **2.2.2 映射简单属性** - **2.2.2.1 声明基本的属性映射**:使用 `@Column` 注解来指定如何将实体Bean的...
- **过滤器**:使用 `@Filter` 和 `@Filters` 注解来定义条件过滤器。 - **查询**:使用 `@NamedQuery` 和 `@NamedNativeQuery` 注解来定义命名查询。 #### 3. 通过 XML 覆写元数据 - **原则**:Hibernate 允许...
- **过滤器注解**:如`@Filter`。 - **自定义查询注解**:如`@SQL`。 #### 五、元数据覆盖 在某些情况下,可能需要覆盖通过注解定义的元数据。Hibernate提供了以下几种覆盖元数据的方式: - **全局级别的元数据**...
- **核心**: Struts2以**过滤器**作为其核心组件,这意味着所有的HTTP请求都必须经过这个过滤器。 - **机制**: Struts2采用了**拦截器**机制来处理用户的请求,这使得它可以更灵活地管理HTTP请求和响应过程。 3. ...
4. Hibernate验证器:Hibernate提供了内置的验证机制,允许开发者通过注解在领域模型上定义约束,以确保数据的完整性和一致性。验证可以在数据库schema级别、事件驱动的验证以及程序级别进行。 5. Hibernate与...
4. **实体类和映射**:编写Java实体类,每个类代表数据库中的一个表,并使用Hibernate的注解(如`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等)进行标注,或者创建对应的XML映射文件。 5. **SessionFactory和...
- **实体类映射**:使用Hibernate的标注(annotations)进行映射时,主键用`@Id`标注,普通属性用`@Column`标注,对应的列则使用`name`属性指定。 - **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法...
结合Struts和Hibernate,我们可以创建一个强大的Java Web应用框架,其中Struts处理用户请求和视图展示,而Hibernate负责数据的持久化。这种组合允许开发者更专注于业务逻辑,而不是底层的实现细节。 在提供的文件...
- **@RestController**:结合@Controller和@ResponseBody,用于返回JSON或XML格式的数据。 - **@RequestMapping**:用于映射HTTP请求到特定的方法。 - **@GetMapping/@PostMapping**:分别用于映射GET和POST请求。 -...
2. **注解方式**:使用如`@Component`, `@Service`, `@Repository`等注解标注类,通过`@Autowired`进行依赖注入。 3. **Java配置**:通过`@Configuration`和`@Bean`注解来配置bean。 **问题四:简单的说一下Spring...
- 配置OpenSessionInView过滤器以实现懒加载: ```xml <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> ...
- **基于 Java 的 Spring 注解配置**:使用注解而不是 XML 文件来定义 Bean 和配置依赖关系。 - **注解示例**: - **`@Component`**:表示这是一个 Spring 管理的 Bean。 - **`@Service`**:用于标注业务逻辑层的 ...
Struts2以**过滤器**(Filter)为核心,采用**拦截器**(Interceptor)机制来处理用户的请求。这种设计模式提高了代码的复用性,并简化了控制器的开发工作。 3. **构建Struts2应用的基础类库** 构建Struts2应用...
2. **配置web.xml**:在`web.xml`文件中,你需要修改或添加Struts的相关配置,例如移除旧的`<init-param>`配置,并添加字符过滤器`<filter>`和`<filter-mapping>`,用于处理请求和响应的字符编码。 3. **创建过滤器...
您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为: 代码 1 领域对象Tfile 1. ...
2. Struts 2的核心是过滤器,其利用拦截器机制处理用户请求。 3. 构建Struts 2应用所需的几个基本类库包括:struts2-core、xwork、freemarker、ognl以及commons-logging。 4. Struts 2的控制器类是一个普通的Plain ...