溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot2 多模塊項目中mybatis如何使用

發布時間:2021-07-08 16:33:35 來源:億速云 閱讀:359 作者:Leah 欄目:大數據
# SpringBoot2 多模塊項目中MyBatis如何使用

## 一、多模塊項目基礎概念

### 1.1 什么是多模塊項目
多模塊項目(Multi-Module Project)是通過Maven或Gradle構建工具將一個大型項目拆分為多個相互關聯的子模塊的工程結構。每個模塊可以獨立編譯、測試和打包,同時保持項目間的依賴關系。

**典型的多模塊結構:**

parent-project(父工程) ├── pom.xml ├── module-common(公共模塊) ├── module-dao(數據訪問層) ├── module-service(業務邏輯層) └── module-web(Web表現層)


### 1.2 多模塊的優勢
1. **代碼復用**:公共代碼可提取到獨立模塊
2. **職責分離**:各層模塊職責明確
3. **構建效率**:可單獨編譯修改的模塊
4. **依賴管理**:統一管理依賴版本

## 二、創建SpringBoot多模塊項目

### 2.1 初始化父工程
```xml
<!-- parent pom.xml -->
<groupId>com.example</groupId>
<artifactId>multi-module-demo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>

<modules>
    <module>module-common</module>
    <module>module-dao</module>
    <module>module-service</module>
    <module>module-web</module>
</modules>

2.2 配置SpringBoot依賴管理

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.3</version>
    <relativePath/>
</parent>

三、MyBatis基礎集成

3.1 添加核心依賴

module-dao中引入:

<dependencies>
    <!-- MyBatis Starter -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
    
    <!-- 數據庫驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

3.2 基礎配置

application.yml配置示例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.model

四、多模塊中的MyBatis特殊配置

4.1 模塊間依賴關系

確保依賴傳遞:

<!-- module-service/pom.xml -->
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>module-dao</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

4.2 掃描路徑問題解決

方案1:主模塊添加掃描注解

@SpringBootApplication(scanBasePackages = "com.example")
@MapperScan("com.example.dao")
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

方案2:每個模塊單獨配置

// 在dao模塊配置類
@Configuration
@MapperScan("com.example.dao")
public class MyBatisConfig {}

4.3 XML映射文件路徑處理

推薦結構:

module-dao
├── src/main/java
│   └── com/example/dao
└── src/main/resources
    └── mapper
        └── UserMapper.xml

配置示例:

mybatis:
  mapper-locations: classpath*:mapper/**/*.xml

五、高級功能實現

5.1 多數據源配置

@Configuration
@MapperScan(basePackages = "com.example.db1.dao", 
           sqlSessionFactoryRef = "db1SqlSessionFactory")
public class Db1DataSourceConfig {
    
    @Bean
    @ConfigurationProperties("spring.datasource.db1")
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean
    public SqlSessionFactory db1SqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(db1DataSource());
        return factoryBean.getObject();
    }
}

5.2 動態數據源切換

實現AbstractRoutingDataSource:

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSourceType();
    }
}

5.3 自定義TypeHandler

@MappedTypes(Enum.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class EnumTypeHandler<E extends Enum<E>> 
       extends BaseTypeHandler<E> {
       
    private Class<E> type;
    
    public EnumTypeHandler(Class<E> type) {
        this.type = type;
    }
    
    // 實現抽象方法...
}

六、最佳實踐與常見問題

6.1 推薦的項目結構

multi-module-demo
├── module-common
│   ├── 通用工具類
│   └── 基礎DTO
├── module-dao
│   ├── entity
│   ├── mapper
│   └── repository
├── module-service
│   ├── service
│   └── impl
└── module-web
    ├── controller
    ├── dto
    └── config

6.2 性能優化建議

  1. 啟用二級緩存:mybatis.configuration.cache-enabled=true
  2. 批量操作使用SqlSessionTemplate
  3. 合理設置連接池參數

6.3 常見問題解決

問題1:Mapper接口無法注入 - 檢查@MapperScan包路徑是否正確 - 確認mapper接口有@Mapper注解或XML對應

問題2:XML映射未生效 - 檢查mapper-locations配置 - 確認XML文件名與接口名一致

問題3:多模塊事務失效 - 確保@Transactional注解在公共模塊 - 主模塊添加@EnableTransactionManagement

七、完整示例代碼結構

7.1 關鍵代碼示例

實體類:

// module-dao/src/main/java/com/example/entity/User.java
@Data
public class User {
    private Long id;
    private String username;
    private LocalDateTime createTime;
}

Mapper接口:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);
    
    @Insert("INSERT INTO user(username) VALUES(#{username})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insert(User user);
}

Service實現:

// module-service/src/main/java/com/example/service/impl/UserServiceImpl.java
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
    
    private final UserMapper userMapper;
    
    @Override
    @Transactional
    public Long createUser(String username) {
        User user = new User();
        user.setUsername(username);
        userMapper.insert(user);
        return user.getId();
    }
}

八、總結

在SpringBoot2多模塊項目中使用MyBatis需要注意: 1. 模塊劃分:清晰界定各模塊職責 2. 依賴管理:統一管理MyBatis相關依賴版本 3. 掃描配置:正確處理跨模塊的組件掃描 4. 資源文件:合理規劃XML映射文件位置 5. 事務管理:確??缒K事務生效

通過本文介紹的方式,可以構建出結構清晰、易于維護的SpringBoot多模塊MyBatis應用。實際開發中應根據項目規模靈活調整模塊劃分方案。

提示:本文基于SpringBoot 2.7.x和MyBatis 3.5.x版本,不同版本配置可能存在差異 “`

該文章包含約2700字,采用Markdown格式編寫,涵蓋了從多模塊項目創建到MyBatis集成的完整流程,包含代碼示例、配置建議和常見問題解決方案。文章結構清晰,適合作為技術文檔參考。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女