[JAVA] So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis

Was du machen willst

Ich möchte den Wert von auto_increment PK der eingefügten Daten verwenden.

Fazit

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.

Beispiel

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)
);

XML bearbeiten

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.

Bearbeiten Sie die Mapper-Klasse

Fügen Sie die in UserMapper.xml angegebene insert id =" insertReturnId " hinzu.

UserMapper.java


int insertReturnId(User record);

Wird in Java verwendet (Spring Boot)

Serviceklasse

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();
    }
}

Controller-Klasse

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

So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
[Swift] So erhalten Sie die Firebase-Dokument-ID
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
So erhalten Sie das Datum mit Java
So ermitteln Sie die Länge einer Audiodatei mit Java
Wie komme ich zum heutigen Tag?
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
[Java] So erhalten Sie die URL der Übergangsquelle
graphql-ruby: So erhalten Sie den Namen der Abfrage oder Mutation im Controller Hinweis
[Java] So erhalten Sie den Maximalwert von HashMap
[Android] So erhalten Sie die Einstellungssprache des Terminals
[Rails] So erhalten Sie den Inhalt starker Parameter
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So erhalten Sie die längsten Informationen von Twitter ab dem 12.12.2016
So leiten Sie den letzten Tag des Monats in Java ab
[jsoup] So erhalten Sie die gesamte Dokumentation
So erhalten Sie Parameter in Spark
Holen Sie sich die ID der automatischen Nummerierung
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
So erhöhen Sie den Wert von Map in einer Zeile in Java
Holen Sie sich das Ergebnis von POST in Java
Die Identität der Schienenparameter [: id]
So bestimmen Sie die Anzahl der Parallelen
[Java] So erhalten Sie das aktuelle Verzeichnis
So sortieren Sie eine Liste von SelectItems
So geben Sie das ID-Attribut in JSF an
So machen Sie den Einzug zu zwei Einzelbyte-Leerzeichen in der JAXB-Implementierung des JDK
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
[Rails] So erhalten Sie die aktuell mit devise angemeldeten Benutzerinformationen
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
So erhalten Sie den Einstellungswert (Eigenschaftswert) aus der Datenbank in Spring Framework
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
So erstellen Sie Ihre eigene Anmerkung in Java und erhalten den Wert
Zusammenfassung der Auswahl von Elementen in Selen
So finden Sie die Ursache des Ruby-Fehlers
So erhalten Sie Keycloak-Anmeldeinformationen in der Interceptor-Klasse
So überprüfen Sie das Protokoll im Docker-Container
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
So erhalten Sie eine Klasse von Element in Java
Ausgabe der Verwendung der Slice-Methode
Verwendung von JQuery in Rails 6 js.erb
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
[Java] So erhalten Sie die endgültige umgeleitete URL
So erstellen Sie die einfachste Blockchain in Ruby
So überprüfen Sie Rails-Befehle im Terminal
Ich möchte den Wert in Ruby erhalten
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
So überprüfen Sie die neueste Version von io.spring.platform für das Schreiben in pom.xml von Spring (STS)