Springboot管理的MyBatis 自定义Java 数据类型

MyBatis 通过实现 TypeHandlers 来存储 Java 对象;通过添加到TypeHandlerRegistr实现springboot托管。具体步骤如下:

  1. 创建并实现自定义的TypeHandler类。
  2. 在TypeHandler类上添加@MappedJdbcTypes和@MappedTypes注解,分别指定Java类型和数据库类型。
  3. 在Spring Boot应用程序的配置类中创建SqlSessionFactory,并将自定义的TypeHandler添加到TypeHandlerRegistry中。
  4. 在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.测试类:省略。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于数据加密,Spring Boot和MyBatis可以结合使用。以下是一种常见的数据加密方案: 1. 在Spring Boot项目中,可以使用Java的加密库(如Jasypt、Bouncy Castle等)来进行数据加密。这些库提供了各种加密算法和工具类,可以轻松地实现数据的加密和解密操作。 2. 在MyBatis中,可以通过自定义类型处理器(TypeHandler)来实现对加密数据的处理。自定义类型处理器可以将数据库中的加密数据解密为明文,并在向数据库插入数据时将明文加密为密文。 下面是一个示例代码,演示了如何在Spring Boot和MyBatis中实现数据加密功能: 1. 创建一个加密工具类,例如 EncryptUtils,用于封装加密和解密操作的方法。这个类可以使用任何合适的加密库来实现具体的加密算法。 ```java public class EncryptUtils { // 使用加密库进行数据加密 public static String encrypt(String data) { // 实现加密算法 // ... return encryptedData; } // 使用加密库进行数据解密 public static String decrypt(String encryptedData) { // 实现解密算法 // ... return decryptedData; } } ``` 2. 创建一个自定义类型处理器,在MyBatis中使用这个处理器来处理加密数据的读写操作。 ```java @MappedTypes(String.class) public class EncryptedStringTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { // 将明文数据加密后存入数据库 ps.setString(i, EncryptUtils.encrypt(parameter)); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(rs.getString(columnName)); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(rs.getString(columnIndex)); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(cs.getString(columnIndex)); } } ``` 3. 在MyBatis的配置文件中注册自定义类型处理器。 ```xml <typeHandlers> <typeHandler handler="com.example.EncryptedStringTypeHandler"/> </typeHandlers> ``` 4. 在Spring Boot中配置MyBatis,使其加载自定义类型处理器。 ```java @Configuration @MapperScan("com.example.mapper") public class MyBatisConfig { @Bean public ConfigurationCustomizer mybatisConfigurationCustomizer() { return configuration -> configuration.getTypeHandlerRegistry().register(String.class, EncryptedStringTypeHandler.class); } } ``` 通过以上步骤,您就可以在Spring Boot项目中使用MyBatis进行数据库操作,并对需要加密的数据进行加密和解密处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值