Inhaltsverzeichnis
1. Konfiguration von Spring Boot und Mybatis
二、事务的配置
Heim Java javaLernprogramm So konfigurieren Sie Mybatis und die Transaktionsverwaltung in Springboot

So konfigurieren Sie Mybatis und die Transaktionsverwaltung in Springboot

May 10, 2023 pm 07:13 PM
mybatis springboot

1. Konfiguration von Spring Boot und Mybatis

1. Alle für Spring Boot erforderlichen Abhängigkeiten sind wie folgt:

<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<!--以上内容放在dependencies标签外,如果你有已经有父标签,那将以上部分粘贴到父项目中-->
<!-- spring boot 项目启动必须引入的web依赖,以下内容放在dependency即可 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.1.RELEASE</version>
</dependency>       
 <!-- Spring Boot Mybatis 依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.2.0</version>
</dependency>
 <!-- oracle的数据库驱动包 -->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.4.0-atlassian-hosted</version>
</dependency>
Nach dem Login kopieren

Hier sprechen wir hauptsächlich über die unterschiedlichen Datenbanktreiberpakete Abhängigkeiten nicht vergessen. Wenn Sie vergessen, es einzuführen, wird eine Ausnahme „Treiberklasse nicht gefunden“ gemeldet.

2. Fügen Sie dann den folgenden Inhalt zur Konfigurationsdatei application.properties hinzu: application.properties 配置文件里添加如下内容:

##数据库连接信息
spring.datasource.url=jdbc:oracle:thin:@//192.168.1.171:1521/orcl
spring.datasource.username=znxd
spring.datasource.password=znxd
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
##指向mapper的xml文件位置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
##指向实体类的位置
mybatis.type-aliases-package=cloud.user.models.*
Nach dem Login kopieren

上边以spring.datasource 开头的内容其实有很多,具体,在application.properties 文件里输入后看看能点出的内容就知道了。  

springboot默认会把spring.datasource开头的信息收纳,进行DataSource对象的配置,进而进行sqlSessionFactory的配置等相关数据库连接的配置,所以其他很多人会说写什么配置类,那些我感觉没有必要的。(配置druid需要配一个@Bean)  

当然如果是特别详细的,而在application.properties文件里又通过spring.datasource 点不出相关的配置,那可能需要配置类什么的。

mybatis.mapper-locations 所指向的位置是从src/main/resource开始的,前边需要加上classpath,它指向的是你的mapper.xml文件放置的位置。

3.我是mybatis通过数据库表逆向工程生成的实体类、mapper等,先把项目具体的放置结构贴出来如下:

So konfigurieren Sie Mybatis und die Transaktionsverwaltung in Springboot

对于上图的解释如下:

启动类必须放在项目中相对其他类的最高处,前边文章说过,spring boot没有传统的spring 项目配置的 标签,它扫描bean的方式就是从启动类依次向下扫描进默认的内置tomcat容器的。

上图service放置的位置比其实现类放置的位置高,如果有两个service A和B,实现类里有Aimpl和Bimpl,如果有Aimpl调用B的情况,有可能会在启动容器报“a field named ‘B’ not found”貌似这种错误,说明容器扫描顺序有误。

这种情况的最好的解决办法,就应该像我将service放在高处,容器启动先扫描进service,然后再扫描impl,这样在实现类扫描的时候就肯定能找到service,也就不会出现这种错误了。另一种解决办法是在引入service时多添加一个注解:@Lazy

@Autowired
@Lazy //这样就会延迟加载,上图不需要,这里只是解释这注解
LogsUserActiveMapper logsUserActiveMapper;
Nach dem Login kopieren

总之,如果出现调用与被调用关系,一定要记得,被调用者要首先被扫描进spring boot内置容器,也就是被调用者的包位置要放的较高一些(位置至少也待相平)。

4.service实现类上需要加一个@Service 注解。这个可能不需要,我一直没有试试。 

5.spring boot+mybatis除了这些要求,还需要在启动类处添加一个注解@MapperScan,如下:

package cloud.kafka;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement //如果mybatis中service实现类中加入事务注解,需要此处添加该注解
@MapperScan("cloud.kafka.mapper")  //扫描的是mapper.xml中namespace指向值的包位置
public class KafkaLogApplication {
    public static void main(String[] args){
        SpringApplication.run(KafkaLogApplication.class, args);
    }
}
Nach dem Login kopieren

如下是我的mapper.xml里namespace的值

<mapper namespace="cloud.kafka.mapper.LogsUserActiveMapper" >
Nach dem Login kopieren

**这样就完成mybatis的配置了。

二、事务的配置

就是在mybatis的基础上加上两个注解

1、需要的注解为@EnableTransactionManagement@Transactional 两个,它们来自于下边这个包:

