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