使用hibernate的拦截器。当用户操作数据库时,会把生成的sql先给Interceptor处理一下,然后再去执行。这正给了我修改sql的机会。
public class QueryResInterceptor extends EmptyInterceptor {
...
public QueryResInterceptor(Date startTime, Date endTime){
...
}
public String onPrepareStatement(String sql) {
//根据用户的时间替换sql中的表名
return sql;
}
}
这个拦截器,接收用户的查询时间做为构造参数。然后做为替换sql中表名的依据。
当我执行一个查询的hql时,hql是按映射的持久化类写的。用如下代码获得Session
QueryResInterceptor i=new QueryResInterceptor(...);
Session sessoin=sessionFactory.openSession(i);
这样再通过这个session执行hql时,表名就自动换成需要的实际表名了。
分享到:
相关推荐
在Hibernate中,可以通过自定义拦截器或者实体类的注解来实现Sharding。例如,我们可以为实体类添加一个属性表示分片键,并在保存或查询时根据该键决定数据应存储或读取的表。 2. Partitioning策略:Partitioning是...
Hibernate的事件监听器或拦截器可以用来在执行SQL之前对其进行修改。 4. **事务管理**:在分表环境下,跨表的操作可能涉及到分布式事务。Spring的事务管理可以帮助我们在这种复杂环境中保持事务的一致性。 5. **...
通过Struts2的拦截器机制,可以实现登录验证、日志记录等功能。 2. **Spring**:管理Bean的生命周期,实现依赖注入,同时提供事务管理,保证数据一致性。此外,Spring还可以整合其他服务,如邮件发送、任务调度等。...
### 三、拦截器与过滤器 1. **拦截器** - 在执行Action之前进行过滤,可以编写特定的逻辑。 - 配置在`web.xml`或`struts.xml`中。 2. **过滤器** - 对特定URL后缀的请求进行过滤,例如`.html`或`.action`。 ##...
MyBatis允许自定义拦截器,可以拦截SqlSession、Executor、ParameterHandler、ResultSetHandler和StatementHandler的方法调用,实现自定义功能,如性能监控、日志记录等。 13. **MyBatis支持什么事务管理方式?** ...