Je veux utiliser la valeur de l'auto_increment PK des données insérées.
Ce n'est pas grave si vous jouez avec le mappeur généré automatiquement par MyBatisGenerator. Cependant, soyez prudent car il sera réinitialisé si vous le générez à nouveau.
Supposons que vous ayez une table comme celle-ci (MySQL).
user.sql
CREATE TABLE user (
user_id int(10) NOT NULL AUTO_INCREMENT,
name varchar(30) NOT NULL,
created_at datetime NOT NULL,
updated_at datetime NOT NULL,
PRIMARY KEY (user_id)
);
Ajoutez ʻinsert id = "insertReturnId" pour copier la partie ʻinsert id =" insert "
de UserMapper.xml dans son intégralité et renvoyez la valeur auto_incremented.
UserMapper.xml
<!--À l'origine-->
<insert id="insert" parameterType="mypackage.dao.entity.User">
insert into user (user_id, name, created_at, updated_at)
values (#{userId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
</insert>
<!--Ajoute ça-->
<insert id="insertReturnId" parameterType="mypackage.dao.entity.User">
insert into user (user_id, name, created_at, updated_at)
values (#{userId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
<selectKey resultType="int" keyProperty="userId" order="AFTER">
select @@IDENTITY
</selectKey>
</insert>
Par ailleurs, si order est défini sur BEFORE, la valeur avant insertion peut être prise, et si elle est définie sur AFTER, la valeur après insertion peut être prise.
Bien sûr, vous pouvez ajouter ce qui suit à l'insert d'origine, mais nous ne le recommandons pas.
<selectKey resultType="int" keyProperty="userId" order="AFTER">
select @@IDENTITY
</selectKey>
Cela est dû au fait que l'insert d'origine renvoie également la valeur int (le nombre d'insertions), donc si vous oubliez de le modifier et de le générer, vous risquez de ne pas le remarquer. Au fait, si vous ajoutez ʻinsert id = "insertReturnId" `, même si vous oubliez de le générer, vous pouvez le remarquer comme une erreur" Il n'y a pas de méthode! "Du côté java.
Ajoutez ʻinsert id = "insertReturnId" `spécifié dans UserMapper.xml.
UserMapper.java
int insertReturnId(User record);
UserService.java
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public int createUser(String name) {
User user = new User();
user.setName(name);
user.setCreatedAt(new Date());
user.setUpdatedAt(new Date());
//Auto pour userId de l'utilisateur_Entrez la valeur incrémentée
userMapper.insertReturnId(user);
return user.getUserId();
}
}
UserController.java
@Controller
public class AuthController {
@Autowired
UserService userService;
@RequestMapping(value = "/mypage")
public String mypage(Model model) throws Exception {
// auto_L'ID utilisateur incrémenté est retourné
int userId = userService.createUser("my name");
model.addAttribute("userId", userId);
return "mypage";
}
}
Recommended Posts