欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis通過TypeHandler?list轉(zhuǎn)換string類型轉(zhuǎn)換方式

 更新時間:2023年07月01日 14:16:04   作者:lMasterSparkl  
這篇文章主要介紹了mybatis通過TypeHandler?list轉(zhuǎn)換string類型轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis通過TypeHandler list轉(zhuǎn)換string類型轉(zhuǎn)換

問題描述

因為需要存入list數(shù)據(jù)類型所以mybatis端需要TypeHandler進行類型轉(zhuǎn)換

代碼

1.轉(zhuǎn)換工具類

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.springframework.stereotype.Component;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
 * @ClassName ListToStringHandler
 * @Description mybatis list轉(zhuǎn)換為String 相互轉(zhuǎn)換工具類
 * @Author ygt
 * @Date 2021/3/3 14:49
 * @Version V1.0
 */
@Component
public class ListToStringHandler  extends BaseTypeHandler<List> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List list, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, JSON.toJSONString(list));
    }
    @Override
    public List getNullableResult(ResultSet resultSet, String s) throws SQLException {
        JSONArray jsonArray = JSONArray.parseArray( resultSet.getString(s));
        return jsonArray;
    }
    @Override
    public List getNullableResult(ResultSet resultSet, int i) throws SQLException {
        JSONArray jsonArray = JSONArray.parseArray( resultSet.getString(i));
        return jsonArray;
    }
    @Override
    public List getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        JSONArray jsonArray = JSONArray.parseArray( callableStatement.getString(i));
        return jsonArray;
    }
}

2.sql xml 部分代碼

需要注意 有的地方需要加雙引號有的地方不需要加雙引號否則有可能會出現(xiàn)類似如下報錯 其實是雙引號多了

mybatis: No enum constant org.apache.ibatis.type.JdbcType.“VARCHAR”

