From 631dd2f5c372f465d61939a8bcfb376d1db76ae9 Mon Sep 17 00:00:00 2001 From: dftre <3066417822@qq.com> Date: Wed, 26 Feb 2025 15:36:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4ListStringTypeHandler?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=80=9A=E7=94=A8=E7=9A=84?= =?UTF-8?q?GenericListTypeHandler=E7=B1=BB=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E7=A7=8D=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GenericListTypeHandler.java | 131 ++++++++++++++++++ .../handler/ListStringTypeHandler.java | 41 ------ .../mapper/generator/GenJoinTableMapper.xml | 6 +- 3 files changed, 134 insertions(+), 44 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/handler/GenericListTypeHandler.java delete mode 100644 ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/handler/ListStringTypeHandler.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/handler/GenericListTypeHandler.java b/ruoyi-common/src/main/java/com/ruoyi/common/handler/GenericListTypeHandler.java new file mode 100644 index 0000000..0d85203 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/handler/GenericListTypeHandler.java @@ -0,0 +1,131 @@ +package com.ruoyi.common.handler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 通用的List类型处理器,可处理任何元素类型 + * + * 用法示例: + * 1. 在XML中配置: + * {@code } + * + * 2. 在字段上使用注解: + * {@code @Result(column="tags", property="tags", + * typeHandler=GenericListTypeHandler.StringList.class)} + * + * 3. 在xml插值语法中使用 + * {@code #{tags,typeHandler=com.ruoyi.common.handler.GenericListTypeHandler$StringList} + * } + * + * @param 列表元素类型 + */ +public class GenericListTypeHandler extends BaseTypeHandler> { + + private final Function converter; + + /** + * 构造函数 + * + * @param converter 字符串到元素类型T的转换器 + */ + protected GenericListTypeHandler(Function converter) { + this.converter = converter; + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) + throws SQLException { + String value = StringUtils.join(parameter, ","); + ps.setString(i, value); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return convertToList(rs.getString(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return convertToList(rs.getString(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return convertToList(cs.getString(columnIndex)); + } + + private List convertToList(String value) { + if (StringUtils.isBlank(value)) { + return null; + } + + List list = new ArrayList<>(); + String[] items = value.split(","); + for (String item : items) { + if (StringUtils.isNotBlank(item)) { + list.add(converter.apply(item.trim())); + } + } + return list; + } + + // 内部类 - 常用类型的TypeHandler实现 + + /** + * String类型列表的TypeHandler + */ + public static class StringList extends GenericListTypeHandler { + public StringList() { + super(String::valueOf); + } + } + + /** + * Integer类型列表的TypeHandler + */ + public static class IntegerList extends GenericListTypeHandler { + public IntegerList() { + super(Integer::valueOf); + } + } + + /** + * Long类型列表的TypeHandler + */ + public static class LongList extends GenericListTypeHandler { + public LongList() { + super(Long::valueOf); + } + } + + /** + * Double类型列表的TypeHandler + */ + public static class DoubleList extends GenericListTypeHandler { + public DoubleList() { + super(Double::valueOf); + } + } + + /** + * Boolean类型列表的TypeHandler + */ + public static class BooleanList extends GenericListTypeHandler { + public BooleanList() { + super(Boolean::valueOf); + } + } +} diff --git a/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/handler/ListStringTypeHandler.java b/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/handler/ListStringTypeHandler.java deleted file mode 100644 index 2b70d38..0000000 --- a/ruoyi-models/ruoyi-generator/src/main/java/com/ruoyi/generator/handler/ListStringTypeHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ruoyi.generator.handler; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -import org.apache.ibatis.type.BaseTypeHandler; -import org.apache.ibatis.type.JdbcType; - -import com.ruoyi.common.utils.StringUtils; - -public class ListStringTypeHandler extends BaseTypeHandler> { - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) - throws SQLException { - String value = StringUtils.join(parameter, ","); - ps.setString(i, value); - } - - @Override - public List getNullableResult(ResultSet rs, String columnName) throws SQLException { - String value = rs.getString(columnName); - return StringUtils.isBlank(value) ? null : StringUtils.str2List(value, ",", true, true); - } - - @Override - public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - String value = rs.getString(columnIndex); - return StringUtils.isBlank(value) ? null : StringUtils.str2List(value, ",", true, true); - } - - @Override - public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - String value = cs.getString(columnIndex); - return StringUtils.isBlank(value) ? null : StringUtils.str2List(value, ",", true, true); - } - -} diff --git a/ruoyi-models/ruoyi-generator/src/main/resources/mapper/generator/GenJoinTableMapper.xml b/ruoyi-models/ruoyi-generator/src/main/resources/mapper/generator/GenJoinTableMapper.xml index f5a81c6..367c2db 100644 --- a/ruoyi-models/ruoyi-generator/src/main/resources/mapper/generator/GenJoinTableMapper.xml +++ b/ruoyi-models/ruoyi-generator/src/main/resources/mapper/generator/GenJoinTableMapper.xml @@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -63,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{leftTableFk}, #{rightTableFk}, #{joinType}, - #{joinColumns,typeHandler=com.ruoyi.generator.handler.ListStringTypeHandler}, + #{joinColumns,typeHandler=com.ruoyi.common.handler.GenericListTypeHandler$StringList}, #{orderNum}, #{newTableId}, @@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left_table_fk = #{leftTableFk}, right_table_fk = #{rightTableFk}, join_type = #{joinType}, - join_columns = #{joinColumns,typeHandler=com.ruoyi.generator.handler.ListStringTypeHandler}, + join_columns = #{joinColumns,typeHandler=com.ruoyi.common.handler.GenericListTypeHandler$StringList}, order_num = #{orderNum}, new_table_id = #{newTableId},