1.首先,spring boot 配置mybatis需要的全部依賴如下:
<!-- 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>
這裡主要說一下上邊的資料庫驅動包,oracle和mysql引入不同的依賴,千萬不要忘記。如果忘記引入,會報找不到驅動類別異常。
2.然後,在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.*
上邊以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等,先把專案具體的放置結構貼出來如下:
對於上圖的解釋如下:
啟動類別必須放在專案中相對其他類別的最高處,前邊文章說過,spring boot沒有傳統的spring 專案配置的 上圖service放置的位置比其實現類別放置的位置高,如果有兩個service A和B,實作類別裡有Aimpl和Bimpl,如果有Aimpl呼叫B的情況,有可能會在啟動容器報「a field named ‘B’ not found」似乎這種錯誤,表示容器掃描順序有誤。 這種情況的最好的解決辦法,就應該像我將service放在高處,容器啟動先掃描進service,然後再掃描impl,這樣在實現類別掃描的時候就肯定能找到service,也就不會出現這種錯誤了。另一個解決辦法是在引入service時多添加一個註解:@Lazy 總之,如果出現呼叫與被呼叫關係,一定要記得,被呼叫者要先被掃描進spring boot內建容器,也就是被呼叫者的套件位置要放的較高一些(位置至少也待相平)。 4.service實作類別上需要加一個@Service 註解。這個可能不需要,我一直沒有試試。 5.spring boot mybatis除了這些要求,還需要在啟動類別處新增一個註解@MapperScan,如下: 如下是我的mapper.xml裡namespace的值 **這樣就完成mybatis的設定了。 就是在mybatis的基礎上加上兩個註解 1、需要的註解為 spring-tx.jar@Autowired
@Lazy //这样就会延迟加载,上图不需要,这里只是解释这注解
LogsUserActiveMapper logsUserActiveMapper;
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);
}
}
<mapper namespace="cloud.kafka.mapper.LogsUserActiveMapper" >
二、交易的設定
@ EnableTransactionManagement
和@Transactional
兩個,它們來自於下邊這個包:
##該包其實在前邊配置mybatis引入依賴時,已自動引入,就是下邊這個: <!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
@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); }
@EnableTransactionManagement ,如下:
@SpringBootApplication @EnableTransactionManagement @MapperScan("microservice.qssj.mapper")//必须加这个,不加报错,如果不加,也可以在每个mapper上添加@Mapper注释,并且这里还要多填一个注释,那个我忘了,我一直用这个注解 public class QssjServiceApplication { public static void main(String[] args) { SpringApplication.run(QssjServiceApplication.class, args); } }
以上是springboot怎麼配置mybatis和事務管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!