JAVA:Fastmybatis 集成的详细指南

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

2、添加 FastMyBatis 依赖

如果你更喜欢手动创建项目,可以创建一个新的 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

3、Mapper 详解

FastMyBatis 中的Mapper提供了一系列增删改查的方法,满足日常所需,完整方法说明如下表所示:

方法说明
E getByColumn(String column, Object value)根据字段查询一条记录
E getById(I id)根据主键查询
E getByQuery(Query query)根据条件查找单条记录
E getBySpecifiedColumns(List columns, Query query)查询单条数据并返回指定字段
T getBySpecifiedColumns(List columns, Query query, Class clazz)查询单条数据返回指定字段并转换到指定类中
T getColumnValue(String column, Query query, Class clazz)查询某一行某个字段值
long getCount(Query query)查询总记录数
List list(Query query)查询结果集
List listByArray(String column, Object[] values)根据多个字段值查询结果集
List listByCollection(String column, Collection<?> values)根据字段多个值查询结果集
List listByColumn(String column, Object value)根据字段查询结果集
List listByIds(Collection ids)根据多个主键查询
List listBySpecifiedColumns(List columns, Query query)查询返回指定的列,返回实体类集合
List listBySpecifiedColumns(List columns, Query query, Class clazz)查询返回指定的列,返指定类集合
List listColumnValues(String column, Query query, Class clazz)查询指定列,返指定列集合
PageInfo page(Query query)分页查询
PageInfo page(Query query, Function<E, R> converter)查询结果集,并转换结果集中的记录,转换处理每一行
PageInfo page(Query query, Supplier target, Consumer format)查询结果集,并转换结果集中的记录,并对记录进行额外处理
PageInfo page(Query query, Supplier target)查询结果集,并转换结果集中的记录
PageInfo pageAndConvert(Query query, Function<List, List> converter)查询结果集,并转换结果集中的记录,转换处理list
PageInfo pageBySpecifiedColumns(List columns, Query query, Class clazz)查询返回指定的列,返回分页数据
PageEasyui pageEasyui(Query query)查询返回easyui结果集
PageEasyui pageEasyui(Query query, Class clazz)查询返回easyui结果集,并转换结果集中的记录
E forceById(I id)根据主键查询强制查询,忽略逻辑删除字段
int save(E entity)保存,保存所有字段
int saveBatch(Collection entitys)批量保存
int saveIgnoreNull(E entity)保存,忽略null字段
int saveMultiSet(Collection entitys)批量保存,兼容更多的数据库版本,忽略重复行,此方式采用union的方式批量insert
int saveOrUpdate(E entity)保存或修改,当数据库存在记录执行UPDATE,否则执行INSERT
int saveOrUpdateIgnoreNull(E entity)保存或修改,忽略null字段,当数据库存在记录执行UPDATE,否则执行INSERT
int saveUnique(Collection entitys)批量保存,去除重复行,通过对象是否相对判断重复数据,实体类需要实现equals方法
int saveUnique(Collection entitys, Comparator comparator)批量保存,去除重复行,指定比较器判断
int updateByQuery(E entity, Query query)根据条件更新
int updateIgnoreNull(E entity)更新,忽略null字段
int updateByMap(Map<String, Object> map, Query query)根据条件更新,map中的数据转化成update语句set部分,key为数据库字段名
int delete(E entity)删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByColumn(String column, Object value)根据指定字段值删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteById(I id)根据id删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByIds(Collection ids)根据多个主键id删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByQuery(Query query)根据条件删除,在有逻辑删除字段的情况下,做UPDATE操作
int forceDelete(E entity)强制删除(底层根据id删除),忽略逻辑删除字段,执行DELETE语句
int forceDeleteById(I id)根据id强制删除,忽略逻辑删除字段,执行DELETE语句
int forceDeleteByQuery(Query query)根据条件强制删除,忽略逻辑删除字段,执行DELETE语句
Map<K, E> getMap(Query query, Function<E, K> keyGetter)查询结果并转换成Map对象
<T extends TreeNode<T, I>> List listTreeData(Query query, I rootId)查询列表并将结果转换成树结构

4、创建 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>

5、创建服务层和控制器

5.1 创建服务层

在 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);
    }
}
5.2 创建控制器

在 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);
    }
}

6、主键设置

6.1 主键自增

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

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

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

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

6.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 {
}
6.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()

7、总结

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

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾荒的小海螺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值