JAVA:Spring Boot 集成 Fastmybatis ORM 框架

admin
1
2025-10-11

1、简述

在现代 Java 开发中,ORM (对象关系映射) 框架是连接数据库与应用程序逻辑的重要工具。MyBatis 是一个流行的 ORM 框架,而 FastMyBatis 是基于 MyBatis 的增强版,它简化了许多常见的开发任务。本文将介绍如何在 Spring Boot 项目中集成 FastMyBatis。

FastMyBatis 是一个mybatis开发框架,其宗旨为:简单、快速、有效:

🔹 无需编写xml文件即可完成CRUD操作

🔹 支持mysql,sqlserver,oracle,postgresql,sqlite

🔹 支持自定义sql,sql语句可写在注解中或xml中

🔹 支持与spring-boot集成,依赖starter即可

🔹 轻量级,无侵入性,是官方mybatis的一种扩展

文档介绍地址:https://durcframework.gitee.io/fastmybatis/#/?t=1670849880047
GitHub地址:https://gitee.com/durcframework/fastmybatis

image-14at.png


2、实践样例

2.1 添加依赖

如果你更喜欢手动创建项目,可以创建一个新的 Maven 项目,在 pom.xml 文件中添加 FastMyBatis 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>net.oschina.durcframework</groupId>
    <artifactId>fastmybatis-spring-boot-starter</artifactId>
    <version>最新版本(见changelog.md)</version>
</dependency>

在 src/main/resources 目录下创建 application.yml 文件,并配置数据库连接信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/yourdatabase?useSSL=false&serverTimezone=UTC
    username: yourusername
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver

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

2.2 创建 Mapper

创建实体类

在 src/main/java/com/example/demo/entity 目录下创建一个实体类:

package com.example.demo.entity;
@Table(name="t_user", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
public class User {
    private Long id;
    private String name;
    private Integer age;

    // getters and setters
}

创建 Mapper 接口

在 src/main/java/com/example/demo/mapper 目录下创建一个 Mapper 接口:

package com.example.demo.mapper;

import com.example.demo.entity.User;
import com.gitee.fastmybatis.core.mapper.CrudMapper;

public interface UserMapper extends CrudMapper<User, Long> {
}

创建 Mapper XML 文件

在 src/main/resources/mapper 目录下创建一个 UserMapper.xml 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="age" property="age" />
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age
    </sql>

    <select id="selectById" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_List" />
        FROM user
        WHERE id = #{id}
    </select>
</mapper>

2.3 创建服务层

在 src/main/java/com/example/demo/service 目录下创建一个服务接口和实现类:

服务接口

package com.example.demo.service;

import com.example.demo.entity.User;
import java.util.List;

public interface UserService {
    User getUserById(Long id);
    List<User> getAllUsers();
    void saveUser(User user);
    void deleteUser(Long id);
}

服务实现类

package com.example.demo.service.impl;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserById(Long id) {
        return userMapper.getById(id);
    }

    @Override
    public List<User> getAllUsers() {
        return userMapper.list();
    }

    @Override
    public void saveUser(User user) {
        userMapper.save(user);
    }

    @Override
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }
}

2.4 创建控制器

在 src/main/java/com/example/demo/controller 目录下创建一个控制器:

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public void saveUser(@RequestBody User user) {
        userService.saveUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

3、主键设置

3.1 主键自增

适用于:mysql自增主键、sqlserver自增主键、oracle(触发器)

数据库主键设置自增后,这样设置:

// strategy = PkStrategy.INCREMENT 自增策略
@Table(name = "t_user", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
public class TUser {
}

这样在做insert后,id会自动填充自增后的值。

3.2 主键使用sequence(oracle)

适用于oracle表序列,创建表sequence,名字为t_user_seq
create sequence t_user_seq start with 1 increment by 1;
使用如下注解:

@Table(name = "t_user", pk = @Pk(name = "id", sequenceName = "t_user_seq"))
public class TUser {
}

3.3 主键使用uuid

数据库主键是varchar类型,insert后自动填充uuid,并返回。

@Table(name = "log", pk = @Pk(name = "log_id", strategy = PkStrategy.UUID/*配置主键UUID*/))
public class Log {
    private String logId;
}

这样在做insert后,id字段会自动填充uuid。

注:uuid的生成方式是调用数据库底层实现,如MySql的实现方式为: SELECT UUID()


4、总结

本文介绍了如何在 Spring Boot 项目中集成 FastMyBatis。通过这个集成,开发者可以利用 FastMyBatis 简化数据访问层的开发,提高开发效率。如果你有更多问题或想了解更多 FastMyBatis 的高级功能,请参考官方文档或其他相关资源。

动物装饰