Streamlining Persistence Layer Development with MyBatis Generator

Boilerplate code generasion in enterprise Java applications frequently consumes significant development cycles. Manually crafting data access objects, mapping interfaces, and repetitive CRUD operations introduces redundancy and potential maintenance overhead. MyBatis Generator (MBG) addresses this by automating the creation of persistent layers tailored to your database schema.

Implementation Workflow

1. Define Database Schema

Begin by establishing the target database structure. For demonstration purposes, we will utilize an e-commerce inventory table:

CREATE TABLE inventory_items (
    item_code INT PRIMARY KEY AUTO_INCREMENT,
    product_title VARCHAR(100) NOT NULL,
    quantity_available INT DEFAULT 0
);

2. Configure Generation Parameters

Create a configuration file named mbg-config.xml at the project root. This document drives the code generation engine. Key adjustments include modifying package destinations, enabling actual colum names, and suppressing auto-generated comments for cleaner production code.

<generatorConfiguration>
  <context id="MySQLContext" targetRuntime="MyBatis3">
    <commentGenerator>
      <property name="suppressAllComments" value="true" />
    </commentGenerator>

    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/inventory_db"
                    dbUser="app_admin"
                    dbPassword="secure_pass_123">
    </jdbcConnection>

    <javaTypeResolver propertyMap="{forceBigDecimals: false}" />

    <javaModelGenerator targetPackage="com.retail.entities" targetProject="./src/main/java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
      <property name="useActualColumnNames" value="true" />
    </javaModelGenerator>

    <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.retail.repositories" targetProject="./src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <table schema="inventory_db" tableName="inventory_items" domainObjectName="ItemRecord" />
  </context>
</generatorConfiguration>

Udpate the JDBC credentials and schema references to match your local or CI/CD environment before proceeding.

3. Execute the Generator

Run the utility via the command line. The -overwrite flag ensures regenerated artifacts replace previous versions seamlessly:

java -jar mybatis-generator-core-1.4.0.jar -configfile mbg-config.xml -overwrite

4. Integrate Generated Artifacts into Business Logic

The execution produces three primary components: the entity model, the persistence interface, and the corresponding XML mapping file. Below is a demonstration of how to consume these artifacts within a Spring-managed service layer.

// src/main/java/com/retail/entities/ItemRecord.java
package com.retail.entities;

public class ItemRecord {
    private Integer itemCode;
    private String productTitle;
    private Integer quantityAvailable;
    // Standard getters and setters omitted for brevity
}
// src/main/java/com/retail/repositories/ItemRecordMapper.java
package com.retail.repositories;

import com.retail.entities.ItemRecord;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface ItemRecordMapper {
    int insert(ItemRecord record);
    ItemRecord selectByPrimaryKey(Integer key);
}
// src/main/java/com/retail/services/InventoryService.java
package com.retail.services;

import com.retail.entities.ItemRecord;
import com.retail.repositories.ItemRecordMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(readOnly = true)
public class InventoryService {

    private final ItemRecordMapper itemRecordMapper;

    public InventoryService(ItemRecordMapper itemRecordMapper) {
        this.itemRecordMapper = itemRecordMapper;
    }

    @Transactional
    public void registerNewItem(ItemRecord newItem) {
        itemRecordMapper.insert(newItem);
    }

    public ItemRecord fetchItemDetails(Integer itemId) {
        return itemRecordMapper.selectByPrimaryKey(itemId);
    }
}

The generated persistence contracts integrate directly with standard dependency injection frameworks, eliminating manual repository implementation while preserving full control over complex query extensions.

Tags: mybatis-generator java-persistence orm-automation spring-boot-dao xml-mapping

Posted on Sun, 13 Sep 2026 16:35:53 +0000 by eddy556