<resultMap id="BaseResultMap" type="xxxx.GameMatch">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="game_id" jdbcType="INTEGER" property="gameId" />
    <result column="positions" jdbcType="VARCHAR"  property="positions" typeHandler="xxx.util.ListToStringHandler" />
    <result column="sub_channels" jdbcType="VARCHAR"  property="subChannels" typeHandler="xxx.util.ListToStringHandler" />
  </resultMap>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from game_match
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="xxx.model.GameMatch">
    insert into game_match (id, game_id, positions, 
      sub_channels)
    values (#{id,jdbcType=INTEGER}, #{gameId,jdbcType=INTEGER}, #{positions, jdbcType=VARCHAR ,typeHandler=xxx.util.ListToStringHandler},
      #{subChannels,jdbcType=VARCHAR})
  </insert>
  <update id="updateByPrimaryKey" parameterType="xxx.model.GameMatch">
    update game_match
    set game_id = #{gameId,jdbcType=INTEGER},
      positions = #{positions, jdbcType=VARCHAR ,typeHandler=xxx.util.ListToStringHandler},
      sub_channels = #{subChannels, jdbcType=VARCHAR ,typeHandler=xxx.util.ListToStringHandler}
    where id = #{id,jdbcType=INTEGER}
  </update>

mybatis轉(zhuǎn)換器TypeHandler

寫一個自己的TypeHandler 實現(xiàn)TypeHandler接口。。泛型是你要轉(zhuǎn)換的類型

@MappedJdbcTypes(JdbcType.VARCHAR) //映射的jdbctype類型
@MappedTypes(List.class)   // 要轉(zhuǎn)換的數(shù)據(jù)類型
public class List2StringTypeHandler  implements TypeHandler<List<String>> {
//    實現(xiàn)TypeHandler<要轉(zhuǎn)換的java數(shù)據(jù)類型
    /**
     * 將字段處理到數(shù)據(jù)庫中
     * @param ps  prestatement
     * @param i   prestatement 設(shè)置參數(shù) 對應(yīng)的索引
     * @param parameter 要轉(zhuǎn)換的數(shù)據(jù)。。 這個類型和泛型類型一致
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
//        手動將 list 處理為 string
        StringBuilder sb = new StringBuilder();
        for (String s : parameter) {
            sb.append(s).append(".");
        }
        ps.setString(i,sb.toString());
    }
    /**
     * 將resultSet 轉(zhuǎn)換為 對象對應(yīng)的字段類型
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    @Override
    public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
//        將字符串 轉(zhuǎn)換為 list
        String s = rs.getString(columnName);
        String[] arr = s.split(",");
        return Arrays.asList(arr);
    }
    @Override
    public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
        return null;
    }
	// 存儲過程用到
    @Override
    public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return null;
    }
}

將這個TypeHandler注入到mybatis配置文件中,讓mybatis知道這個TypeHandler

<configuration>
<properties resource="db.properties"></properties>
<!--    注冊typeHandler-->
    <typeHandlers>
        <package name="com.cj.typehandler"/>
    </typeHandlers>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="jdbc:mysql:///test01?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--        用斜杠-->
<!--        <mapper resource="com/cj/mapper/UserMapper.xml"/>-->
        <mapper resource="com/cj/UserMapper.xml"/>
<!--        <package name="com.cj"/>-->
        <mapper resource="com/cj/TypeHandlerTransfer.xml" />
    </mappers>
</configuration>

在寫mapper映射文件的時候,要指定這個字段使用的是什么類型轉(zhuǎn)換器。。在讀取的時候指定,,在寫入的時候也要指定(全限定類名)

讀取的時候指定

<resultMap id="TypeHandlerMap" ?type="com.cj.TypeHandlerModel">
? ? ? ?<id property="id" column="id"/>
? ? ? ?<result property="hobby" column="hobby" ?typeHandler="com.cj.typehandler.List2StringTypeHandler"/>
? ?</resultMap>
? ?<select ?id="getEntity" ?resultMap="TypeHandlerMap">
? ? ? ?select * from typehandler
? ?</select>

寫入的時候指定

?<insert id="insertEntity" >
? ? ? ?insert into typeHandler (hobby) values (#{hobby,typeHandler=com.cj.typehandler.List2StringTypeHandler})
? ? </insert>

springboot可以指定typeHandler位置:

# 設(shè)置typehandler包位置
mybatis.type-handlers-package=com.cj.typeHandler

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java面試題沖刺第二十六天--實戰(zhàn)編程

    Java面試題沖刺第二十六天--實戰(zhàn)編程

    這篇文章主要為大家分享了最有價值的三道java實戰(zhàn)面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java Web 實現(xiàn)QQ登錄功能一個帳號同一時間只能一個人登錄

    Java Web 實現(xiàn)QQ登錄功能一個帳號同一時間只能一個人登錄

    對于一個帳號在同一時間只能一個人登錄,下文給大家介紹的非常詳細,對java web qq 登錄功能感興趣的朋友一起看看吧
    2016-11-11
  • Java spring AOP基礎(chǔ)

    Java spring AOP基礎(chǔ)

    本篇文章主要介紹了深入理解spring的AOP機制基礎(chǔ)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • Spring?Boot中自動執(zhí)行sql腳本的方法實例

    Spring?Boot中自動執(zhí)行sql腳本的方法實例

    在SpringBoot的架構(gòu)中,DataSourceInitializer類可以在項目啟動后初始化數(shù)據(jù),我們可以通過自動執(zhí)行自定義sql腳本初始化數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中自動執(zhí)行sql腳本的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • MyBatis 中 SqlMapConfig 配置文件詳解

    MyBatis 中 SqlMapConfig 配置文件詳解

    這篇文章主要介紹了MyBatis 中 SqlMapConfig 配置文件詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java獲取調(diào)用當前方法的類名或方法名(棧堆信息)的四種方式舉例

    Java獲取調(diào)用當前方法的類名或方法名(棧堆信息)的四種方式舉例

    在Java編程中我們經(jīng)常需要在運行時獲取當前執(zhí)行的方法名稱,這在日志記錄、性能監(jiān)控、調(diào)試等方面非常有用,這篇文章主要給大家介紹了關(guān)于Java獲取調(diào)用當前方法的類名或方法名(棧堆信息)的四種方式,需要的朋友可以參考下
    2024-09-09
  • Java中類的加載順序剖析(常用于面試題)

    Java中類的加載順序剖析(常用于面試題)

    這篇文章主要介紹了Java中類的加載順序剖析(常用于面試題),本文直接給出代碼實例和運行結(jié)果,給后給出了加載過程總結(jié),需要的朋友可以參考下
    2015-03-03
  • Java設(shè)計模式之中介者模式的實現(xiàn)方式

    Java設(shè)計模式之中介者模式的實現(xiàn)方式

    Java中介者模式是一種行為型設(shè)計模式,它通過一個中介者對象來協(xié)調(diào)多個對象之間的交互,降低對象之間的耦合度,提高系統(tǒng)的可維護性和可擴展性。本文將介紹該設(shè)計模式的原理、使用場景和實現(xiàn)方法
    2023-04-04
  • Mybatis RowBounds 限制查詢條數(shù)的實現(xiàn)代碼

    Mybatis RowBounds 限制查詢條數(shù)的實現(xiàn)代碼

    Oracle 數(shù)據(jù)庫查詢增加RowBounds限制查詢條數(shù),默認是0到1000條。下面給大家分享Mybatis RowBounds 限制查詢條數(shù)的實現(xiàn)代碼,需要的朋友參考下吧
    2016-11-11
  • java 中動態(tài)代理機制的實例講解

    java 中動態(tài)代理機制的實例講解

    這篇文章主要介紹了java 中動態(tài)代理機制的實例講解的相關(guān)資料,希望通過本文大家能夠理解掌握動態(tài)代理機制,需要的朋友可以參考下
    2017-09-09

最新評論