您好,登錄后才能下訂單哦!
這篇“mybatisplus之自動映射字段怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mybatisplus之自動映射字段怎么使用”文章吧。
有時間數據庫存的字段是是一個文檔型數據(例如: 直接在某個字段存了個json
數據, 或者存了個list
的數據), 存取的時候手動做一次轉型太麻煩了, 而且手動轉型后數據庫存儲的內容會經過轉義
所以為了更加優雅的和數據庫交互, 我們可以使用mybatis-plus
的 typeHandler
進行自動的類型映射
在實體類的字段上加上注解 @TableField
@TableField(value = "數據庫字段名", typeHandler = ListToStringHandler.class)
注意:如果想要查詢的時候自動將數據庫字段映射成java對象需要在實體類上加上注解
@TableName(autoResultMap = true)
<result column="數據庫字段名" property="java實體字段名"/> typeHandler="com.xxx.common.type.handler.base.ListToStringHandler 這里填寫自己typehandler的實現類"/>
此時數據庫的增刪改操作應該都可以正確的將數據轉型存儲了
但是查詢可能會出問題, 現象就是查詢的時候這個字段一直是空的(把字段改成String
并且typeHandler
去掉卻可以拿到數據)
檢查下項目配置application.properties
是否包含自己定義的轉換器路徑
mybatis-plus.type-handlers-package=自己的包路徑
如下:
mybatis-plus.type-handlers-package=com.xxx.type.handler
這兩個是抽象類, 需要哪種類型直接繼承并且注冊一下數據類型即可
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); } }
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之自動映射字段怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。