Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案
需求
實體類中有一個 List<String> 類型的屬性,對應(yīng)于 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)文章
Java常用類庫Apache Commons工具類說明及使用實例詳解
這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實例詳解,需要的朋友可以參考下2020-02-02
現(xiàn)代高效的java構(gòu)建工具gradle的快速入門
和Maven一樣,Gradle只是提供了構(gòu)建項目的一個框架,真正起作用的是Plugin,本文主要介紹了gradle入門,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2021-11-11
springboot+kafka中@KafkaListener動態(tài)指定多個topic問題
這篇文章主要介紹了springboot+kafka中@KafkaListener動態(tài)指定多個topic問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Java的Hibernate框架數(shù)據(jù)庫操作中鎖的使用和查詢類型
這篇文章主要介紹了Java的Hibernate框架數(shù)據(jù)庫操作中鎖的使用和查詢類型,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2016-01-01

