创建自定义的Hanndler
java
/**
* @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>> {
@Override
public 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);
}
}
@Override
public List<String> getNullableResult(ResultSet resultSet, String s) throws SQLException {
String result = resultSet.getString(s);
return convertStringToList(result);
}
@Override
public List<String> getNullableResult(ResultSet resultSet, int i) throws SQLException {
String result = resultSet.getString(i);
return convertStringToList(result);
}
@Override
public 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文件
yaml
# Spring
spring:
mybatis:
type-handlers-package: com.datalyg.common.core.handler
Mybatis XML查询写法
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_url
FROM wh_vehicle_inspection_config_bind x
WHERE x.vehicle_inspection_id = #{id}
ORDER BY x.sort
</select>
其中x.image_url
为逗号拼接的字符串,转为List<String>
集合返回
xml
<result property="imageUrls" column="image_url" javaType="java.util.List" jdbcType="VARCHAR"
typeHandler="com.datalyg.common.core.handler.CommaSeparatedStringTypeHandler"/>
通过此方法与自定义的TypeHandler关联,实现转译操作