日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Mybatis之TypeHandler使用教程

發布時間:2024/1/16 windows 56 coder
生活随笔 收集整理的這篇文章主要介紹了 Mybatis之TypeHandler使用教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

1、typeHandles的基礎知識

TypeHandler 在 MyBatis 中是一個用于處理 Java 類型和數據庫類型之間映射轉換的接口。簡而言之,它負責:

  1. Java到數據庫的映射:在執行 SQL 語句時,TypeHandler 將 Java 類型轉換為數據庫可以理解的類型。

  2. 數據庫到Java的映射:在讀取數據庫結果時,TypeHandler 將數據庫類型轉換回 Java 類型。

2、場景復現

首先建立了一個t_user表存儲用戶信息,這個表中有一欄favorites是記錄個人愛好的,愛好包括籃球、足球、排球:

在Java的User對象對應的是一個String類型的List,而在數據庫中是用分號分隔的字符表示,比如:"basketball;football;volleyball",
所以我們需要創建一個繼承了BaseTypeHandler的類(BaseTypeHandler實現了TypeHandler接口,使用BaseTypeHandler更簡單),
@MappedTypes定義需要被攔截的java類型 @MappedJdbcTypes配置jdbc類型,這里的JdbcType必須org.apache.ibatis.type.JdbcType中的枚舉類型,
然后還需要實現BaseTypeHandler抽象類中一系列的get set方法,具體實現的代碼如下:

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class ListVarcharTypeHandler extends BaseTypeHandler<List<String>> {
 @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<String> list, JdbcType jdbcType) throws SQLException {
        System.out.println("setNonNullParameter ...... "); //a,b,c,d
        //處理數據 將List轉換為特定格式的字符串
        StringBuffer sb = new StringBuffer();
        String msg = null;
        if(list != null){
            for(String p : list){
                sb.append(p).append(";");
            }
            msg = sb.toString();
            msg = msg.substring(0,msg.length()-1);
        }
        ps.setString(i,msg);
    }

    /**
     * 獲取非空的結果集
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    @Override
    public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        System.out.println(111);
        System.out.println( Arrays.asList(rs.getString(columnName).split(";")));
        return Arrays.asList(rs.getString(columnName).split(";"));
    }

    @Override
    public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        System.out.println(222);
        return Arrays.asList(rs.getString(columnIndex).split(";"));
    }

    @Override
    public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        System.out.println(333);
        return Arrays.asList(cs.getString(columnIndex).split(";"));
    }
}

創建完類后,我們還需要配置xml文件,一個是映射文件,一個mybatis配置文件:

...
    <!-- 使用將集合轉化為對應的數據類型的注解  -->
    <typeHandlers>
        <typeHandler handler="com.doing.typehandle.ListVarcharTypeHandler" />
    </typeHandlers>
...
...
    <!-- 對指定的結果進行類型轉換  -->
    <resultMap id="userMap" type="com.doing.pojo.User">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="address" column="address"/>
        <result property="gender" column="gender"/>
        <result property="favorites" column="favorites" typeHandler="com.doing.typehandle.ListVarcharTypeHandler"/>
    </resultMap>

    <!-- 添加用戶信息 -->
    <insert id="addUser" parameterType="com.doing.pojo.User" >
        insert into t_user (id,username,address,gender,favorites)values(#{id},#{username},#{address},#{gender},#{favorites,typeHandler=com.doing.typehandle.ListVarcharTypeHandler})
    </insert>


    <!--  查詢所有用戶信息  -->
    <select id="queryAll" resultMap="userMap">
        select * from t_user
    </select>


    <!-- 根據用戶編號查詢用戶信息 -->
    <select id="queryById" parameterType="java.lang.Integer"
            resultMap="userMap">
        select * from t_user where id = #{id};
    </select>
...

在配置完成之后,點擊運行:

3、總結

TypeHandler是一個用于處理 Java 類型和數據庫類型之間映射轉換的接口,BaseTypeHandler是實現了TypeHandler接口的抽象類,
使用BaseTypeHandler能夠處理數據庫數據結構和bean對象數據類型之間的轉換。

總結

以上是生活随笔為你收集整理的Mybatis之TypeHandler使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。