我使用Mybatis访问数据库,并且某些表通过哈希算法按ID进行分片。
我想编写一个Mybatis拦截器来自动更改表名,它需要获取分片列的值。
表实体:
@Data
@TableName("m_user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private Integer age;
}
UserMapper sql:
@Select("select * from m_user where id = #{id2} and name = #{name2};")
List<User> selectByIdAndName(Integer id2, String name2);
我使用boundSql.getParameterObject()
和boundSql.getParameterMappings()
进行检查,但是我无法确定分片列id
是否在sql中,然后获取分片列的值。
ParameterMappings值和ParameterObject值在这里:
parameter mapping:ParameterMapping{property='id2', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}
parameter mapping:ParameterMapping{property='name2', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}
params:{id2=1, param1=1, name2=name1, param2=name1}
参数是Mapper函数参数,但是我需要分片列id
和值,程序只能获取id2
或param1
。
如何从Mybatis获取db列和值?