spring-tx.jar

该包其实在前边配置mybatis引入依赖时,已自动引入,就是下边这个:

 <!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
Nach dem Login kopieren

所以只要上边的依赖引入进来,那事务就不需要再引入包了,

2.首先,找到你的service实现类,加上@Transactional 注解,如果你加在类上,那该类所有的方法都会被事务管理,如果你加在方法上,那仅仅该方法符合具体的事务。当然我们一般都是加在方法上。因为只有增、删、改才会需要事务。

比如下边的一个插入数据的方法添加事务:

@Override
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout=36000,rollbackFor=Exception.class)
public Integer add(Cbf_jtcy t) {
    return cbf_jtcyMapper.insert(t);
}
Nach dem Login kopieren

如果不知道里边都是什么东西,可以查看这篇文章,spring,mybatis事务管理配置与@Transactional注解使用

3.配置完后,spring boot启动类必须要开启事务,而开启事务用的注解就是@EnableTransactionManagement

@SpringBootApplication
@EnableTransactionManagement 
@MapperScan("microservice.qssj.mapper")//必须加这个,不加报错,如果不加,也可以在每个mapper上添加@Mapper注释,并且这里还要多填一个注释,那个我忘了,我一直用这个注解
public class QssjServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(QssjServiceApplication.class, args);
    }
}
Nach dem Login kopieren
Es gibt tatsächlich viele Inhalte, die mit spring.datasource oben beginnen , in application.properties ein und sehen Sie, worauf Sie klicken können.   

springboot sammelt standardmäßig die Informationen, die mit spring.datasource beginnen, konfiguriert das DataSource-Objekt und konfiguriert dann die sqlSessionFactory und andere verwandte Datenbankverbindungskonfigurationen, sodass viele andere Leute darüber sprechen werden, welche Konfigurationsklassen ich schreiben soll das Gefühl haben, dass es nicht notwendig ist. (Für die Konfiguration von Druid ist ein @Bean erforderlich.)  🎜🎜Wenn es besonders detailliert ist und die entsprechende Konfiguration nicht über spring.datasource in der application.properties-Datei angeklickt werden kann, kann dies natürlich der Fall sein Es müssen Klassen oder ähnliches konfiguriert werden. 🎜🎜mybatis.mapper-locations Der Speicherort, auf den verwiesen wird, beginnt bei src/main/resource, und der Klassenpfad muss vorangestellt werden. Er zeigt auf den Speicherort, an dem Ihre Datei „mapper.xml“ abgelegt ist. 🎜🎜3. Mybatis hat Entitätsklassen, Mapper usw. durch Reverse Engineering von Datenbanktabellen generiert. Zuerst habe ich die spezifische Platzierungsstruktur des Projekts wie folgt gepostet: 🎜🎜So konfigurieren Sie Mybatis und Transaktionsmanagement in Springboot🎜🎜Die Erklärung für das obige Bild lautet wie folgt:🎜 🎜Die Startup-Klasse muss im Projekt platziert werden. Wie im vorherigen Artikel erwähnt, verfügt Spring Boot nicht über das herkömmliche -Tag, das in Spring-Projekten konfiguriert ist von der Startup-Klasse in den standardmäßig integrierten Tomcat-Container herunter. 🎜🎜Im obigen Bild ist der Dienst höher als seine Implementierungsklasse platziert und es gibt Aimpl und Bimpl in der Implementierungsklasse. Wenn Aimpl B aufruft, wird beim Starten möglicherweise „“ gemeldet Ein Feld namens „B“ scheint ein Fehler zu sein, was darauf hinweist, dass die Container-Scanreihenfolge falsch ist. 🎜🎜Die beste Lösung für diese Situation besteht darin, den Dienst an einer hohen Stelle zu platzieren, wie ich es getan habe. Wenn der Container startet, scannt er zuerst den Dienst und dann das Impl. Auf diese Weise kann der Dienst bei der Implementierung definitiv gefunden werden Klassenscan, das heißt, dieser Fehler tritt nicht mehr auf. Eine andere Lösung besteht darin, bei der Einführung des Dienstes eine zusätzliche Anmerkung hinzuzufügen: @Lazy🎜rrreee🎜Kurz gesagt, wenn eine Beziehung zwischen Anruf und Angerufenwerden besteht, müssen Sie bedenken, dass der Angerufene zuerst in den in Spring Boot integrierten Container gescannt werden muss Das heißt, die Paketposition des Anrufers sollte höher platziert werden (die Position sollte mindestens gleich sein). 🎜🎜4. Der Service-Implementierungsklasse muss eine @Service-Annotation hinzugefügt werden. Das ist vielleicht nicht notwendig, ich habe es noch nicht ausprobiert.  🎜🎜5.spring boot+mybatis Zusätzlich zu diesen Anforderungen müssen Sie der Startup-Klasse auch eine Annotation @MapperScan hinzufügen, wie folgt:🎜rrreee🎜Das Folgende ist der Wert des Namespace in meiner Mapper.xml🎜 rrreee🎜**Dies ist erledigt. Mybatis ist konfiguriert. 🎜🎜2. Transaktionskonfiguration🎜🎜Es müssen zwei Anmerkungen auf Basis von mybatis hinzugefügt werden🎜🎜1 Die erforderlichen Anmerkungen sind @EnableTransactionManagement und @Transactional Zweitens stammen sie aus dem folgenden Paket: 🎜<blockquote>🎜spring-tx.jar🎜</blockquote>🎜Tatsächlich wurde dieses Paket automatisch eingeführt, als mybatis für die Einführung von Abhängigkeiten konfiguriert wurde, nämlich das folgende : 🎜 rrreee🎜Solange also die oben genannten Abhängigkeiten eingeführt werden, muss die Transaktion nicht in das Paket importiert werden 🎜🎜2 Suchen Sie zunächst Ihre Service-Implementierungsklasse und fügen Sie die Annotation <code>@Transactional hinzu . Wenn Sie es in einer Klasse hinzufügen, werden alle Methoden der Klasse von Transaktionen verwaltet. Wenn Sie es in einer Methode hinzufügen, entspricht nur diese Methode der spezifischen Transaktion. Natürlich fügen wir es normalerweise der Methode hinzu. Denn nur das Hinzufügen, Löschen und Ändern erfordert Transaktionen. 🎜🎜Mit der folgenden Methode zum Einfügen von Daten wird beispielsweise eine Transaktion hinzugefügt: 🎜rrreee🎜Wenn Sie nicht wissen, was sich darin befindet, können Sie diesen Artikel lesen, die Konfiguration der Mybatis-Transaktionsverwaltung und die @Transactional-Annotation verwenden 🎜🎜3 Konfiguration: Die Spring Boot-Startup-Klasse muss Transaktionen aktivieren, und die zum Aktivieren von Transaktionen verwendete Annotation lautet @EnableTransactionManagement wie folgt: 🎜rrreee🎜Damit ist die Konfiguration der Transaktion abgeschlossen. 🎜

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie Mybatis und die Transaktionsverwaltung in Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

