91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Mybatis中通過自定義TypeHandler解決特殊類型轉換問題

發布時間:2021-06-11 16:11:21 來源:億速云 閱讀:205 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎么在Mybatis中通過自定義TypeHandler解決特殊類型轉換問題,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

定義一個role類,與數據庫的role表對應:

public class Role {
  private Integer id;
  private String name;
  private Integer[] accessIds; 
  private Date createTime;  
  // ... ignore get and set methods
}

注意到里面有一個accessIds字段,它的類型是Integer[]

數據庫設計:

DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `access_ids` varchar(255) DEFAULT NULL,
 `create_time` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES ('1', '測試角色', ',1,2,', '2019-11-14 13:43:14');

自定義Handler類

通過繼承BaseTypeHandler類,重寫其方法,定義一個Integer[]與數據庫varchar類型自動轉換的Handler類:

/**
 * Java Int數組與MySQL String轉換器
 * 比如[1,2,3] --> ",1,2,3,"
 */
public class StringToIntArrayHandler extends BaseTypeHandler<Integer[]> {

  private static final String splitCharset = ",";

  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, Integer[] objects, JdbcType jdbcType) throws SQLException {
    String str = arrayToString(objects);
    ps.setString(i, str);
  }

  @Override
  public Integer[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
    String str = rs.getString(columnName);
    return stringToArray(str);
  }

  @Override
  public Integer[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    String str = rs.getString(columnIndex);
    return stringToArray(str);
  }

  @Override
  public Integer[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    String str = cs.getString(columnIndex);
    return stringToArray(str);
  }

  // --- private methods ---
  
  /**
   * Integer數組轉String
   * 注:使用提前設定好的分隔符分割數組的每一項
   */
  private static String arrayToString(Integer[] array) {
    StringBuilder res = new StringBuilder();
    if (array != null && array.length > 0) {
      for (Object o : array) {
        res.append(splitCharset).append(o.toString());
      }
      res.append(splitCharset);
    }
    return res.length() > 0 ? res.toString() : null;
  }

    /**
   * 從String轉Integer數組
   * 注:String是用分隔符分割的,使用String.split方法可以分解為數組
   */
  private static Integer[] stringToArray(String str) {
    List<Integer> list = new ArrayList<>();
    if (str != null) {
      String[] array = str.split(splitCharset);
      if (array.length > 0) {
        for (String o : array) {
          if (o != null && o.length() > 0) {
            list.add(Integer.parseInt(o));
          }
        }
      }
    }
    return list.toArray(new Integer[0]);
  }
}

這個類的具體作用是什么呢?

  1. 當Java中類型是Integer[]時,使用這個Handler類,將Integer[]轉換為以,號分割的字符串,然后存入數據庫

  2. 當從數據庫讀取以,分割值的字符串時,可以通過這個Handler,自動將字符串轉換為Integer[]數組

下面我們演示一下具體的使用smile

在Mybatis中應用自定義的Handler

Mybatis存放SQL語句的XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.model.dao.RoleDAO">

  <resultMap id="roleMap" type="com.example.model.bean.Role">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="accessIds" column="access_ids"
        typeHandler="ccom.example.model.dao.handler.StringToIntArrayHandler"/>
    <result property="createTime" column="create_time"/>
  </resultMap>

  <select id="findById" parameterType="map" resultMap="roleMap">
    SELECT id, name, access_ids, create_time
    FROM role
    WHERE id = #{id}
  </select>

  <insert id="insert" parameterType="com.example.model.bean.Role">
    <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
      SELECT LAST_INSERT_ID()
    </selectKey>

    INSERT INTO role
    (name, create_time, access_ids)
    VALUES
    (#{name}, #{createTime}
    , #{accessIds, jdbcType=VARCHAR, typeHandler=com.example.model.dao.handler.StringToIntArrayHandler})
  </insert>

</mapper>

上述就是小編為大家分享的怎么在Mybatis中通過自定義TypeHandler解決特殊類型轉換問題了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尤溪县| 宁乡县| 原平市| 乳山市| 阜新市| 周至县| 沾化县| 额济纳旗| 保亭| 攀枝花市| 崇明县| 霍州市| 简阳市| 漳浦县| 威远县| 鄯善县| 晋中市| 南涧| 瑞安市| 瑞昌市| 南宁市| 丹巴县| 安乡县| 儋州市| 鄱阳县| 七台河市| 望奎县| 屏边| 合水县| 荔波县| 封丘县| 西贡区| 广安市| 双城市| 甘孜县| 漳平市| 龙里县| 海兴县| 泰宁县| 樟树市| 定边县|