關(guān)于Mybatis no typehandler found for property xxx(代表某個字段)

  • 遇到這個問題的背景是继谚,更新完新jar包之后報這個錯花履,后來問大家原來數(shù)據(jù)庫有一個字段是改為存的json(real)格式的數(shù)據(jù)诡壁,功能組用的底層數(shù)據(jù)庫鏈接已經(jīng)封裝好了怎么處理json格式映射荠割。數(shù)據(jù)遷移組,又自己從新封裝了一套數(shù)據(jù)庫鏈接沒有對json格式映射處理所以會出現(xiàn)這個問題夺克。

  • 以上是背景

現(xiàn)在要解決這個json格式映射問題

首先我們要創(chuàng)建自己的SqlSessionFactory

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sl.handler.MyBatisHandler;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * @author shuliangzhao
 * @Title: MyBatisConfigurtion
 * @ProjectName design-parent
 * @Description: TODO
 * @date 2019/5/28 21:52
 */
@Configuration
public class MyBatisConfigurtion {

    @Value("${mybatis.typeAliasesPackage}")
    private String typeAliasesPackage;

    //  配置mapper的掃描懊直,找到所有的mapper.xml映射文件
    @Value("${mybatis.mapperLocations}")
    private String mapperLocations;


    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    @Primary
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
        sqlSessionFactoryBean.setConfiguration(buildConfiguration());
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    @Primary
    public SqlSessionTemplate sqlSessionTemplate() throws Exception {
        return  new SqlSessionTemplate(sqlSessionFactory());
    }

    @Bean
    @Primary
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    private org.apache.ibatis.session.Configuration buildConfiguration() {
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.getTypeHandlerRegistry().register(JSONObject.class, JdbcType.VARCHAR, MyBatisHandler.class);
        configuration.getTypeHandlerRegistry().register(JSONArray.class, JdbcType.VARCHAR, MyBatisHandler.class);
        return configuration;
    }


}

其中 buildConfiguration() 這個方法這個是最關(guān)鍵的

還要實現(xiàn)自己的Handler


import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author shuliangzhao
 * @Title: MysqlHandler
 * @ProjectName design-parent
 * @Description: TODO
 * @date 2019/5/28 22:20
 */
public class MyBatisHandler extends BaseTypeHandler<Object> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, JSON.toJSONString(o));
    }

    @Override
    public Object getNullableResult(ResultSet resultSet, String s) throws SQLException {
        String sqlJson = resultSet.getString(s);
        if (null != sqlJson) {
            return JSON.parse(sqlJson);
        }
        return null;
    }

    @Override
    public Object getNullableResult(ResultSet resultSet, int i) throws SQLException {
        String sqlJson = resultSet.getString(i);
        if (null != sqlJson) {
            return JSON.parse(sqlJson);
        }
        return null;
    }

    @Override
    public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        String sqlJson = callableStatement.getString(i);
        if (null != sqlJson) {
            return JSON.parse(sqlJson);
        }
        return null;
    }
}

只是把主要代碼列出來了魁索,如果大家不會整合可以百度springboot 整合mybatis
或者參考 https://www.cnblogs.com/changhai/p/8891190.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粗蔚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子致扯,更是在濱河造成了極大的恐慌,老刑警劉巖抖僵,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耍群,死亡現(xiàn)場離奇詭異,居然都是意外死亡慷吊,警方通過查閱死者的電腦和手機(jī)曹抬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚷闭,“玉大人胞锰,你說我怎么就攤上這事兢榨。” “怎么了吵聪?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵吟逝,是天一觀的道長块攒。 經(jīng)常有香客問我,道長囱井,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任新翎,我火速辦了婚禮地啰,結(jié)果婚禮上讲逛,老公的妹妹穿的比我還像新娘。我一直安慰自己顺呕,他們只是感情好括饶,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布启盛。 她就那樣靜靜地躺著技羔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藤滥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天向图,我揣著相機(jī)與錄音榄攀,去河邊找鬼金句。 笑死,一個胖子當(dāng)著我的面吹牛贞瞒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憔狞,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瘾敢,長吁一口氣:“原來是場噩夢啊……” “哼尿这!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起射众,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤典蜕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愉舔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡命迈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馏鹤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡陕靠,死狀恐怖剪芥,靈堂內(nèi)的尸體忽然破棺而出琴许,到底是詐尸還是另有隱情,我是刑警寧澤榜田,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布净捅,位于F島的核電站辩块,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏国章。R本人自食惡果不足惜豆村,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一掌动、第九天 我趴在偏房一處隱蔽的房頂上張望宁玫。 院中可真熱鬧拟逮,春花似錦敦迄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猛拴。三九已至蚀狰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跛溉,已是汗流浹背扮授。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工刹勃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荔仁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓雹拄,卻偏偏與公主長得像滓玖,于是被迫代替她去往敵國和親质蕉。 傳聞我的和親對象是個殘疾皇子翩肌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL碍侦、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,429評論 0 4
  • 畢加索是一位真正的天才濒旦。20世紀(jì)正是屬于畢加索的世紀(jì)株旷。他在這個多變的世紀(jì)之始從西班牙來到當(dāng)時的世界藝術(shù)之都巴黎,開...
    憾耍慧98閱讀 598評論 4 5
  • 心理學(xué)上有個“情緒ABC理論”晾剖,A代表事情的起因,C代表事情的結(jié)果梯嗽,B代表對A的認(rèn)知和情緒齿尽。由于每個人針對A會產(chǎn)生...
    任游子閱讀 38,843評論 5 8
  • 這是回來后第一次我早晚都在家度過 外婆入院前的日子,我基本天天一日兩次前往看她慷荔,忽略了奶奶的感受雕什。 奶奶總吃醋地說...
    蔬食家Snow閱讀 366評論 0 0
  • 很難得,連續(xù)3天空氣都很干凈且無雨显晶,恰好需要趁著空氣干凈外出處理的事也基本告一段落贷岸,于是,終于能去云溪看看春天了磷雇。...
    慢慢飛奔閱讀 362評論 0 0