Mybatis返回数组的两种实现方式

 更新时间:2025年03月27日 09:57:50   作者:Aa_duidui  
这篇文章主要介绍了Mybatis返回数组的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Mybatis返回数组的两种方式

mysql没有数组这种类型,我们可以以数组格式的字符串加入到数据库,返回值是数组

1.Mapper.xml 返回数组

<resultMap type="返回实体类" id="result" >
		<result property="实体类字段名" column="mysql字段名" typeHandler="处理类"/>
</resultMap>

<select id="Mapper.java的方法名" parameterType="传参类型" resultMap="resultMap的id">
    select pricture from xm_picture
</select>

例如:

<resultMap type="co.yixiang.modules.service.dto.PictureDto" id="PictureResult" >
		<result property="pictureArr" column="picture" typeHandler="co.yixiang.utils.mybatis.JsonStringArrayTypeHandler"/>
</resultMap>

<!-- parameterType 也可以是实体类 -->
<select id="selectPictureById" parameterType="Long" resultMap="PictureResult">
    select pricture from xm_picture where id = #{id}
</select>

2.Mapper.java 返回数组 @Select注解

@Select("<script>" +
" select picture from xm_picture where id = #{id} " +
"</script>")
@Results({@Result(property="实体类字段名",column="数据库字段名",typeHandler= 处理类.class)})
PictureDto selectById(Long id);

例如:

@Select("<script>" +
" select picture from xm_picture where id = #{id} " +
"</script>")
@Results({@Result(property="pictureArr",column="picture",typeHandler= JsonStringArrayTypeHandler.class)})
PictureDto selectById(Long id);

处理类代码

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@MappedJdbcTypes({JdbcType.VARCHAR})
public class JsonStringArrayTypeHandler extends BaseTypeHandler<String[]> {
    private static final ObjectMapper mapper = new ObjectMapper();

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, toJson(parameter));
    }

    @Override
    public String[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return this.toObject(rs.getString(columnName));
    }

    @Override
    public String[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return this.toObject(rs.getString(columnIndex));
    }

    @Override
    public String[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return this.toObject(cs.getString(columnIndex));
    }

    private String toJson(String[] params) {
        try {
            return mapper.writeValueAsString(params);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "[]";
    }

    private String[] toObject(String content) {
        if (content != null && !content.isEmpty()) {
            try {
                return (String[]) mapper.readValue(content, String[].class);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            return null;
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Socket编程心跳包创建实例解析

    Java Socket编程心跳包创建实例解析

    这篇文章主要介绍了Java Socket编程心跳包创建实例解析,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • spring security获取用户信息为null或者串值的解决

    spring security获取用户信息为null或者串值的解决

    这篇文章主要介绍了spring security获取用户信息为null或者串值的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • springboot依赖冲突问题及解决过程

    springboot依赖冲突问题及解决过程

    新搭了一个springboot 2.3.7.RELASE的框架,在集成mysql,tkMapper,mybatis的过程中,启动报错,怎么解决这个问题呢,下面小编给大家带来了springboot依赖冲突问题及解决过程,一起看看吧
    2021-09-09
  • 带你一文深入认识Java String类

    带你一文深入认识Java String类

    这篇文章主要介绍了带你一文深入认识Java String类,String 类在Java中是很常用的类,很重要的类,在后续的学习中经常会用到,是后续学习的基础, 文章围绕主题展开更多详细内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-06-06
  • Java中Lambda表达式的使用详细教程

    Java中Lambda表达式的使用详细教程

    这篇文章将通过示例为大家详细展示Java中Lambda表达式的用法,同时也会介绍Lambda的相关知识,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05
  • nacos一直频繁的打印日志get changegroupkeys问题

    nacos一直频繁的打印日志get changegroupkeys问题

    这篇文章主要介绍了nacos一直频繁的打印日志get changegroupkeys问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot @Import与@Conditional注解使用详解

    SpringBoot @Import与@Conditional注解使用详解

    在了解spring boot自动配置原理前,再来了解下两个注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean
    2022-10-10
  • java如何根据提供word模板导出word文档详解

    java如何根据提供word模板导出word文档详解

    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等,这篇文章主要给大家介绍了关于java如何根据提供word模板导出word文档的相关资料,需要的朋友可以参考下
    2023-09-09
  • java过滤器中Filter的ChainFilter过滤链

    java过滤器中Filter的ChainFilter过滤链

    这篇文章主要介绍了java过滤器中Filter的ChainFilter过滤链,发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行。如果感兴趣可以来学习一下
    2020-07-07
  • Java项目实现五子棋小游戏

    Java项目实现五子棋小游戏

    这篇文章主要为大家详细介绍了Java项目实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论