欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案

 更新時(shí)間:2024年06月06日 09:37:36   作者:Coder馬里奧  
實(shí)體類中有一個(gè) List<String> 類型的屬性,對(duì)應(yīng)于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時(shí)能互相轉(zhuǎn)換,本文給大家介紹Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案,需要的朋友可以參考下

需求

實(shí)體類中有一個(gè) List<String> 類型的屬性,對(duì)應(yīng)于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時(shí)能互相轉(zhuǎn)換。

解決方案

自定義一個(gè)類型處理器:

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 實(shí)體類

@Data
public class Student {
    private Long id;
    private String name;
    private List<String> hobbies;
}

數(shù)據(jù)表的字段

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>

測(cè)試

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);
    }
}

添加的結(jié)果

查詢的結(jié)果

到此這篇關(guān)于Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案的文章就介紹到這了,更多相關(guān)Java List和MySQL varchar相互轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合MongoDB全過程

    SpringBoot整合MongoDB全過程

    這篇文章主要介紹了SpringBoot整合MongoDB全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java常用類庫(kù)Apache Commons工具類說明及使用實(shí)例詳解

    Java常用類庫(kù)Apache Commons工具類說明及使用實(shí)例詳解

    這篇文章主要介紹了Java常用類庫(kù)Apache Commons工具類說明及使用實(shí)例詳解,需要的朋友可以參考下
    2020-02-02
  • java將一個(gè)目錄下的所有文件復(fù)制n次

    java將一個(gè)目錄下的所有文件復(fù)制n次

    這篇文章主要為大家詳細(xì)介紹了java將一個(gè)目錄下的所有文件復(fù)制n次,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Go Java算法之比較版本號(hào)方法詳解

    Go Java算法之比較版本號(hào)方法詳解

    這篇文章主要為大家介紹了Go Java算法之比較版本號(hào)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java 十大排序算法之計(jì)數(shù)排序刨析

    Java 十大排序算法之計(jì)數(shù)排序刨析

    計(jì)數(shù)排序是一個(gè)非基于比較的排序算法,該算法于1954年由 Harold H. Seward 提出。它的優(yōu)勢(shì)在于在對(duì)一定范圍內(nèi)的整數(shù)排序時(shí),它的復(fù)雜度為Ο(n+k)(其中k是整數(shù)的范圍),快于任何比較排序算法
    2021-11-11
  • java建立子類方法總結(jié)

    java建立子類方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于java建子類的步驟和方法,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • 現(xiàn)代高效的java構(gòu)建工具gradle的快速入門

    現(xiàn)代高效的java構(gòu)建工具gradle的快速入門

    和Maven一樣,Gradle只是提供了構(gòu)建項(xiàng)目的一個(gè)框架,真正起作用的是Plugin,本文主要介紹了gradle入門,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下
    2021-11-11
  • springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題

    springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題

    這篇文章主要介紹了springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類型

    Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類型

    這篇文章主要介紹了Java的Hibernate框架數(shù)據(jù)庫(kù)操作中鎖的使用和查詢類型,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • Java 并發(fā)編程中的鎖機(jī)制示例詳解

    Java 并發(fā)編程中的鎖機(jī)制示例詳解

    本文探討了Java并發(fā)編程中的鎖機(jī)制,包括鎖的基本概念、Java中的鎖類型如synchronized、ReentrantLock、ReadWriteLock、鎖的優(yōu)化策略以及如何避免死鎖,文章強(qiáng)調(diào)了合理選擇和優(yōu)化鎖使用對(duì)于提升程序并發(fā)性能的重要性,并提供了實(shí)際應(yīng)用中的最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-01-01

最新評(píng)論