iBatis vs. MyBatis: Welches ist besser für Sie? iBatis vs. MyBatis: Welches ist besser für Sie? Feb 19, 2024 pm 04:38 PM

iBatis vs. MyBatis: Wofür sollten Sie sich entscheiden? Einführung: Mit der rasanten Entwicklung der Java-Sprache sind viele Persistenz-Frameworks entstanden. iBatis und MyBatis sind zwei beliebte Persistenz-Frameworks, die beide eine einfache und effiziente Lösung für den Datenzugriff bieten. In diesem Artikel werden die Funktionen und Vorteile von iBatis und MyBatis vorgestellt und einige spezifische Codebeispiele gegeben, die Ihnen bei der Auswahl des geeigneten Frameworks helfen. Einführung in iBatis: iBatis ist ein Open-Source-Persistenz-Framework

Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Feb 19, 2024 pm 05:43 PM

JPA und MyBatis: Vergleichende Analyse von Funktion und Leistung Einführung: In der Java-Entwicklung spielt das Persistenz-Framework eine sehr wichtige Rolle. Zu den gängigen Persistenz-Frameworks gehören JPA (JavaPersistenceAPI) und MyBatis. In diesem Artikel wird eine vergleichende Analyse der Funktionen und Leistung der beiden Frameworks durchgeführt und spezifische Codebeispiele bereitgestellt. 1. Funktionsvergleich: JPA: JPA ist Teil von JavaEE und bietet eine objektorientierte Datenpersistenzlösung. Es wird eine Annotation oder X übergeben

Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Feb 26, 2024 pm 07:48 PM

Interpretation der dynamischen SQL-Tags von MyBatis: Detaillierte Erläuterung der Verwendung von Set-Tags. MyBatis ist ein hervorragendes Persistenzschicht-Framework. Es bietet eine Fülle dynamischer SQL-Tags und kann Datenbankoperationsanweisungen flexibel erstellen. Unter anderem wird das Set-Tag zum Generieren der SET-Klausel in der UPDATE-Anweisung verwendet, die sehr häufig bei Aktualisierungsvorgängen verwendet wird. In diesem Artikel wird die Verwendung des Set-Tags in MyBatis ausführlich erläutert und seine Funktionalität anhand spezifischer Codebeispiele demonstriert. Was ist Set-Tag? Set-Tag wird in MyBati verwendet

