MyBatis 插入和查询动态表名中的数据

一、背景说明

有些业务场景,需要对表进行了分表操作(如:按天分表,test_20220123,test_20220124)。

分表后,如何对分表进行动态传入表名,进行插入和查询数据呢?


二、解决方案

1、创建实体
1)DbTable.java

基类:只有 tableName 一个字段,用于传入数据表名。

public class DbTable {
    private String tableName;

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }
}
2)TestTable.java

测试类:包含 id,name 两个字段。

public class TestTable extends DbTable {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "TestTable{" +
                "tableName='" + super.getTableName() + '\'' +
                ", id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
2、新增&查询数据
1)业务逻辑
		String tableName = "test_20220124"; // 动态传入表名
        TestTable testTable = new TestTable();
        testTable.setTableName(tableName);
        testTable.setId(7);
        testTable.setName("d");
        final int insert = otherResourceMapper.insertDynamicTableName(testTable);
        System.out.println("insert: " + insert);
        List<TestTable> list = otherResourceMapper.testDynamicTableName(testTable);
        System.out.println("tableName: " + tableName + ", list size: " + list.size());
2)mapper.java 文件
    List<TestTable> testDynamicTableName(TestTable testTable);
    int insertDynamicTableName(TestTable testTable);
3)mapper.xml 文件
<select id="testDynamicTableName" parameterType="com.manage.model.TestTable" resultType="com.manage.model.TestTable">
        select * from ${tableName}
    </select>

    <insert id="insertDynamicTableName" parameterType="com.manage.model.TestTable">
        insert into ${tableName}(id, name)
        values (#{id}, #{name})
    </insert>

注意】此处的 tableName 字段只能使用 ${},而不能使用 #{}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值