创建自定义的Hanndler
/*** @Package: com.datalyg.common.core.handler* @ClassName: CommaSeparatedStringTypeHandler* @Author: dujiayu* @Description: 用于mybatis 解析逗号拼接字符串* @Date: 2024/5/29 10:03* @Version: 1.0*/
public class CommaSeparatedStringTypeHandler extends BaseTypeHandler<List<String>> {@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType)throws SQLException {if (strings != null) {preparedStatement.setString(i, String.join(",", strings));} else {preparedStatement.setNull(i, jdbcType.TYPE_CODE);}}@Overridepublic List<String> getNullableResult(ResultSet resultSet, String s) throws SQLException {String result = resultSet.getString(s);return convertStringToList(result);}@Overridepublic List<String> getNullableResult(ResultSet resultSet, int i) throws SQLException {String result = resultSet.getString(i);return convertStringToList(result);}@Overridepublic List<String> getNullableResult(CallableStatement callableStatement, int i) throws SQLException {String result = callableStatement.getString(i);return convertStringToList(result);}private List<String> convertStringToList(String input) {if (input == null || input.isEmpty()) {return null;}return Arrays.asList(input.split(","));}
}
配置YML文件
# Spring
spring:mybatis:type-handlers-package: com.datalyg.common.core.handler
Mybatis XML查询写法
<resultMap id="VehicleInspectionBindConfigResultMap"type="com.datalyg.integration.vo.vehicle_inspection.VehicleInspectionInfoConfigItemVO"><result property="configId" column="id"/><result property="sort" column="sort"/><result property="inspectionMode" column="inspection_mode"/><result property="inspectionContent" column="inspection_content"/><result property="accessCriteria" column="access_criteria"/><result property="inspectionResult" column="inspection_result"/><result property="causeNonconformity" column="cause_nonconformity"/><result property="imageUrls" column="image_url" javaType="java.util.List" jdbcType="VARCHAR"typeHandler="com.datalyg.common.core.handler.CommaSeparatedStringTypeHandler"/></resultMap><select id="selectVehicleInspectionBindConfigList" resultMap="VehicleInspectionBindConfigResultMap">SELECT x.id,x.sort,x.inspection_mode,x.inspection_content,x.access_criteria,x.inspection_result,x.cause_nonconformity,x.image_urlFROM wh_vehicle_inspection_config_bind xWHERE x.vehicle_inspection_id = #{id}ORDER BY x.sort</select>
其中x.image_url
为逗号拼接的字符串,转为List<String>
集合返回
<result property="imageUrls" column="image_url" javaType="java.util.List" jdbcType="VARCHAR"typeHandler="com.datalyg.common.core.handler.CommaSeparatedStringTypeHandler"/>
通过此方法与自定义的TypeHandler关联,实现转译操作