最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

問題描述

因?yàn)樾枰嫒雔ist數(shù)據(jù)類型所以mybatis端需要TypeHandler進(jìn)行類型轉(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 部分代碼

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

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

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

@MappedJdbcTypes(JdbcType.VARCHAR) //映射的jdbctype類型
@MappedTypes(List.class)   // 要轉(zhuǎn)換的數(shù)據(jù)類型
public class List2StringTypeHandler  implements TypeHandler<List<String>> {
//    實(shí)現(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ù)。。 這個(gè)類型和泛型類型一致
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
//        手動(dòng)將 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;
    }
	// 存儲(chǔ)過程用到
    @Override
    public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return null;
    }
}

將這個(gè)TypeHandler注入到mybatis配置文件中,讓mybatis知道這個(gè)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映射文件的時(shí)候,要指定這個(gè)字段使用的是什么類型轉(zhuǎn)換器。。在讀取的時(shí)候指定,,在寫入的時(shí)候也要指定(全限定類名)

讀取的時(shí)候指定

<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>

寫入的時(shí)候指定

?<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é)

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

相關(guān)文章

  • Java中Redis的布隆過濾器詳解

    Java中Redis的布隆過濾器詳解

    這篇文章主要介紹了Java中Redis的布隆過濾器詳解,我們經(jīng)常會(huì)把一部分?jǐn)?shù)據(jù)放在Redis等緩存,比如產(chǎn)品詳情,這樣有查詢請求進(jìn)來,我們可以根據(jù)產(chǎn)品Id直接去緩存中取數(shù)據(jù),而不用讀取數(shù)據(jù)庫,這是提升性能最簡單,最普遍,也是最有效的做法,需要的朋友可以參考下
    2023-09-09
  • mybatis中嵌套查詢的使用解讀

    mybatis中嵌套查詢的使用解讀

    這篇文章主要介紹了mybatis中嵌套查詢的使用解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring多定時(shí)任務(wù)@Scheduled執(zhí)行阻塞問題解決

    Spring多定時(shí)任務(wù)@Scheduled執(zhí)行阻塞問題解決

    這篇文章主要介紹了Spring多定時(shí)任務(wù)@Scheduled執(zhí)行阻塞問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析

    Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析

    這篇文章主要介紹了Netty分布式server啟動(dòng)流程N(yùn)io創(chuàng)建源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Lombok在idea中的使用教程

    Lombok在idea中的使用教程

    Lombok是一個(gè)可以通過簡單的注解形式,來幫助我們簡化消除一些必須有但顯得很臃腫(如果getter、setter方法)的Java代碼的工具,通過使用對應(yīng)的注解,可以在編譯源碼的時(shí)候生成對應(yīng)的方法,這篇文章主要介紹了Lombok在idea中的使用,需要的朋友可以參考下
    2023-03-03
  • Spring 注入static屬性值方式

    Spring 注入static屬性值方式

    文本介紹了Spring如何從屬性文件給static屬性注入值,在寫一些與配置相關(guān)的工具類時(shí)常用。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出

    Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出

    這篇文章主要介紹了Java生成10個(gè)1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出,需要的朋友可以參考下
    2015-10-10
  • Java 實(shí)現(xiàn)一個(gè)漢諾塔實(shí)戰(zhàn)練習(xí)

    Java 實(shí)現(xiàn)一個(gè)漢諾塔實(shí)戰(zhàn)練習(xí)

    漢諾塔是源于印度一個(gè)古老傳說的益智玩具。大梵天創(chuàng)造世界時(shí)做了三根石柱,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,三根柱子之間一次只能移動(dòng)一個(gè)圓盤
    2021-10-10
  • Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java正則表達(dá)式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    什么是正則表達(dá)式,正則表達(dá)式的作用是什么?這篇文章主要為大家詳細(xì)介紹了Java正則表達(dá)式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java 中HashCode重復(fù)的可能性

    java 中HashCode重復(fù)的可能性

    這篇文章主要介紹了java 中HashCode重復(fù)的可能性的相關(guān)資料,這里提供實(shí)例及測試代碼,需要的朋友可以參考下
    2017-07-07

最新評(píng)論

靖安县| 馆陶县| 滕州市| 定边县| 玉林市| 东乌珠穆沁旗| 巴东县| 长岭县| 甘德县| 资源县| 东平县| 临颍县| 尚义县| 竹溪县| 巴彦淖尔市| 东海县| 江门市| 屏山县| 富蕴县| 河池市| 金华市| 新丰县| 灵川县| 桐乡市| 孝义市| 文水县| 普陀区| 沁水县| 保亭| 泰兴市| 大埔县| 泾川县| 于田县| 开阳县| 开江县| 老河口市| 太仆寺旗| 乐昌市| 龙游县| 曲周县| 孟州市|