Ich möchte den Wert von auto_increment PK der eingefügten Daten verwenden.
Es ist in Ordnung, wenn Sie mit dem Mapper spielen, der automatisch von MyBatisGenerator generiert wird. Seien Sie jedoch vorsichtig, da es zurückgesetzt wird, wenn Sie es erneut generieren.
Angenommen, Sie haben eine solche Tabelle (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)
);
Fügen Sie eine insert id =" insertReturnId "
hinzu, die den Wert für auto_incremented zurückgibt, indem Sie den gesamten insert id =" insert "
Teil von UserMapper.xml kopieren.
UserMapper.xml
<!--Ursprünglich-->
<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>
<!--Füge das hinzu-->
<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>
Übrigens, wenn die Reihenfolge auf VOR eingestellt ist, kann der Wert vor dem Einfügen übernommen werden, und wenn er auf NACH gesetzt wird, kann der Wert nach dem Einfügen übernommen werden.
Natürlich können Sie dem Originaleinsatz Folgendes hinzufügen, aber wir empfehlen es nicht.
<selectKey resultType="int" keyProperty="userId" order="AFTER">
select @@IDENTITY
</selectKey>
Dies liegt daran, dass die ursprüngliche Einfügung auch den int-Wert (die Anzahl der Einfügungen) zurückgibt. Wenn Sie also vergessen, ihn zu bearbeiten und zu generieren, bemerken Sie ihn möglicherweise nicht.
Übrigens, wenn Sie insert id =" insertReturnId "
hinzufügen, können Sie es als Fehler "Es gibt keine Methode!" Auf der Java-Seite bemerken, auch wenn Sie vergessen, es zu generieren.
Fügen Sie die in UserMapper.xml angegebene insert id =" insertReturnId "
hinzu.
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 für Benutzer-ID des Benutzers_Geben Sie den inkrementierten Wert ein
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_Die inkrementierte Benutzer-ID wird zurückgegeben
int userId = userService.createUser("my name");
model.addAttribute("userId", userId);
return "mypage";
}
}
Recommended Posts