MyBatis 通过实现 TypeHandlers 来存储 Java 对象;通过添加到TypeHandlerRegistr实现springboot托管。具体步骤如下:
- 创建并实现自定义的TypeHandler类。
- 在TypeHandler类上添加@MappedJdbcTypes和@MappedTypes注解,分别指定Java类型和数据库类型。
- 在Spring Boot应用程序的配置类中创建SqlSessionFactory,并将自定义的TypeHandler添加到TypeHandlerRegistry中。
- 在application.properties或application.yml文件中配置MyBatis的相关属性,如数据源等。
代码展示:
1.创建自定义数据类型的MyListTypeHandler 类
@Component
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MyListTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
// 将 List 转换为字符串并设置参数
String value = StringUtils.join(parameter, ",");
ps.setString(i, value);
}
@Override
public List<String> getResult(ResultSet rs, String columnName) throws SQLException {
// 从结果集中获取字符串并将其转换为 List
String str = rs.getString(columnName);
return Arrays.asList(str.split(","));
}
@Override
public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException {
// 从结果集中获取字符串并将其转换为 List
String str = rs.getString(columnIndex);
return Arrays.asList(str.split(","));
}
@Override
public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException {
// 从 CallableStatement 中获取字符串并将其转换为 List
String str = cs.getString(columnIndex);
return Arrays.asList(str.split(","));
}
}
2.springboot托管自定义MyListTypeHandler 类
@Configuration
@MapperScan("com.example.mapper")
public class MybatisConfig {
@Autowired
private DataSource dataSource;
@Autowired
private MyListTypeHandler myListTypeHandler ;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 注册自定义TypeHandler
TypeHandler<?>[] typeHandlers = {myListTypeHandler };
sessionFactory.setTypeHandlers(typeHandlers);
return sessionFactory.getObject();
}
}
3.Mapper与实体
@Mapper
public interface PersonMapper {
List<Person> query();
int insert(Person person);
}
@Data
@Table(name = "BC_PERSON")
public class Person {
String id
String name
List<String> hobbies;
}
4.测试类:省略。。。。