mybatis配置文件之typeHandlers

typeHandlers

typeHandlers称做类型处理器。就是实现Java类型和数据库类型之间转换的。 除了系统提供的类型转换器之外,开发者也可以自定义类型转换,如下:
例如List<—>VARCHAR之间的类型转换:

1、创建一个bean

public class Student {
	private Integer id;
	private String name;	
	private List<String> game;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<String> getGame() {
		return game;
	}
	public void setGame(List<String> game) {
		this.game = game;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", game=" + game + "]";
	}
}

2、自定义类型转换器:

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MyTypeHandler extends BaseTypeHandler<List<String>> {

	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType)
			throws SQLException {
		StringBuilder sb = new StringBuilder();
		for (String s : parameter) {
			sb.append(s).append(";");
		}
		String msg = sb.toString();
		if (msg.contains(";")) {
			msg = sb.toString().substring(0, sb.lastIndexOf(";"));
		}
		//给占位符设值
		ps.setString(i, msg);		
	}

	@Override
	public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
		String msg = rs.getString(columnName);
		return Arrays.asList(msg.split(";"));
	}

	@Override
	public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		String msg = rs.getString(columnIndex);
		return Arrays.asList(msg.split(";"));
	}

	@Override
	public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
}

3、在mybatis-conf.xml配置文件中配置:

<typeHandlers>
	<typeHandler handler="com.sxt.typehandler.MyTypeHandler"/>
</typeHandlers>

4、测试:

public class Main {

	SqlSession session;
	@Before
	public void before() throws IOException {
		InputStream is = Resources.getResourceAsStream("mybatis-conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
		session = sessionFactory.openSession();
	}
	
	/**
	 * 添加一条数据
	 */
	@Test
	public void test() {
		StudentMapper mapper = session.getMapper(StudentMapper.class);
		Student student = new Student();
		student.setName("夯昊");
		List<String> list = new ArrayList<String>();
		list.add("CF");
		list.add("CSGO");
		list.add("LOL");
		list.add("CS");
		student.setGame(list);
		int i = mapper.insert(student);
		System.out.println(i);
	}
	
	/**
	 * 查询数据
	 */
	@Test
	public void query() {
		StudentMapper mapper = session.getMapper(StudentMapper.class);
		List<Student> list = mapper.query();
		for (Student student : list) {
			System.out.println(student);
		}
	}
	
	@After
	public void after() {
		session.commit();
		session.close();
	}
}

5、结果:

添加结果:
在这里插入图片描述
查询结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LOYE_YOU/article/details/89607390