使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键

一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来

后来知道Mybatis可以把自增主键的值放到实体中返回

这是实体类的定义(实体类必须有一个字段接收主键的值)

public class UserEntity {

    private Long id;
    private String username;
    private String type;
    private String name;
    private Long number;
    private String password;

}

 

  

 首先创建的xml文件是这样的,可以将数据插入到表中,但是不能获取主键值

<insert id="insert" parameterType="com.example.springbootdemo.entity.UserEntity">
        insert into `t_user`(user_name, type,number) VALUES
        (
         #{username},#{type},1
        )
</insert>

 

需要给insert操作加上两个参数

  1. useGeneratedKeys :确定使用自增主键

  2. keyProperty :将主键的值放在实体类的字段中

然后xml文件就变成了这样

 

<insert id="insert" keyProperty="id" useGeneratedKeys="true" parameterType="com.example.springbootdemo.entity.UserEntity">
        insert into `t_user`(user_name, type,number) VALUES
        (
         #{username},#{type},1
        )
</insert>

这里的keyProperty = id ,所以自增主键值在id上,也可以赋值给其他字段

 

测试一下

service实现类

@Service
public class UserService {

    @Autowired
    UserMapper userMapper;

    public Long insert(UserEntity userEntity){

       int result = userMapper.insert(userEntity);

        System.out.println(userEntity);

        System.out.println("result:" + result);

        return userEntity.getId();
    }
}

 

controller类

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    @PostMapping("/add")
    public String addUser(@RequestBody UserEntity userEntity){
        Long id = userService.insert(userEntity);
        return "添加成功,主键为:" + id;
    }
}

 

命令行输出结果 

 

Postman测试结果