在MyBatis中实现动态表名
在MyBatis中实现动态表名
- 场景:由于MySQL本身受单表数据文件大小限制,数据量将成为性能瓶颈。当单表数据量很大,或预计会很大时,将单个大表和单个大表数据文件,拆分成多个小表和小表数据文件就是一个简单有效的提升新能的方式。一个较好的解决查询性能问题的手段就是水平分表。分表后,一次针对不同拆分逻辑的查询,必须被定位到正确的小表上,此时就需要能动态匹配小表的表名。
- 方案:在MyBatis中一个可行的方式就是将表名参数化,首先,表名必须“枚举化”,传给MyBatis的值必须是服务端可控的,不能由客户端传递(防止SQL注入攻击)。其次,SQL语句中的表名取值符号必须用${tableName},不能用#{}(语句中的其他参数建议使用#{}来取值)。
- 举例:
<select id = "bizQuery"> SELECT t.* FROM ${dto.tableName} AS t WHERE t.`code` = #{dto.code} </select>
学习使我充实,分享给我快乐!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步