我使用jdbi2进行了dropwizzard应用程序。我正在对我的表进行更新,并注释了使用@GetGeneratedKeys执行此操作并返回类型为int的dao方法。文档here说
如果返回类型为int,则该值将是更改的行数。或者,如果该方法使用@GetGeneratedKeys注释,则返回值为自动生成的键。 insert方法返回正确的'id'。 但我的dao update方法总是返回0.这里有什么问题吗?
这是我的表
CREATE TABLE `User` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`FIRSTNAME` varchar(30) DEFAULT NULL,
`LASTNAME` varchar(30) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
这是我的POJO
@Data
@Builder
@AllArgsConstructor
public class User {
@JsonProperty
private int id;
@JsonProperty
private String firstName;
@JsonProperty
private String lastName;
}
这是我的dao类,使用dao方法进行更新
@RegisterMapper(UserMapper.class)
public interface UserDao {
@SqlUpdate("Insert into User (FIRSTNAME, LASTNAME) values (:firstName, :lastName)")
@GetGeneratedKeys
int insert(@BindBean User user); //returns correct autogenerated id
@SqlUpdate("Update User set FIRSTNAME = :firstName," +
"LASTNAME = :lastName where ID = :id")
@GetGeneratedKeys
int update(@BindBean User User); //Shouldn't it return the id of updated user?
}
这是我的资源类:
@Path("/user")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class UserResource {
UserDao dao;
public UserResource(UserDao UserDao)
{
this.dao = UserDao;
}
@POST
public User add(@Valid User user) {
int i = dao.insert(user); //returns correct autogenerated id
user.setId(i);
return user;
}
@PUT
@Path("/{id}")
public User update(@PathParam("id") Integer id, @Valid User user) {
User updateUser = new User(id, user.getFirstName(),user.getLastName());
int i = dao.update(updateUser); // --> i is always 0, why?
System.out.println(i);
return updateUser;
}
}
我以这种方式使用邮递员发送请求:
Put: localhost:7466/user/5
Body:(JSON/application/json) {
"firstName": "new_first_name",
"lastName": "new_last_name"
}
如果有任何不清楚的地方,请发表评论。 TIA
编辑:我不应该至少得到这里更新的行数?我总是0。