Verschiedene Möglichkeiten, Batch-Löschvorgänge in MyBatis zu implementieren Verschiedene Möglichkeiten, Batch-Löschvorgänge in MyBatis zu implementieren Feb 19, 2024 pm 07:31 PM

Mehrere Möglichkeiten zur Implementierung von Batch-Löschanweisungen in MyBatis erfordern spezifische Codebeispiele. Aufgrund der zunehmenden Datenmenge sind Batch-Operationen in den letzten Jahren zu einem wichtigen Bestandteil von Datenbankoperationen geworden. In der tatsächlichen Entwicklung müssen wir häufig Datensätze in der Datenbank stapelweise löschen. Dieser Artikel konzentriert sich auf verschiedene Möglichkeiten zur Implementierung von Batch-Löschanweisungen in MyBatis und stellt entsprechende Codebeispiele bereit. Verwenden Sie das foreach-Tag, um eine Stapellöschung zu implementieren. MyBatis stellt das foreach-Tag bereit, mit dem ein Satz problemlos durchlaufen werden kann.

Ausführliche Erklärung zur Verwendung von MyBatis-Batch-Löschanweisungen Ausführliche Erklärung zur Verwendung von MyBatis-Batch-Löschanweisungen Feb 20, 2024 am 08:31 AM

Für eine ausführliche Erläuterung der Verwendung von MyBatis-Batch-Löschanweisungen sind spezifische Codebeispiele erforderlich. Einführung: MyBatis ist ein hervorragendes Persistenzschicht-Framework, das umfangreiche SQL-Operationsfunktionen bietet. In der tatsächlichen Projektentwicklung stoßen wir häufig auf Situationen, in denen Daten stapelweise gelöscht werden müssen. In diesem Artikel wird die Verwendung von MyBatis-Batch-Delete-Anweisungen ausführlich vorgestellt und spezifische Codebeispiele angehängt. Verwendungsszenario: Beim Löschen einer großen Datenmenge in der Datenbank ist es ineffizient, die Löschanweisungen einzeln auszuführen. An dieser Stelle können Sie die Batch-Löschfunktion von MyBatis verwenden

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Feb 23, 2024 pm 08:13 PM

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Während des Entwicklungsprozesses war der effiziente Datenzugriff schon immer einer der Schwerpunkte der Programmierer. Für Persistenzschicht-Frameworks wie MyBatis ist Caching eine der Schlüsselmethoden zur Verbesserung der Datenzugriffseffizienz. MyBatis bietet zwei Caching-Mechanismen: Cache der ersten Ebene und Cache der zweiten Ebene. Der Cache der ersten Ebene ist standardmäßig aktiviert. In diesem Artikel wird der Mechanismus des First-Level-Cache von MyBatis ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis zu erleichtern

Detaillierte Erklärung des MyBatis-Cache-Mechanismus: Verstehen Sie das Cache-Speicherprinzip in einem Artikel Detaillierte Erklärung des MyBatis-Cache-Mechanismus: Verstehen Sie das Cache-Speicherprinzip in einem Artikel Feb 23, 2024 pm 04:09 PM

Ausführliche Erklärung des MyBatis-Caching-Mechanismus: Lesen Sie das Prinzip der Cache-Speicherung in einem Artikel. Einführung Bei der Verwendung von MyBatis für den Datenbankzugriff ist Caching ein sehr wichtiger Mechanismus, der den Zugriff auf die Datenbank effektiv reduzieren und die Systemleistung verbessern kann. In diesem Artikel wird der Caching-Mechanismus von MyBatis ausführlich vorgestellt, einschließlich Cache-Klassifizierung, Speicherprinzipien und spezifischen Codebeispielen. 1. Cache-Klassifizierung Der MyBatis-Cache ist hauptsächlich in zwei Typen unterteilt: Cache der ersten Ebene und Cache der zweiten Ebene. Der Cache der ersten Ebene ist ein Cache der SqlSession-Ebene

Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Feb 25, 2024 pm 12:30 PM

Analyse des MyBatis-Caching-Mechanismus: Der Unterschied und die Anwendung von First-Level-Cache und Second-Level-Cache Im MyBatis-Framework ist Caching eine sehr wichtige Funktion, die die Leistung von Datenbankoperationen effektiv verbessern kann. Unter diesen sind der First-Level-Cache und der Second-Level-Cache zwei häufig verwendete Caching-Mechanismen in MyBatis. In diesem Artikel werden die Unterschiede und Anwendungen von First-Level-Cache und Second-Level-Cache im Detail analysiert und spezifische Codebeispiele zur Veranschaulichung bereitgestellt. 1. Level-1-Cache Der Level-1-Cache wird auch als lokaler Cache bezeichnet. Er ist standardmäßig aktiviert und kann nicht deaktiviert werden. Der Cache der ersten Ebene ist SqlSes

See all articles