IntegerArrayHandler.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package com.nuliji.tools.mybatis.handler;
  2. import org.apache.ibatis.type.BaseTypeHandler;
  3. import org.apache.ibatis.type.JdbcType;
  4. import org.apache.ibatis.type.MappedJdbcTypes;
  5. import org.apache.ibatis.type.MappedTypes;
  6. import java.sql.CallableStatement;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. import java.util.List;
  13. @MappedTypes(int[].class)
  14. @MappedJdbcTypes(value = {JdbcType.VARCHAR}, includeNullJdbcType = true)
  15. public class IntegerArrayHandler extends BaseTypeHandler<int[]> {
  16. @Override
  17. public void setNonNullParameter(PreparedStatement ps, int i, int[] parameter, JdbcType jdbcType) throws SQLException {
  18. List<String> list = new ArrayList<>();
  19. for (Integer item : parameter) {
  20. list.add(String.valueOf(item));
  21. }
  22. ps.setString(i, String.join(",", list));
  23. }
  24. @Override
  25. public int[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
  26. String str = rs.getString(columnName);
  27. if (rs.wasNull())
  28. return null;
  29. if (str.isEmpty()) return new int[0];
  30. return Arrays.stream(str.split(",")).mapToInt(Integer::valueOf).toArray();
  31. }
  32. @Override
  33. public int[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
  34. String str = rs.getString(columnIndex);
  35. if (rs.wasNull())
  36. return null;
  37. if (str.isEmpty()) return new int[0];
  38. return Arrays.stream(str.split(",")).mapToInt(Integer::valueOf).toArray();
  39. }
  40. @Override
  41. public int[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
  42. String str = cs.getString(columnIndex);
  43. if (cs.wasNull())
  44. return null;
  45. if (str.isEmpty()) return new int[0];
  46. return Arrays.stream(str.split(",")).mapToInt(Integer::valueOf).toArray();
  47. }
  48. }