原代码如下:
mapper文件:
<!-- 查询1条记录 -->
<select id="selectTransactionInfo" resultType="entity.TransactionInfo">
select * from sh000099 where tradeDate = #{tradeDate}
</select>
dao:
public TransactionInfo getInfo(String tradeDate) {
SqlSession session = MyBatisUtil.getSession();
TransactionInfo info = session.selectOne("entity.TransactionInfoMapper.selectTransactionInfo", tradeDate);
session.close();
return info;
}
但是我有很多张表,每张表都要执行crud,也就是说表名称需要作为参数传递,mapper文件和dao文件怎么修改?
虽然我搞不懂为什么你要把表名传进去,这样返回值你都无法确定,通常情况下都是一个mapper对应一个表
但是你说的确实是有方法可以解决的,表名作为参数传进去,在mapper的sql中使用${}去承接
举例:
public List<Object> selectByTable(@Param("tableName") String tableName);
<select id="selectByTable" resultType="java.lang.Object">
select * from ${tableName}
</select>
如果表结构都一致的的话,可以使用myabtis-plus的DynamicTableNameParser 动态表名,具体可以看看这个用法
面试有时候会问 mybatis 中 # 和 $ 的区别
把表名放在参数上传进去就行呀取表名不要用#号,#号会给你转成字符串,就没法查,要用$符号