当前位置: 代码网 > it编程>编程语言>Java > Java中的List和MySQL中的varchar相互转换的解决方案

Java中的List和MySQL中的varchar相互转换的解决方案

2024年06月17日 Java 我要评论
需求实体类中有一个 list<string> 类型的属性,对应于 mysql 表里的 varchar 字段,使用 mybatis 添加或查询时能互相转换。解决方案自定义一个类型处理器:pa

需求

实体类中有一个 list<string> 类型的属性,对应于 mysql 表里的 varchar 字段,使用 mybatis 添加或查询时能互相转换。

解决方案

自定义一个类型处理器:

package com.examples.handler;

import org.apache.ibatis.type.basetypehandler;
import org.apache.ibatis.type.jdbctype;

import java.sql.callablestatement;
import java.sql.preparedstatement;
import java.sql.resultset;
import java.sql.sqlexception;
import java.util.arraylist;
import java.util.arrays;
import java.util.list;

public class liststringtypehandler extends basetypehandler<list<string>> {

    @override
    public void setnonnullparameter(preparedstatement ps, int i, list<string> parameter, jdbctype jdbctype) throws sqlexception {
        ps.setstring(i, string.join(",", parameter));
    }

    @override
    public list<string> getnullableresult(resultset rs, string columnname) throws sqlexception {
        if (rs.getstring(columnname) == null) {
            return new arraylist<>();
        }
        return arrays.aslist(rs.getstring(columnname).split(","));
    }

    @override
    public list<string> getnullableresult(resultset rs, int columnindex) throws sqlexception {
        if (rs.getstring(columnindex) == null) {
            return new arraylist<>();
        }
        return arrays.aslist(rs.getstring(columnindex).split(","));
    }

    @override
    public list<string> getnullableresult(callablestatement cs, int columnindex) throws sqlexception {
        if (cs.getstring(columnindex) == null) {
            return new arraylist<>();
        }
        return arrays.aslist(cs.getstring(columnindex).split(","));
    }
}

示例

java 实体类

@data
public class student {
    private long id;
    private string name;
    private list<string> hobbies;
}

数据表的字段

mapper接口

public interface studentmapper {
    void savestudent(student student);

    student querystudentbyid(long id);
}

xml文件 需要使用 typehandler="com.examples.handler.liststringtypehandler"

<?xml version="1.0" encoding="utf-8"?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.examples.mapper.studentmapper">
    <resultmap id="studentmap" type="student">
        <result column="hobbies" property="hobbies" typehandler="com.examples.handler.liststringtypehandler"/>
    </resultmap>
    <insert id="savestudent" keyproperty="id" usegeneratedkeys="true" keycolumn="id">
        insert into student (name, hobbies)
        values (#{name}, #{hobbies,typehandler=com.examples.handler.liststringtypehandler})
    </insert>

    <select id="querystudentbyid" resulttype="student" resultmap="studentmap">
        select *
        from student
        where id = #{id}
    </select>
</mapper>

测试

public class studenttest {

    @resource
    private studentmapper studentmapper;

    // 添加
    @test
    void testsavestudent() {
        student student = new student();
        list<string> hobbieslist = new arraylist<>();
        hobbieslist.add("篮球");
        hobbieslist.add("阅读");
        hobbieslist.add("写代码");

        student.setname("张三");
        student.sethobbies(hobbieslist);
        studentmapper.savestudent(student);
    }

    //查询
    @test
    void testquerystudentbyid() {
        student student = studentmapper.querystudentbyid(1l);
        system.out.println(student);
    }
}

添加的结果

查询的结果

到此这篇关于java中的list和mysql中的varchar相互转换的解决方案的文章就介绍到这了,更多相关java list和mysql varchar相互转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com