Quarkus-Mybatis-Plus持久化解决方案
引入依赖:
Maven
<dependency>
<groupId>io.quarkiverse.mybatis</groupId>
<artifactId>quarkus-mybatis-plus</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>
Gradle
implementation 'io.quarkiverse.mybatis:quarkus-mybatis-plus:1.0.3'
implementation 'io.quarkus:quarkus-jdbc-mysql'
数据库表结构:
Table
create table t_user_info
(
id bigint auto_increment comment '自增主键'
primary key,
email varchar(30) not null comment '邮箱',
password varchar(20) not null comment '密码',
actual_name varchar(20) null comment '真实姓名',
age int null comment '年龄',
phone varchar(20) not null comment '手机号',
is_del int default 0 not null comment '是否删除:0.未删除,1.已删除',
create_time datetime not null comment '创建时间'
)
comment '用户信息表';
application.properties
#【配置数据源】数据库地址、驱动、用户名、密码
quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
quarkus.datasource.jdbc.driver=com.mysql.cj.jdbc.Driver
quarkus.datasource.username=root
quarkus.datasource.password=123456
案例代码:
注:quarkus-mbp已经默认开启分页,无需像SpringBoot那样需要手动写配置类开启。字段映射驼峰转下划线目前没有找到解决方案,所以使用@TableField注解。
UserInfoEntity
package com.abing.mbp.user.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 用户信息 Entity
*
* @author abing
* @date 2022/5/20
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@RegisterForReflection
@TableName("t_user_info")
public class UserInfoEntity implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
public Long id;
/**
* 邮箱
*/
public String email;
/**
* 密码
*/
public String password;
/**
* 真实姓名
*/
@TableField("actual_name")
public String actualName;
/**
* 年龄
*/
public Integer age;
/**
* 手机号
*/
public String phone;
/**
* 是否删除:0.未删除,1.已删除
*/
@TableField("is_del")
public Integer isDel;
/**
* 创建时间
*/
@TableField("create_time")
public Date createTime;
}
UserInfoMapper
package com.abing.mbp.user.mapper;
import com.abing.mbp.user.entity.UserInfoEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 用户信息 Mapper
*
* @author abing
* @date 2022/5/20
*/
@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfoEntity> {
}
UserInfoResource
package com.abing.mbp.user.resource;
import com.abing.mbp.user.entity.UserInfoEntity;
import com.abing.mbp.user.mapper.UserInfoMapper;
import com.abing.mbp.util.BasePage;
import com.abing.mbp.util.BaseResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.Date;
/**
* 用户信息 Resource
*
* @author abing
* @date 2022/5/20
*/
@Path("/user")
@Produces(MediaType.APPLICATION_JSON)
@Transactional
public class UserInfoResource {
@Inject
UserInfoMapper userInfoMapper;
/**
* 分页条件查询
*
* @param pageNo 页码
* @param pageSize 每页显示条数
*/
@GET
@Path("/list")
public BaseResponse<BasePage<UserInfoEntity>> list(@QueryParam("email") String email,
@QueryParam("actualName") String actualName,
@QueryParam("phone") String phone,
@QueryParam("pageNo") Integer pageNo,
@QueryParam("pageSize") Integer pageSize) {
Page<UserInfoEntity> page = userInfoMapper.selectPage(new Page<>(pageNo, pageSize), new QueryWrapper<UserInfoEntity>()
.eq(StringUtils.isNotBlank(email), "email", email)
.eq(StringUtils.isNotBlank(actualName), "actual_name", actualName)
.eq(StringUtils.isNotBlank(phone), "phone", phone));
return BaseResponse.success(new BasePage<>(page));
}
/**
* 新增
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
public BaseResponse<Void> add(UserInfoEntity userInfo) {
UserInfoEntity entity = userInfoMapper.selectOne(new QueryWrapper<UserInfoEntity>()
.eq("phone", userInfo.getPhone())
.eq("is_del", 0));
if (entity != null) {
return BaseResponse.error("手机号不能重复");
}
userInfo.setCreateTime(new Date());
userInfo.setIsDel(0);
// 数据持久化
userInfoMapper.insert(userInfo);
return BaseResponse.success();
}
/**
* 修改
*/
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public BaseResponse<Void> update(UserInfoEntity userInfo) {
UserInfoEntity entity = userInfoMapper.selectById(userInfo.getId());
if (entity == null) {
return BaseResponse.error("id不存在");
}
userInfoMapper.updateById(userInfo);
return BaseResponse.success();
}
/**
* 删除
*/
@DELETE
@Path("/{id}")
public BaseResponse<Void> delete(@PathParam("id") Long id) {
userInfoMapper.deleteById(id);
return BaseResponse.success();
}
}

本文介绍了如何在Quarkus应用中使用Mybatis-Plus进行持久化操作,详细讲解了引入依赖、数据库表结构、配置文件设置以及提供案例代码,包括UserInfoEntity、UserInfoMapper和UserInfoResource的实现。
397





