Java 将myBatis与动态表名和对象一起使用

Java 将myBatis与动态表名和对象一起使用,java,mybatis,Java,Mybatis,我将使用myBatis创建一个动态SQL插入,其中表名和包含参数的对象是不同的。大概是这样的: INSERT INTO ${tablename} (column1, column2) VALUES (#{column1}, #{column2}) 接口方法如下所示: @Insert(CREATE) @Options(useGeneratedKeys = true, keyProperty = "id", flushCache = true) public int write(String ta

我将使用myBatis创建一个动态SQL插入,其中表名和包含参数的对象是不同的。大概是这样的:

INSERT INTO ${tablename} (column1, column2) VALUES (#{column1}, #{column2})
接口方法如下所示:

@Insert(CREATE)
@Options(useGeneratedKeys = true, keyProperty = "id", flushCache = true)
public int write(String tablename, Object object) throws Exception;
对象保存字段值的位置:

class Object {
  int id;
  String column1;
  String column2;

  getters, setters...
}

不幸的是,我不知道如何做到这一点,我发现最好的工作方式是当表名是对象的属性时,因此myBatis可以用这种方式读取值。出于某种实际原因,我想避免这种方法,也许有人有更好的主意?谢谢。

像这样使用
@Param
注释

@Insert(CREATE)
@Options(useGeneratedKeys = true, keyProperty = "object.id", flushCache = true)
public int write(@Param("tablename") String tablename,
                 @Param("object") Object object) throws Exception;
和查询

INSERT INTO ${tablename} (column1, column2) VALUES (#{object.column1}, #{object.column2})

使用参数映射。将表名和其他详细信息放入此映射是的,映射也是一个有效的解决方案,但基本上与将表名放入对象相同。表名和对象属性必须在同一个值对象中。感谢您的回答,我不知道可以在查询中识别对象及其属性。当然,它在keyProperty=“object.id”上起作用。