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、实践样例
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 的高级功能,请参考官方文档或其他相关资源。