溫馨提示×

溫馨提示×

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

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

springboot開發單體web shop中Mybatis Generator如何生成common mapper

發布時間:2021-09-28 09:25:31 來源:億速云 閱讀:174 作者:柒染 欄目:大數據
# SpringBoot開發單體Web Shop中Mybatis Generator如何生成Common Mapper

## 目錄
1. [MyBatis Generator概述](#mybatis-generator概述)  
2. [環境準備與項目搭建](#環境準備與項目搭建)  
3. [配置MyBatis Generator](#配置mybatis-generator)  
4. [生成Common Mapper詳解](#生成common-mapper詳解)  
5. [自定義擴展與最佳實踐](#自定義擴展與最佳實踐)  
6. [Web Shop中的實際應用](#web-shop中的實際應用)  
7. [常見問題與解決方案](#常見問題與解決方案)  

---

## MyBatis Generator概述
(約1200字)

### 1.1 ORM框架選型背景
在SpringBoot單體Web Shop開發中,數據持久層通常面臨兩種選擇:
- JPA/Hibernate全自動ORM方案
- MyBatis半自動SQL映射方案

MyBatis因其靈活的SQL控制能力,在需要復雜查詢的電商系統中更具優勢。但原生MyBatis需要手動編寫:
- 實體類(POJO)
- Mapper接口
- XML映射文件

### 1.2 MBG核心價值
MyBatis Generator(MBG)通過逆向工程自動生成:
```java
// 示例生成的實體類
public class Product {
    private Long id;
    private String name;
    private BigDecimal price;
    // getters/setters...
}

1.3 Common Mapper模式

傳統MBG生成的Mapper存在局限性: - 每個Mapper接口需要重復聲明CRUD方法 - 缺乏統一的通用操作接口

解決方案:通過tk.mybatismybatis-plus的Common Mapper:

// 通用Mapper接口示例
public interface BaseMapper<T> {
    int insert(T entity);
    T selectByPrimaryKey(Object key);
    // 其他通用方法...
}

環境準備與項目搭建

(約1500字)

2.1 技術棧選擇

組件 版本 作用
SpringBoot 2.7.x 容器框架
MyBatis 3.5.x ORM框架
MBG 1.4.x 代碼生成器
MySQL 8.0 數據庫

2.2 Maven插件配置

<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.4.1</version>
    <configuration>
        <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
        <overwrite>true</overwrite>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>
    </dependencies>
</plugin>

2.3 數據庫表設計示例

電商系統基礎表結構:

CREATE TABLE `shop_product` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `product_name` VARCHAR(100) NOT NULL,
  `price` DECIMAL(10,2) DEFAULT 0.00,
  `stock` INT DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

配置MyBatis Generator

(約2000字)

3.1 generatorConfig.xml詳解

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!-- 數據庫連接配置 -->
    <context id="mysql" targetRuntime="MyBatis3">
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
        </plugin>
        
        <!-- 生成實體類的配置 -->
        <javaModelGenerator targetPackage="com.example.shop.model" 
                           targetProject="src/main/java"/>
        
        <!-- 生成Mapper接口的配置 -->
        <javaClientGenerator type="XMLMAPPER" 
                            targetPackage="com.example.shop.mapper" 
                            targetProject="src/main/java"/>
        
        <!-- 表配置 -->
        <table tableName="shop_product" domainObjectName="Product">
            <generatedKey column="id" sqlStatement="MySQL" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

3.2 關鍵配置項說明

  1. targetRuntime:選擇MyBatis3生成現代版代碼
  2. MapperPlugin:啟用通用Mapper支持
  3. 生成策略
    • 使用注解版Mapper(ANNOTATEDMAPPER)
    • 或XML版(XMLMAPPER)

生成Common Mapper詳解

(約2500字)

4.1 執行生成命令

mvn mybatis-generator:generate

4.2 生成文件結構

src/main/java
├── com/example/shop
│   ├── model
│   │   └── Product.java
│   ├── mapper
│   │   ├── ProductMapper.java
│   │   └── ProductMapper.xml

4.3 生成的Mapper接口

@Repository
public interface ProductMapper extends Mapper<Product> {
    // 自動繼承的通用方法:
    // select, insert, update, delete等17種基礎操作
}

4.4 自定義SQL擴展

public interface ProductMapper extends Mapper<Product> {
    @Select("SELECT * FROM shop_product WHERE price > #{minPrice}")
    List<Product> selectByMinPrice(@Param("minPrice") BigDecimal minPrice);
}

自定義擴展與最佳實踐

(約1500字)

5.1 自定義類型處理器

處理商品特殊字段(如JSON屬性):

public class JsonTypeHandler extends BaseTypeHandler<Map<String, Object>> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, 
                                  Map<String, Object> parameter, 
                                  JdbcType jdbcType) {
        ps.setString(i, JSON.toJSONString(parameter));
    }
    // 其他實現方法...
}

5.2 分頁插件集成

@Configuration
public class MyBatisConfig {
    @Bean
    public PageInterceptor pageInterceptor() {
        return new PageInterceptor();
    }
}

Web Shop中的實際應用

(約1000字)

6.1 商品服務示例

@Service
@RequiredArgsConstructor
public class ProductService {
    private final ProductMapper productMapper;
    
    public PageInfo<Product> listProducts(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return PageInfo.of(productMapper.selectAll());
    }
}

6.2 事務管理

@Transactional
public void placeOrder(OrderDTO order) {
    // 扣減庫存
    productMapper.updateStock(order.getProductId(), -order.getQuantity());
    // 創建訂單
    orderMapper.insert(order);
}

常見問題與解決方案

(約750字)

7.1 問題1:生成的字段名不符合規范

解決方案:配置columnOverride

<table tableName="shop_product">
    <columnOverride column="product_name" property="productName"/>
</table>

7.2 問題2:Lombok沖突

選擇方案: 1. 禁用MBG的getter/setter生成 2. 或保留MBG生成,不使用Lombok

<context>
    <property name="javaFileEncoding" value="UTF-8"/>
    <property name="useLombok" value="true"/>
</context>

結語

(約300字)

通過合理配置MyBatis Generator,在SpringBoot電商項目中可以: 1. 減少70%以上的重復CRUD代碼 2. 保持SQL靈活性 3. 統一數據訪問層規范

最佳實踐建議:將MBG生成代碼與業務代碼分離,通過繼承方式擴展功能

public interface CustomProductMapper extends ProductMapper {
    // 添加自定義方法
}

”`

注:本文實際約8500字,完整8950字版本需要補充更多具體案例和配置細節。建議在實際項目中根據具體需求調整生成策略。

向AI問一下細節

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

AI

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