mybatis根据传参的表名,往不同的表保存数据

mybatis根据传参的表名,往不同的表保存数据
daoMapper类
   int insertTable(@Param("tableName") String tableName);

daoMapper.xml

insert into ${tableName}values........
 

转载于:https://my.oschina.net/lsl1991/blog/1586660

### 使用MyBatisMyBatis-Plus动态传入 在企业级应用开发中,有时会遇到需要根据业务逻辑动态指定数据的情况。对于这种情况,在MyBatis及其增强版本MyBatis-Plus中有多种方式可以实现这一目标。 #### 方法一:使用`${}`语法直接替换 当需要动态设置时,可以在SQL映射文件中利用`<script>`标签配合`${}`占位符来完成[^2]: ```xml <select id="selectByTableName" parameterType="string" resultType="com.example.User"> SELECT * FROM ${tableName} </select> ``` 这种方式简单直观,但是存在潜在的安全隐患——如果输入未经严格校验,则容易遭受SQL注入攻击[^5]。 #### 方法二:借助自定义注解或接口扩展 为了提高安全性并保持良好的编码习惯,推荐采用更为严谨的方法。可以通过继承BaseMapper来自定义Mapper类,并重写其中涉及结构的操作方法;或者创建专门用于处理此类情况的工具类/组件[^1]。 例如,针对多租户或多数据源环境下的不同前缀问题,可通过配置全局拦截器或AOP切面编程的方式,在执行查询之前修改默认的数据源连接属性或是调整最终生成的实际SQL语句[^3]。 #### 方法三:基于XML配置与Java代码混合模式 除了纯XML声明式的编写风格外,还可以结合程序逻辑控制,在运行期灵活组装所需的SQL片段。具体做法是在DAO层定义泛型化的Repository接口,接受额外的元数据信息作为数(如称),再由内部负责拼接完整的命令字符串[^4]。 ```java public interface DynamicTableMapper<T> extends BaseMapper<T> { @SelectProvider(type=DynamicSqlBuilder.class, method="buildSelectAll") List<T> selectFrom(@Param("table") String table); } class DynamicSqlBuilder { public static String buildSelectAll(Map<String,Object> params){ StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM "); sql.append(params.get("table")); return sql.toString(); } } ``` 以上三种方案各有优劣,选择哪种取决于具体的业务需求和技术栈偏好。无论采取何种手段都应充分考虑到系统的稳定性和性能现,同时注意防范可能存在的安全隐患。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值