mybaties plus實(shí)體類設(shè)置typeHandler不生效的解決
實(shí)體類設(shè)置typeHandler不生效問題
實(shí)體類:
@Data @TableName(value = "centre_manage_server_info") public class ServerEntity { @TableId(value = "id") //@Column(name = "id", isKey = true, isNull = false, comment = "id" ) private String id; /** * 服務(wù)器ip */ @TableField(value = "ip", insertStrategy = FieldStrategy.NOT_EMPTY) //@Column(name = "ip", isNull = false, comment = "服務(wù)器ip" ) private String ip; /** * 服務(wù)器port */ @TableField(value = "port", insertStrategy = FieldStrategy.NOT_NULL) //@Column(name = "port", isNull = false, comment = "服務(wù)器port" ) private Integer port; /** * 服務(wù)器登錄用戶名 */ @TableField(value = "authentication_name", typeHandler = AesTypeHandler.class, insertStrategy = FieldStrategy.NOT_EMPTY) //@Column(name = "authentication_name", isNull = false, comment = "服務(wù)器登錄用戶名" ) private String authenticationName; /** * 服務(wù)器登錄密碼 */ @TableField(value = "authentication_pwd", typeHandler = AesTypeHandler.class, insertStrategy = FieldStrategy.NOT_EMPTY) //@Column(name = "authentication_pwd", isNull = false, comment = "服務(wù)器登錄密碼" ) private String authenticationPwd; }
結(jié)果插入時(shí)時(shí)有效的,但是i查詢時(shí)會(huì)出現(xiàn)部分沒有解密的問題。
解決
1.實(shí)體類注解TableName 補(bǔ)充 autoResultMap = true
@TableName(value = "centre_manage_server_info", autoResultMap = true)
2.mapper.xml的resultMap也需要
<resultMap id="ServerEntity" type="com.zhong.core.centremanage.dbservice.server.entity.ServerEntity"> ? ? ? ? <id column="id" property="id" /> ? ? ? ? <result column="ip" property="ip" /> ? ? ? ? <result column="port" property="port" /> ? ? ? ? <result column="authentication_name" property="authenticationName" typeHandler="xxxx.AesTypeHandler"/> ? ? ? ? <result column="authentication_pwd" property="authenticationPwd" typeHandler="xxxx.AesTypeHandler"/> ? ? </resultMap>
mybaties中TypeHandler的使用
在實(shí)際項(xiàng)目中,有一個(gè)物品表,其中有一個(gè)規(guī)格的字段,存入了JSON數(shù)組的字符串,但是后續(xù)在使用實(shí)體類的過程中,發(fā)現(xiàn)些不方便,到處要轉(zhuǎn) String 和 String[]很不方便。因此希望可以直接映射。
解決
發(fā)現(xiàn)網(wǎng)上有一個(gè)TypeHandler可以做到枚舉和數(shù)據(jù)字段的相互對應(yīng),那么用來做數(shù)組和String的轉(zhuǎn)化應(yīng)該也是可以的。代碼如下:
@MappedTypes({String[].class}) @MappedJdbcTypes({JdbcType.VARCHAR}) public class StringArrayTypeHandler implements TypeHandler<String[]> { ? ? @Override ? ? public void setParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException { ? ? ? ? if (parameter == null) ? ? ? ? ? ? ps.setNull(i, Types.VARCHAR); ? ? ? ? else { ? ? ? ? ? ?JSONArray array = ?new JSONArray(Arrays.asList(parameter)); ? ? ? ? ? ? ps.setString(i, array.toString()); ? ? ? ? } ? ? } ? ? @Override ? ? public String[] getResult(ResultSet rs, String s) throws SQLException { ? ? ? ? String columnValue = rs.getString(s); ? ? ? ? return this.getStringArray(columnValue); ? ? } ? ? @Override ? ? public String[] getResult(ResultSet rs, int columnIndex) throws SQLException { ? ? ? ? String columnValue = rs.getString(columnIndex); ? ? ? ? return this.getStringArray(columnValue); ? ? } ? ? @Override ? ? public String[] getResult(CallableStatement cs, int i) throws SQLException { ? ? ? ? String columnValue = cs.getString(i); ? ? ? ? return this.getStringArray(columnValue); ? ? } ? ? private String[] getStringArray(String columnValue) { ? ? ? ? if (columnValue == null) ? ? ? ? ? ? return null; ? ? ? ? JSONArray jsonArr = JSONArray.parseArray(columnValue); ? ? ? ? return ?jsonArr.toArray(new String[jsonArr.size()]); ? ? }
由于在項(xiàng)目中使用了mybatisplus,所以使用如下:
?/** ? ? ?* 商品貨品的規(guī)格列表 ? ? ?*/ ? ? @TableField(value = "specifications",el = "specifications,typeHandler=com.seven.wechatshop.shopapi.typehandle.StringArrayTypeHandler") ? ? private String[] specifications;
但是上面的代碼,并沒有生效。后來閱讀文檔,發(fā)現(xiàn)是缺少了一個(gè)配置。如下
//注意使用了plus的是添加下面這個(gè) mybatis-plus.type-handlers-package = com.seven.wechatshop.shopapi.typehandle
如果只是mybatis,那么添加的配置為
mybatis.type-handlers-package=com.seven.wechatshop.shopapi.typehandle
由于也是第一次使用mybatis-plus,有很多不熟悉的地方,但是漸漸熟悉以后,確實(shí)方便了很多,加快了開發(fā)的節(jié)奏和步伐。下面附上,一些條件參數(shù)說明
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
PowerJob?AbstractSqlProcessor方法工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob?AbstractSqlProcessor方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01使用Java橋接模式打破繼承束縛優(yōu)雅實(shí)現(xiàn)多維度變化
這篇文章主要為大家介紹了使用Java橋接模式打破繼承束縛,優(yōu)雅實(shí)現(xiàn)多維度變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05javaweb servlet中使用請求轉(zhuǎn)發(fā)亂碼的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猨avaweb servlet中使用請求轉(zhuǎn)發(fā)亂碼的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08java Spring Boot 配置redis pom文件操作
這篇文章主要介紹了java Spring Boot 配置redis pom文件操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07利用java實(shí)現(xiàn)一個(gè)客戶信息管理系統(tǒng)
這篇文章主要給大家介紹了關(guān)于利用java實(shí)現(xiàn)一個(gè)客戶信息管理系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04