Wenn Sie eine DB-Operation ausführen, "Aktualisieren Sie, ob diese Daten eingefügt wurden oder in einer EINZIGARTIGEN Einschränkung gefangen sind." Ansonsten möchte ich EINFÜGEN " Zu dieser Zeit habe ich mit Java verzweigt. Wenn Sie jedoch PostgreSQL verwenden, können Sie dies anscheinend gleichzeitig tun. Also habe ich es versucht.
Übrigens gibt es auf anderen Websites ziemlich viele Informationen, die nur mit SQL implementiert werden können. Deshalb werde ich dieses Mal die Methode mit MyBatis anwenden. Das ändert sich jedoch nicht viel.
Die Umgebung ist wie folgt
IDE:Eclipse </>:Java8,SpringBoot <DB-bezogen (Hauptzeile)>: PostgreSQL, MyBatis
Spring Boot und My Batis selbst sowie die Zusammenarbeit mit PostgreSQL sind nicht die Hauptpunkte, daher werde ich sie bis zu einem gewissen Grad weglassen. Diesmal ist Gradle.
Gradle (Auszug)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
application.properties (Auszug)
<!-- Postgres property -->
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/hrm
spring.datasource.username=*****
spring.datasource.password=*****
Bereiten Sie eine Tabelle in PostgreSQL vor. Dieses Mal ist Schema öffentlich.
PostgreSQL
create table tableName (
id serial primary key,
user_id integer not null,
date_id integer not null,
is_working smallint,
);
alter table tableName add constraint user_date unique(user_id, date_id);
Hier ist ein Beispiel für diese Anwendung. Angenommen, Sie haben eine Anwendung, die die Aufgabenliste eines Benutzers verwaltet und prüft, ob der Benutzer eine Aufgabe abgeschlossen hat. Fügen Sie 1 für is_working ein, wenn die Aufgabe erfolgreich ist, und 0 für Updates für einen Monat. Wenn Sie die Aufgabenverwaltung rückwirkend bearbeiten möchten oder sich herausstellt, dass die Aufgabe des Vortages am 2. September nicht abgeschlossen wurde, Ich muss is_working am 1. September aktualisieren. Unter der Annahme, dass der Wert, den Sie wie am 1. September aktualisieren möchten, der Wert, den Sie wie am 2. September neu registrieren möchten, oder der Fall, dass mehrere Benutzer vorhanden sind, wird die obige SQL zu diesem Zeitpunkt als user_id bezeichnet. Die Einschränkung wird nur festgelegt, wenn die date_id übereinstimmt.
Sie müssen lediglich die Werte von HTML an Controller und Mapper übergeben und die Upsert-Syntax in Mapper schreiben.
Mapper (Auszug)
<insert id="upsert">
insert into ${tableName} (
user_id,
date_id,
is_working
)
values (
#{user_id},
#{date_id},
#{is_working}
)
ON CONFLICT (user_id, date_id)
do update set
is_working = #{is_working}
</insert>
Nur das.
Existiert das Wort Upsert beim Schreiben der Syntax in Mapper nicht in MyBatis? Zum, Sie werden Einfügen oder Aktualisieren schreiben. Wenn Sie den Konfliktnamen nicht richtig schreiben, funktioniert er nicht. Achten Sie also darauf, keinen Fehler zu machen.
Es scheint eine andere Spezifikationsmethode zu geben, die ** DONOTHING ** und INDEX verwendet.
Wenn es DONOTHING ist, hier Für andere detaillierte Zwecke halte ich die Website hier für nützlich.
Ich habe viele Möglichkeiten gesehen, SQL direkt einzugeben, aber es gab nicht viele, die tatsächlich codiert wurden. Ich habe versucht, es als Referenz zusammenzufassen. Es ist jedoch möglicherweise für keine Methode relevant, nicht auf MyBatis beschränkt, da sich die SQL-Syntax nicht ändert. Die Beschreibung ist dieselbe, solange Sie die Parameter an Dao übergeben können.
Ich denke, dass es besser organisiert ist als das Schreiben in die if-Anweisung, daher möchte ich es aktiv in der PostgreSQL-Umgebung verwenden.
Recommended Posts