Quarkus-Mybatis-Plus持久化解决方案

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

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

}

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值