Mybatis-Plus——ListTypeHandler处理类型为list<T>字段的增改查
创始人
2024-04-05 13:08:03
0

Mybatis-Plus——ListTypeHandler处理类型为list字段的增改查

在后端处理数据时难免会遇到类型为List的字段,为了方便(优雅)地处理这个列表类型字段的存储与读取,我们可以自定义Mybatis-Plus提供的BaseTypeHandler类,从而对任意类型的列表数据进行数据库相关处理

一、继承BaseTypeHandler类,自定义ListTypeHandler抽象类

List表示任意对象的列表类型,即以下自定义配置可以处理任意类型对象的列表类型,例如:ListList等等(其中User为自定义的对象)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.util.StringUtils;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;@Slf4j
@MappedJdbcTypes(JdbcType.VARCHAR)  //数据库类型
@MappedTypes({List.class})          //java数据类型
public abstract class ListTypeHandler extends BaseTypeHandler> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException {String content = StringUtils.isEmpty(parameter) ? null : JSON.toJSONString(parameter);ps.setString(i, content);}@Overridepublic List getNullableResult(ResultSet rs, String columnName) throws SQLException {return this.getListByJsonArrayString(rs.getString(columnName));}@Overridepublic List getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return this.getListByJsonArrayString(rs.getString(columnIndex));}@Overridepublic List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return this.getListByJsonArrayString(cs.getString(columnIndex));}private List getListByJsonArrayString(String content) {return StringUtils.isEmpty(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType());}/*** 具体类型,由子类提供* @return 具体类型*/protected abstract TypeReference> specificType();
}

二、继承ListTypeHandler抽象类,实现具体的类型列表处理

这边以String类型为例

import com.alibaba.fastjson.TypeReference;import java.util.List;public class StringTypeHandler extends ListTypeHandler {// 将ListTypeHandler(T为任意对象),具体为特定的对象String@Overrideprotected TypeReference> specificType() {return new TypeReference>() {};}
}

三、在实体类对应字段上添加注解

List为例,添加@TableField注解,表示该字段需要进行对应的转化

@ApiModelProperty("售后人员")
@TableField(typeHandler = StringTypeHandler.class)
private List afterSaleList;

通过以上操作后,可以实现List列表类型的添加修改

四、实现实体类列表字段的查找(读取)

在实体类表头添加注解@TableName,一定要配置属性autoResultMap = true

@TableName(value = "base_knowledge", autoResultMap = true)

添加以上配置后,即可完成对List列表类型字段的读取

相关内容

热门资讯

招商港口高管变更,刘利兵辞任总... 雷达财经 文|冯秀语 编|李亦辉 12月30日,招商局港口集团股份有限公司(证券简称:招商港口,证券...
原创 吉... 吉利把欣旺达给告了,索赔超23亿元! 12月26日晚间,欣旺达发布公告称,公司子公司欣旺达动力在2...
特朗普称明年1月公布美联储主席... 据新华社消息,美国总统特朗普29日说,他预计明年1月宣布美国联邦储备委员会主席鲍威尔的继任人选。 鲍...
吉利起诉欣旺达——大厂自己造电... 导语 从合资建厂到对簿公堂,昔日伙伴反目,背后是中国新能源汽车行业权力游戏的根本性转变。 近日,一则...
2026年“两新”政策部署来了 优化支持范围!2026年“两新”政策部署来了 新华社北京12月30日电(记者魏玉坤、魏弘毅)国家发展...
也迪律师说法:员工被登记为分公... 紫金财经12月30日消息 某信息咨询公司的股东为刘某(持股95%)、张某(持股5%),后公司在多个省...
三部门就《中华人民共和国增值税... 2025年12月25日,国务院总理李强签署第826号国务院令,公布《中华人民共和国增值税法实施条例》...
广发银行汕头分行开展案防形势分... 近日,广发银行汕头分行召开2025年下半年案防工作会议暨案防形势分析会,并同步举办法律知识培训。分行...
“两新”政策优化,为扩内需注入... 备受期待的2026年“国补”来了。 中央经济工作会议明确定调,“坚持内需主导,建设强大国内市场”是2...
2026年“国补”政策来了! 国家发展改革委、财政部印发的《关于2026年实施大规模设备更新和消费品以旧换新政策的通知》30日对外...