框架介绍
MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。
MyBatis-Flex 是什么 - MyBatis-Flex 官方网站(帮助文档)
一.基础配置
1.引入相关依赖
<!-- Spring Boot Web Starter, 用于构建Web应用程序,包括RESTful服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis Flex Spring Boot Starter, 提供了MyBatis的集成和灵活配置 -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.8.1</version>
</dependency>
<!-- MyBatis Flex Annotation Processor, 用于在编译时处理注解,生成代码等 -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-processor</artifactId>
<version>1.8.1</version>
<scope>provided</scope>
</dependency>
<!-- Druid Spring Boot Starter, 用于数据库连接池管理 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<!-- MySQL JDBC 驱动,用于连接MySQL数据库 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot Test Starter, 用于测试Spring Boot应用程序 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Lombok, 用于简化Java代码,自动生成getter/setter等 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.创建数据库表
直接参照官网示例,SQL如下:
CREATE TABLE IF NOT EXISTS `tb_account`
(
`id` INTEGER PRIMARY KEY auto_increment,
`user_name` VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME
);
INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
(2, '李四', 19, '2021-03-21');
3.在进行操作时我们需要这个两个后面是导入的方法
4.实体类
这里使用了 Lombok 来简化代码 并且创建对应的数据库类的类
实体 Account类代码
package com.example.db.mybatisflex.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 账户 实体类。
*
* @author 宋冠巡
* @since 2023-10-29
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(value = "tb_account")
public class Account implements Serializable {
@Id(keyType = KeyType.Auto)
private Integer id;
private String userName;
private Integer age;
private LocalDateTime birthday;
}
Accountmapper的类
package com.yxj.javaee.mapper;
import com.mybatisflex.core.BaseMapper;
import com.yxj.javaee.domain.po.Account;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
// @Select("select * from tb_account where id=#{id}")
Account selectTest(@Param("id") Long id);
List<Account>selectByName();
long selectByName_COUNT();
}
3.SpringBoot 原生配置
application.yml
中添加数据源配置。
并且yml文件中配置指定 MyBatis 映射文件(即 Mapper XML 文件)的位置。这些文件包含了 SQL 语句、映射规则等,是 MyBatis 框架与数据库交互的重要部分。
# 应用服务 WEB 访问端口
server:
port: 8080
spring:
datasource:
username: roo123t1111
password: 112311111
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/work?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
mybatis-flex:
mapper-locations:
- classpath*:/mapper/*.xml
基本配置已经完成可以
二. 使用 MyBatis
1.原生注解
- MyBatis 提供了
@Insert
、@Delete
、@Update
、@Select
4 个注解,用于对 Mapper 的方法进行配置,用于原生编写原生 SQL 进行增删改查, 在 MyBatis-Flex 我们一样可以使用这些注解。例如:
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
@Select("select * from account where id=#{id}")
Account selectTest(@Param("id") Long id);
在测试类中
在测试类中运行运行结果
三.使用 xml 的方式进行查询
在开始使用 xml 之前,我们需要添加如下配置,告知 mybatis 的 xml 存放路径。
mybatis-flex:
mapper-locations:
- classpath*:/mapper/*.xml
将@select注解去掉并且 resources下创建mapper 后创建 对应的mapper.xml文件
可以去测试类运行了
使用 xml 的方式分页
XML 分页是 MyBatis-Flex 在 v1.5.5 开始提供的一个 XML 分页解决方案,方便用户在使用 XML 时,对数据进行分页查询。
示例代码如下:
@Test
void pageTest() {
QueryWrapper qw = QueryWrapper.create()
.where(Account::getAge).ge(18)
.and(Account::getId).ge(0);
Page<Account> accountPage = accountMapper
.xmlPaginate("selectByName", Page.of(1, 10), qw);
System.out.println( accountPage);
}
将他放入测试类中进行测试
参数 selectByName
指的是在 XML 里定义的 select 节点的 id 的名称。selectByName
也可以全写为: com.mybatisflex.test.mapper.AccountMapper.selectByName
。
此时,需要也在 XML 里定义名称为 selectByName_COUNT
的 select 节点,用于查询数据总量。
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.mybatisflex.test.mapper.AccountMapper">
<!-- selectByName -->
<select id="selectByName" resultType="com.mybatisflex.test.model.Account">
select * from `tb_account` ${qwSql} limit ${pageOffset}, ${pageSize}
</select>
<select id="selectByName_COUNT" resultType="long">
select count(*) from `tb_account` ${qwSql}
</select>
</mapper>
10条分页,运行后结果得到前10条数据