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、測試結果