多租户技术实现:Hibernate + AOP
2014-04-09 10:10
148 查看
Hibernate Filter
Hibernate Filter过滤特定租户ID的数据,实现共享表级别的数据隔离;提取出Filter的代码,通过AOP方式(Spring集成)作用于特定方法中;
Filter只能作用于查询集合,对单个查找(比如通过主键)是不起作用的,因为这是没有意义的。
Filter的定义包括两个部分,名字,参数(参数类型的值都是小写字母):
<filter-def name="Filter名字"> <filter-param name="参数名" type="参数类型(string, integer, long)"/> </filter-def> |
<filter name=" Filter名字" condition="where子句 "/> 比如: salary > :amount name like :name :asOfDate BETWEEN eff_start_dt and eff_end_dt :参数名是参数,其它是数据库的字段名 |
Session的API: Filter enableFilter(String filterName) Filter getEnabledFilter(String filterName) void disableFilter(String filterName) |
session. enableFilter(filterName).setParameter(String name, Object value) |
就Hibernate Filter而言,Filter名字、参数名都是中间层。假设能够这样做会不会更好呢:
session. setFilter(“where子句”).setParameters(Object[] values) |
AOP(Spring集成)
AOP的作用是把Filter部分的代码放在其它一些方法之前执行。接下来先写一个Before advice,把Filter部分的代码放进去:@Before("pointcut expression") public void setFilter() { session. enableFilter(filterName).setParameter(String name, Object value) } |
AOP是Java的又一大特色,对于Lisp这类具有函数式编程范式的语言来说,这是编程语言最基本的思想:函数(方法)也是一种数据类型,可以作为参数和返回值。
从方法调用的角度看就是:setFilter () -> method()。如果Java中方法能作为参数的话,就会变成这样:
void aop(before, method, after) { before(); method(); after(); } |
相关文章推荐
- 基于hibernate实现的分页技术
- 基于Hibernate实现多租户(Multi-Tendency)功能
- Spring技术内幕3Spring AOP的实现
- APP开发实战148-使用AOP技术输出Log的具体实现
- SpringBoot集成Redis实现缓存处理(Spring AOP技术)
- 使用JDK中的Proxy技术实现AOP功能
- Spring AOP的底层实现技术 Proxy InvocationHandler
- AOP技术应用和研究--SpringAop实现原理
- Spring(十一)使用Spring的注解方式实现面向切面技术AOP
- 使用Proxy反射类实现AOP动态代理技术
- Spring技术内幕:Spring AOP的实现原理(二)
- Java中的mvc模式用了什么技术?怎么实现的?(结合Strust2、Hibernate、Spring)回答
- JDK中的Proxy技术实现AOP功能
- AOP_2.使用cglib中的Proxy技术实现
- Spring学习之Spring AOP的底层实现技术
- 基于.Net的AOP实现技术
- 004-搭建框架-实现AOP机制【一】代理技术
- Spring AOP的底层实现技术
- Struts+Spring+Hibernate的技术实现
- Spring——使用Spring的注解方式实现面向切面技术AOP