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


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 字段只能使用 ${},而不能使用 #{}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM