mybatis-自定義類型處理器


typeHandler

在Mybatis映射中,能夠自動將jdbc類型映射為java類型

之所以數據能夠接受成功,是因為有默認的類型處理器。

自定義類型處理器

  • 數據存儲時,自動將list集合,轉為字符串(格式自定義)
  • 數據查詢時,將查到的字符串再轉為List集合

1.在數據庫中添加favorite

alter table user add coulmn favorute vatchar(255);

2.在User類中,添加相應的屬性

private List<String> favorite;

public setFavorite(String favorite){
    this.favorite=favorite;
}
public getFavorite(){
    return favorite;
}

3.自定義一個類型轉換器

package com.ethan.dao;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;



@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class ListVarcharHandler implements TypeHandler<List<String>> {
    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
        StringBuffer sb = new StringBuffer();
        for (String string : strings) {
            sb.append(string).append(",");
        }
        preparedStatement.setString(i,sb.toString());
    }

    @Override
    public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
        String favs = resultSet.getString(s);
        if (favs!=null){
            return Arrays.asList(favs.split(","));
        }

        return null;
    }

    @Override
    public List<String> getResult(ResultSet resultSet, int i) throws SQLException {

        String favs = resultSet.getString(i);
        if (favs!=null){
            return Arrays.asList(favs.split(","));
        }

        return null;
    }

    @Override
    public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
        String favs = callableStatement.getString(i);
        if (favs!=null){
            return Arrays.asList(favs.split(","));
        }
        return null;
    }
}
  • @MappedJdbcTypes注解指定要處理的jdbc數據類型
  • @MappedTypes指定要處理的java類型
  • setParameter 設置參數
  • getResult 處理查詢

4 、Mapper

<insert id="addUser" parameterType="user">
        insert into test01.user(username, address,favorite) values
        (#{username},#{address},#{favorite,typeHandler=com.ethan.dao.ListVarcharHandler})
    </insert>

5、測試

@Test
    public void test01() throws IOException {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = factory.openSession();
        User user = new User();
        user.setUsername("前三");
        user.setAddress("北極");
        List<String> favorite = new ArrayList<String>();
        favorite.add("足球");
        favorite.add("籃球");
        favorite.add("乒乓球");
        user.setFavorite(favorite);
        int i = sqlSession.insert("com.ethan.dao.UserMapper.addUser", user);
        System.out.println(i);
        sqlSession.commit();
        sqlSession.close();
    }

6、測試結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM