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

溫馨提示×

溫馨提示×

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

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

mybatisplus之自動映射字段怎么使用

發布時間:2023-05-09 14:22:18 來源:億速云 閱讀:167 作者:iii 欄目:開發技術

這篇“mybatisplus之自動映射字段怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mybatisplus之自動映射字段怎么使用”文章吧。

    有時間數據庫存的字段是是一個文檔型數據(例如: 直接在某個字段存了個json數據, 或者存了個list的數據), 存取的時候手動做一次轉型太麻煩了, 而且手動轉型后數據庫存儲的內容會經過轉義

    所以為了更加優雅的和數據庫交互, 我們可以使用mybatis-plustypeHandler 進行自動的類型映射

    使用方式

    實體類注解

    在實體類的字段上加上注解 @TableField

    @TableField(value = "數據庫字段名", typeHandler = ListToStringHandler.class)

    注意:如果想要查詢的時候自動將數據庫字段映射成java對象需要在實體類上加上注解

    @TableName(autoResultMap = true)

    xml配置

            <result column="數據庫字段名" property="java實體字段名"/>
                    typeHandler="com.xxx.common.type.handler.base.ListToStringHandler 這里填寫自己typehandler的實現類"/>

    此時數據庫的增刪改操作應該都可以正確的將數據轉型存儲了

    但是查詢可能會出問題, 現象就是查詢的時候這個字段一直是空的(把字段改成String并且typeHandler去掉卻可以拿到數據)

    解決typeHandler查詢無數據顯示問題

    檢查下項目配置application.properties是否包含自己定義的轉換器路徑

    mybatis-plus.type-handlers-package=自己的包路徑

    如下: 

    mybatis-plus.type-handlers-package=com.xxx.type.handler

    提供2個基類的轉換器

    這兩個是抽象類, 需要哪種類型直接繼承并且注冊一下數據類型即可

    List 抽象類

    public abstract class BaseMybatisList2JsonHandler<T> extends BaseTypeHandler<List<T>> {
    
    	@Override
    	public void setNonNullParameter(PreparedStatement ps, int i, List<T> parameter, JdbcType jdbcType) throws SQLException {
    		ps.setString(i, JSON.toJSONString(parameter));
    	}
    
    	@Override
    	public List<T> getNullableResult(ResultSet rs, String columnName)
    			throws SQLException {
    		String data = rs.getString(columnName);
    		return StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class<T>) getRawType());
    	}
    
    	@Override
    	public List<T> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    		String data = rs.getString(columnIndex);
    		return StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class<T>) getRawType());
    	}
    
    	@Override
    	public List<T> getNullableResult(CallableStatement cs, int columnIndex)
    			throws SQLException {
    		String data = cs.getString(columnIndex);
    		return StringUtils.isBlank(data) ? null : JSON.parseArray(data, (Class<T>) getRawType());
    	}
    
    	@Override
    	public List<T> getResult(ResultSet rs, String columnName) throws SQLException {
    		return super.getResult(rs, columnName);
    	}
    
    	@Override
    	public List<T> getResult(ResultSet rs, int columnIndex) throws SQLException {
    		return super.getResult(rs, columnIndex);
    	}
    
    	@Override
    	public List<T> getResult(CallableStatement cs, int columnIndex) throws SQLException {
    		return super.getResult(cs, columnIndex);
    	}
    }

    map 抽象類

    public abstract class BaseMybatisMap2JsonHandler<T> extends BaseTypeHandler<HashMap<String, T>> {
    
    	protected abstract TypeReference getType();
    //	typeReference =  new InstructionBoHashMap();
    
    	@Override
    	public void setNonNullParameter(PreparedStatement ps, int i, HashMap<String, T> parameter, JdbcType jdbcType) throws SQLException {
    		ps.setString(i, JSON.toJSONString(parameter));
    	}
    
    	@Override
    	public HashMap<String, T> getNullableResult(ResultSet rs, String columnName)
    			throws SQLException {
    		String data = rs.getString(columnName);
    
    		return StringUtils.isBlank(data) ? null : (HashMap<String, T>)JSON.parseObject(data, getType());
    	}
    
    	@Override
    	public HashMap<String, T> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    		String data = rs.getString(columnIndex);
    		return StringUtils.isBlank(data) ? null : (HashMap<String, T>)JSON.parseObject(data, getType());
    	}
    
    	@Override
    	public HashMap<String, T> getNullableResult(CallableStatement cs, int columnIndex)
    			throws SQLException {
    		String data = cs.getString(columnIndex);
    		return StringUtils.isBlank(data) ? null : (HashMap<String, T>)JSON.parseObject(data, getType());
    	}
    
    	@Override
    	public HashMap<String, T> getResult(ResultSet rs, String columnName) throws SQLException {
    		return super.getResult(rs, columnName);
    	}
    
    	@Override
    	public HashMap<String, T> getResult(ResultSet rs, int columnIndex) throws SQLException {
    		return super.getResult(rs, columnIndex);
    	}
    
    	@Override
    	public HashMap<String, T> getResult(CallableStatement cs, int columnIndex) throws SQLException {
    		return super.getResult(cs, columnIndex);
    	}
    }

    使用方式

    我這里用List<ClockingBo>舉例

    ClockingBo: 是我自己業務數據的格式(就正常的實體就好了)

    @Slf4j
    @MappedTypes({List.class})
    @MappedJdbcTypes(JdbcType.VARCHAR)
    public class ClockingBoJsonHandler extends BaseMybatisList2JsonHandler<ClockingBo> {
    
    }

    以上就是關于“mybatisplus之自動映射字段怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    青浦区| 乐业县| 仪征市| 缙云县| 盐山县| 丹江口市| 通许县| 连南| 三明市| 罗定市| 肃宁县| 丽水市| 湘阴县| 赤水市| 承德县| 海安县| 莱芜市| 西平县| 民权县| 崇信县| 纳雍县| 西乌| 开阳县| 九龙城区| 祁连县| 大足县| 托里县| 北海市| 江山市| 舟曲县| 松滋市| 中卫市| 盐城市| 嘉义市| 寻乌县| 定兴县| 格尔木市| 利辛县| 玉门市| 焉耆| 三都|