spring boot jpa 实现拦截器
我们项目重构加上了很多数据权限的东西,项目中使用了mybatis 和 jpa。经手的人多了就是这样。 mybatis 我们使用的是拦截器给sql动态拼接,现在jpa也需要这样做。
以下是jpa 拦截器的配置。
第一步: 实现 hibernate接口。重写方法
public class JpaInterceptor implements StatementInspector {
@Override
public String inspect(String sql) {
System.out.println("进入拦截器" + sql);
sql+= " and 1=1";
return sql;
}
}
第二步: 在yml中配置
spring:
jpa:
properties:
hibernate:
session_factory:
statement_inspector: com.bdyh.system.config.jpa.JpaInterceptor
结果
2019-06-19 17:19:08,615 - HHH000397: Using ASTQueryTranslatorFactory
进入拦截器select permission0_.id as id1_8_, permission0_.create_by as create_b2_8_, permission0_.create_department_id as create_d3_8_, permission0_.create_department_ids as create_d4_8_, permission0_.create_time as create_t5_8_, permission0_.del_flag as del_flag6_8_, permission0_.tenant_id as tenant_i7_8_, permission0_.update_by as update_b8_8_, permission0_.update_department_id as update_d9_8_, permission0_.update_department_ids as update_10_8_, permission0_.update_time as update_11_8_, permission0_.button_type as button_12_8_, permission0_.component as compone13_8_, permission0_.description as descrip14_8_, permission0_.icon as icon15_8_, permission0_.level as level16_8_, permission0_.name as name17_8_, permission0_.parent_id as parent_18_8_, permission0_.path as path19_8_, permission0_.sort_order as sort_or20_8_, permission0_.status as status21_8_, permission0_.title as title22_8_, permission0_.type as type23_8_, permission0_.url as url24_8_ from t_permission permission0_ where permission0_.type=? and permission0_.status=? and permission0_.tenant_id=? order by permission0_.sort_order asc
Hibernate: select permission0_.id as id1_8_, permission0_.create_by as create_b2_8_, permission0_.create_department_id as create_d3_8_, permission0_.create_department_ids as create_d4_8_, permission0_.create_time as create_t5_8_, permission0_.del_flag as del_flag6_8_, permission0_.tenant_id as tenant_i7_8_, permission0_.update_by as update_b8_8_, permission0_.update_department_id as update_d9_8_, permission0_.update_department_ids as update_10_8_, permission0_.update_time as update_11_8_, permission0_.button_type as button_12_8_, permission0_.component as compone13_8_, permission0_.description as descrip14_8_, permission0_.icon as icon15_8_, permission0_.level as level16_8_, permission0_.name as name17_8_, permission0_.parent_id as parent_18_8_, permission0_.path as path19_8_, permission0_.sort_order as sort_or20_8_, permission0_.status as status21_8_, permission0_.title as title22_8_, permission0_.type as type23_8_, permission0_.url as url24_8_ from t_permission permission0_ where permission0_.type=? and permission0_.status=? and permission0_.tenant_id=? order by permission0_.sort_order asc and 1=1
转载自https://www.jianshu.com/p/e89b48a4cb7a
如果您觉得文章对您有帮助,请您在下面写一点留言,点一个赞。 谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)