概要
MyBatis Generatorでデフォルトの設定のままModel/Mapper一式を生成すると、DB上でBLOBで持っているカラムがModel上でbyte[]型になってしまいます。
byte[]型の代わりにInputStream型で出力させる方法を備忘録として書き残しておきます。
GitHubに実際のリポジトリ例も置いてあります。
https://github.com/ishioka0222/spring-boot-file-upload-download
手順
MySQLで以下のようなDDLで生成されるFILE
テーブルがあるとします。
schema.sql
CREATE TABLE DEMODB.FILE (
TYPE_ID INT NOT NULL PRIMARY KEY,
NAME VARCHAR(256) NOT NULL,
CONTENT LONGBLOB NOT NULL
);
このとき、MyBatis GeneratorのgeneratorConfig.xml
の中に設定を追加します。
以下では、DEMODB.FILE
テーブルのCONTENT
列をInputStream
で保持するように設定しています。
generatorConfig.xml
...
<table schema="DEMODB" tableName="FILE">
<property name="useActualColumnNames" value="true" />
<columnOverride column="CONTENT"
javaType="java.io.InputStream"
typeHandler="org.apache.ibatis.type.BlobInputStreamTypeHandler" />
</table>
...
この状態でMyBatis Generatorを実行すると、生成されたModelが以下のようにCONTENT
列をInputStream型で保持するようになります。
package com.example.demo.model;
import java.io.InputStream;
public class File {
...
/**
* This field was generated by MyBatis Generator. This field corresponds to the database column file.CONTENT
* @mbg.generated
*/
private InputStream CONTENT;
...