Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案
需求
實體類中有一個 List<String> 類型的屬性,對應于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時能互相轉(zhuǎn)換。
解決方案
自定義一個類型處理器:
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;
}
數(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>
測試
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jmeter添加自定函數(shù)的實例(jmeter5.3+IntelliJ IDEA)
這篇文章主要介紹了jmeter添加自定函數(shù)的實例(jmeter5.3+IntelliJ IDEA),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
MyBatis-Plus:saveOrUpdate根據(jù)指定字段更新或插入方式
這篇文章主要介紹了MyBatis-Plus:saveOrUpdate根據(jù)指定字段更新或插入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04

