Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengkonfigurasi mybatis dan pengurusan transaksi dalam springboot

Bagaimana untuk mengkonfigurasi mybatis dan pengurusan transaksi dalam springboot

WBOY
WBOYke hadapan
2023-05-10 19:13:221232semak imbas

1. Konfigurasi but spring dan mybatis

1 Pertama sekali, semua kebergantungan yang diperlukan untuk but spring untuk mengkonfigurasi mybatis adalah seperti berikut:

<!-- 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>

Di sini kita bercakap tentang pakej pemacu pangkalan data di atas, oracle dan Mysql memperkenalkan kebergantungan yang berbeza, jangan lupakannya. Jika anda terlupa untuk memperkenalkannya, kelas pemandu yang tidak dijumpai pengecualian akan dilaporkan.

2. Kemudian, tambahkan kandungan berikut dalam application.properties fail konfigurasi:

##数据库连接信息
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.*

Sebenarnya terdapat banyak kandungan bermula dengan spring.datasource secara khusus, selepas memasukkannya ke dalam application.properties fail Lihat sahaja apa yang anda boleh klik.   

Secara lalai, springboot akan mengumpulkan maklumat bermula dengan spring.datasource, mengkonfigurasi objek DataSource dan kemudian mengkonfigurasi sqlSessionFactory dan konfigurasi sambungan pangkalan data lain yang berkaitan, jadi ramai orang lain akan bercakap tentang konfigurasi apa kelas untuk menulis, yang saya rasa tidak perlu. (Mengkonfigurasi druid memerlukan @Bean)  

Sudah tentu, jika ia sangat terperinci dan konfigurasi yang berkaitan tidak boleh diklik melalui spring.datasource dalam fail application.properties, anda mungkin perlu mengkonfigurasi kelaskan sesuatu.

mybatis.mapper-locations Lokasi yang ditunjuk bermula dari src/main/resource, dan classpath perlu ditambah di hadapan ia menunjuk ke lokasi di mana fail mapper.xml anda diletakkan.

3. Mybatis menjana kelas entiti, pemeta, dsb. melalui kejuruteraan terbalik jadual pangkalan data Pertama, saya menyiarkan struktur penempatan khusus seperti berikut:

Bagaimana untuk mengkonfigurasi mybatis dan pengurusan transaksi dalam springboot

Penjelasan untuk gambar di atas adalah seperti berikut:

Kelas permulaan mesti diletakkan pada kedudukan tertinggi berbanding kelas lain dalam projek seperti yang dinyatakan dalam artikel sebelum ini. but spring tidak mempunyai konfigurasi projek musim bunga tradisional

Dalam gambar di atas, perkhidmatan diletakkan lebih tinggi daripada kelas pelaksanaannya Jika terdapat dua perkhidmatan A dan B, dan terdapat Ampl dan Bimpl dalam kelas pelaksanaan, jika Ampl memanggil B, ia mungkin berada dalam. Apabila memulakan bekas, "medan bernama ‘B’ not found" muncul. Ralat ini muncul, menunjukkan bahawa urutan pengimbasan bekas adalah salah.

Penyelesaian terbaik untuk situasi ini ialah meletakkan perkhidmatan di tempat yang tinggi seperti yang saya lakukan Apabila bekas bermula, ia mengimbas perkhidmatan terlebih dahulu, dan kemudian mengimbas impl, supaya ia pasti dapat ditemui apabila. melaksanakan perkhidmatan pengimbasan kelas, ralat ini tidak akan berlaku. Penyelesaian lain ialah menambah anotasi tambahan semasa memperkenalkan perkhidmatan: @Lazy

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

Ringkasnya, jika terdapat hubungan antara memanggil dan dipanggil, anda mesti ingat bahawa penerima mesti diimbas terlebih dahulu ke dalam but spring bekas terbina dalam , iaitu, kedudukan pakej penerima hendaklah diletakkan lebih tinggi (jawatan mestilah sekurang-kurangnya sama).

4. Anotasi @Service perlu ditambahkan pada kelas pelaksanaan perkhidmatan. Ini mungkin tidak perlu, saya belum mencubanya.  

5 Selain keperluan ini, spring boot+mybatis juga perlu menambah anotasi @MapperScan ke kelas permulaan, seperti berikut:

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

Berikut ialah nilai ruang nama. dalam mapper.xml saya

<mapper namespace="cloud.kafka.mapper.LogsUserActiveMapper" >

**Ini melengkapkan konfigurasi mybatis.

2. Konfigurasi transaksi

adalah untuk menambah dua anotasi berdasarkan mybatis

1 dan @EnableTransactionManagement Dua, ia datang daripada pakej berikut: @Transactional

spring-tx.jar

Pakej ini sebenarnya telah diperkenalkan secara automatik apabila mybatis dikonfigurasikan untuk memperkenalkan kebergantungan . , iaitu yang di bawah:

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

Jadi selagi kebergantungan di atas diperkenalkan, urus niaga tidak perlu memperkenalkan pakej lagi,

Pertama, cari pelaksanaan perkhidmatan anda kelas dan tambah

Anotasi, jika anda menambahkannya pada kelas, maka semua kaedah kelas akan diuruskan oleh transaksi Jika anda menambahkannya pada kaedah, maka hanya kaedah ini mematuhi transaksi tertentu. Sudah tentu, kami biasanya menambahkannya pada kaedah. Kerana hanya menambah, memadam dan mengubah suai akan memerlukan transaksi. @Transactional

Sebagai contoh, kaedah memasukkan data berikut menambahkan transaksi:

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

Jika anda tidak tahu apa yang ada di dalamnya, anda boleh menyemak artikel ini, spring, konfigurasi pengurusan transaksi mybatis dan penggunaan @Transactional anotation

3 Selepas konfigurasi, kelas permulaan but spring mesti mendayakan transaksi, dan anotasi yang digunakan untuk mendayakan transaksi ialah

, seperti berikut: @EnableTransactionManagement

@SpringBootApplication
@EnableTransactionManagement 
@MapperScan("microservice.qssj.mapper")//必须加这个,不加报错,如果不加,也可以在每个mapper上添加@Mapper注释,并且这里还要多填一个注释,那个我忘了,我一直用这个注解
public class QssjServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(QssjServiceApplication.class, args);
    }
}

Ini melengkapkan konfigurasi transaksi.

Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi mybatis dan pengurusan transaksi dalam springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam