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

