mybatis 如何通过Invocation获取表的主键
时间: 2024-06-01 08:13:12 浏览: 88
可以通过以下步骤获取表的主键:
1. 在 Mybatis 的 Mapper 文件中给出 SQL 语句:SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=#{tableName} AND CONSTRAINT_SCHEMA=#{databaseName} AND CONSTRAINT_NAME='PRIMARY'.
2. 在对应的 Mapper 接口中编写方法,方法的输入参数为表名 tableName 和数据源名称 databaseName。
3. 在 SqlSessionInterceptor 中修改 Invocation 对象,将参数传递给对应的 Mapper 方法。
4. 在 Mapper 方法中调用 SQL 语句,并将结果作为 String 返回。
相关问题
mybatis 拦截器如何通过Invocation获取表的主键
Mybatis拦截器可以通过获取到的Invocation对象,使用反射获取MappedStatement对象。通过MappedStatement对象可以获取到执行SQL的操作类型,以及执行SQL语句所涉及的参数信息。从而可以根据需要自定义绑定参数、转换结果集等操作。如果需要获取表的主键,可以通过MappedStatement对象获取执行的SQL语句,然后使用正则表达式或者其他方式解析SQL语句中的表名和主键信息。
mybatis-plus获取自增主键
使用Mybatis-Plus获取自增主键的步骤如下:
1. 在实体类中定义主键字段,并使用注解 @TableId(type = IdType.AUTO) 标注该字段为自增主键。
2. 在 Mapper 接口中定义插入数据的方法,并使用注解 @Insert 标注该方法为插入数据的方法。
3. 在插入数据的方法中,使用注解 @Options(useGeneratedKeys = true, keyProperty = "id") 标注自增主键的属性名为 id。
4. 在插入数据的方法中,执行插入操作后,自增主键的值会被自动设置到实体类的 id 属性中。
示例代码如下:
实体类:
```
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
}
```
Mapper 接口:
```
public interface UserMapper extends BaseMapper<User> {
@Insert("insert into user(name, age) values(#{name}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUser(User user);
}
```
使用:
```
User user = new User();
user.setName("张三");
user.setAge(18);
userMapper.insertUser(user);
Long id = user.getId(); // 获取自增主键的值
```