mybatis-plus数据查询、更新类型转换(String数组和String)

1、背景

对于实体类,属性标签类型是数组[“java”, “python”],在数据库对应的字段类型是varchar,现在需要存储到数据库, 将String数组转换成字符串,从数据库获取数据, 将字符串转为String数组

2、处理类

@MappedTypes({String[].class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class ArrayStringTypeHandler extends BaseTypeHandler<String[]> {

    private static String[] strArray = new String[]{};

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int parameterIndex,
                                    String[] parameter, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(parameterIndex, JSON.toJSONString(parameter));
    }

    @Override
    public String[] getNullableResult(ResultSet resultSet, String columnName)
            throws SQLException {
        return JSON.parseArray(resultSet.getString(columnName)).toArray(strArray);
    }

    @Override
    public String[] getNullableResult(ResultSet resultSet, int columnIndex)
            throws SQLException {
        return JSON.parseArray(resultSet.getString(columnIndex)).toArray(strArray);
    }

    @Override
    public String[] getNullableResult(CallableStatement callableStatement, int columnIndex)
            throws SQLException {
        return JSON.parseArray(callableStatement.getString(columnIndex)).toArray(strArray);
    }
}

3、使用

// 属性使用注解
@TableField(typeHandler = ArrayStringTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private String[] labelList;

4、测试

更新
==>  Preparing: UPDATE subj_info SET label_list=? WHERE id=? 
==> Parameters: ["java","python"](String), 1690595443903389697(String)
<==    Updates: 1

查询
==>  Preparing: SELECT id, label_list FROM subj_info WHERE id=? 
==> Parameters: 1690595443903389697(String)
<==    Columns: id, label_list
<==        Row: 1690595443903389697, ["java","python"]
<==      Total: 1

数据库存储值
["java","python"]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mybatis-plusMyBatis增强工具包,用于简化CRUD操作。该工具包为MyBatis提供了一些高效,有用,即用的功能,使用它可以有效地节省您的开发时间。Mybatis-plus特征与MyBatis完全兼容 启动时自动配置 开箱即用的用于操作数据库的界面 强大而灵活的条件包装器 生成主键的多种策略 Lambda样式的API 全能和高度可定制的代码生成器 自动分页操作 SQL注入防御 支持活动记录 支持可插拔的自定义界面 内置许多有用的扩展Mybatis-plus功能1、单表CURD(简单 + 批量)操作,自动完成(支持 like 比较等查询)。 2、分页插件,Count查询自动或自定义SQL查询。 3、Spring根据不同环境加载不同配置支持支持typeAliasesPackage通配符扫描)。 【自动生成Entity Mapper Service文件】Mybatis-plusMybatis增强工具包) v3.3.2更新日志分页参数提取,单元测试用例修复 达梦数据库代码生成器表过滤支持 微软数据库代码生成器表过滤支持 修复代码生成器属性字段规则错误 SelectById 支持自定义方法名 修复分页插件获取数据库类型问题 Json转换器空值处理 bugfix(mybatis-plus-generator):SQL类型返回错误问题 调整未知方言异常,自动识别url转换小写匹配. fix: 初始化TableInfo中遇到多个字段有@TableId注解时未能抛出异常的问题 SuperController有Class参数的set方法 增加方法StrategyConfig.setSuperServiceImplClass(java.lang.Class<?>). 代码生成器命名策略调整. 扩展分页缓存key值计算. 去除方法推测,直接访问属性字段. 修正枚举处理器类型不匹配比较. 修改表前缀匹配方式 修改在Mybatis全局配置文件中设置分页插件参数不生效问题 修改在Mybatis全局配置文件中设置分页插件参数不生效问 修复PR未指定解析器的时候引发空指针 增加分页插件limit参数配置 修复指定superEntityClass重复生成父类字段问题 无主键的情况无需导入IdType与TableId包 调整生成BaseResultMap格式 支持lombok模式下选择是否进行链式set生成 修复解析器for update错误 过滤PG约束列(只留下主键约束) 增加生成器禁用模板生成 fix(kotlin): 修复动态表名BUG,最大努力替换表名 修复PG约束生成重复属性字段问题 fix(kotlin): 将LambdaUtils中缓存的key改为String 代码生成器增加数据库关键字处理接口 fix github/issues/2454 支持注解可继承 新增 AES 加密数据库用户名密码 优化方法入参泛型,支持更多类型 修复代码生成器开启移除is前缀生成实体缺少包导入 fixed github issues/2470Mybatis-plus截图
假设你使用的是mybatis-plus框架,同时也已经实现了查询两条数据并将这两条数据中的`department`字段相互替换的逻辑,那么接下来你可以使用mybatis-plus提供的`UpdateWrapper`类来更新数据。 首先,你需要将查询出来的两条记录中的`department`字段相互替换,然后将这两条记录的`id`值保存到一个列表中,如下所示: ```java List<Map<String,Object>> resultList = ...; String department1 = null; String department2 = null; List<Long> idList = new ArrayList<>(); for (Map<String,Object> map : resultList) { if (map.get("id").equals(id1)) { department1 = (String)map.get("department"); idList.add(id1); } else if (map.get("id").equals(id2)) { department2 = (String)map.get("department"); idList.add(id2); } } ``` 接下来,你可以使用`UpdateWrapper`类来构造更新条件,并调用`update`方法来更新数据。具体代码如下: ```java UpdateWrapper wrapper = new UpdateWrapper(); wrapper.in("id", idList); wrapper.set("department", department1, SqlKeyword.EQUALS, department2); employeeMapper.update(null, wrapper); ``` 上面的代码中,我们先构造了一个`UpdateWrapper`对象,其中使用了`in`方法来设置更新条件,只更新`id`值在`idList`中的记录。然后,我们使用`set`方法来设置需要更新的字段和对应的值,注意使用了`SqlKeyword.EQUALS`来表示对应的值需要相互替换。最后,我们调用了`update`方法来执行更新操作,并将`UpdateWrapper`对象作为第一个参数传递给`update`方法,表示更新条件。`null`表示不设置更新的实体对象。 需要注意的是,上面的代码中,`employeeMapper`是一个mybatis-plus生成的Mapper类,你需要根据自己的实际情况来替换。同时,为了保证代码的可读性和可维护性,你可能需要将上面的代码封装成一个Service方法来使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值