
文章目录
- Mybatis操作Oracle中的Clob和Blob字段 [我测试用的Mybatis Plus]
-
- A、数据准备
-
- A-1. Oracle中创建测试的表结构:Byte_Array_Test,手动插入几条数据
- A-2 代码中用到的工具类FileUtil :将节数组byte[]写入到文件
- B、方式一实现 [推荐使用,简单方便,易读]:
-
- B-1. 创建实体Entity:ByteArrayTest
- B-2. Mapper或者Dao:ByteArrayTestDao
- B-3. Junit测试代码:Clob和Blob的读取+写入,测试代码如下
- C、方式二实现:
-
- C-1. Mapper或Dao中添加接口方法:任意的Dao中添加如下测试的方法
- C-2 Mapper.Xml或者Dao.Xml书写Sql
- C-3 Junit测试代码
Mybatis操作Oracle中的Clob和Blob字段 [我测试用的Mybatis Plus]
说明:CLOB和BLOB的区别,这两个被统称为LOB,即Large Object(大对象类型)最本质的区别:CLOB的C,可以理解为Char,保存的是字符大对象BLOB的B,即Binary,保存的是二进制大对象CLOB应该转换成StringBLOB应该转换成byte[]
A、数据准备
A-1. Oracle中创建测试的表结构:Byte_Array_Test,手动插入几条数据
create table BYTE_ARRAY_TEST
(ID VARCHAR2(32) not null,CLOB CLOB,BLOB BLOB,REMARK VARCHAR2(1000)
);
alter table BYTE_ARRAY_TEST add constraint PK_BYTE_ARRAY_TEST primary key (ID);
A-2 代码中用到的工具类FileUtil :将节数组byte[]写入到文件
public class FileUtil {public static boolean save2File(String fname, byte[] msg){OutputStream fos = null;try{File file = new File(fname);File parent = file.getParentFile();boolean bool;if ((!parent.exists()) && (!parent.mkdirs())) {return false;}fos = new FileOutputStream(file);fos.write(msg);fos.flush();return true;}catch (FileNotFoundException e){return false;}catch (IOException e){File parent;return false;}finally{if (fos != null) {try{fos.close();}catch (IOException e) {}}}}public static void main(String[] args) {String msgStr = "我是java爱好者,测试数据";byte[] bytes = msgStr.getBytes();String filename = "D:\\\\test\\\\test.txt";boolean flag = FileUtil.save2File(filename, bytes);System.out.println("flag = "+ flag );}
}
B、方式一实现 [推荐使用,简单方便,易读]:
B-1. 创建实体Entity:ByteArrayTest
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@SuppressWarnings("serial")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ByteArrayTest extends Model<ByteArrayTest> {@TableId private String id;private String clob;private byte[] blob;private String remark;
}
B-2. Mapper或者Dao:ByteArrayTestDao
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mediinfo.entity.ByteArrayTest;
public interface ByteArrayTestDao extends BaseMapper<ByteArrayTest> {}
B-3. Junit测试代码:Clob和Blob的读取+写入,测试代码如下
import com.mediinfo.dao.ByteArrayTestDao;
import com.mediinfo.dao.FileUtil;
import com.mediinfo.entity.ByteArrayTest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;@SpringBootTest
class ClobAndBlobTest {@Resourceprivate ByteArrayTestDao byteArrayTestDao;@Testvoid Test() throws Exception {ByteArrayTest byteArrayTest = byteArrayTestDao.selectById("123");String clobVal = byteArrayTest.getClob();byte[] bytes = byteArrayTest.getBlob();System.out.println("clobVal = " + clobVal + ",blob的lenggh=" + bytes.length);boolean b = FileUtil.save2File("D:\\\\test\\\\22.png", bytes);System.out.println(b);ByteArrayTest byteArrayTest2 = new ByteArrayTest();byteArrayTest2.setId("111");byteArrayTest2.setClob(byteArrayTest.getClob() + "||||666666666");byteArrayTest2.setBlob(bytes);int insert = byteArrayTestDao.insert(byteArrayTest2);System.out.println(insert);}
}
C、方式二实现:
C-1. Mapper或Dao中添加接口方法:任意的Dao中添加如下测试的方法
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mediinfo.entity.UserOracle;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;import java.util.List;
import java.util.Map;@Mapper
@Repository
public interface UserOracleDao extends BaseMapper<UserOracle> {@MapKey("id")public List<Map<String,Object>> findVal(String id);
}
C-2 Mapper.Xml或者Dao.Xml书写Sql
<?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.mediinfo.dao.UserOracleDao"><select id="findVal" resultType="java.util.Map">select * from byte_array_test where id = #{id}</select></mapper>
C-3 Junit测试代码
import com.mediinfo.dao.UserOracleDao;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;
import java.sql.Blob;
import java.sql.Clob;
import java.util.List;
import java.util.Map;@SpringBootTest
class TestClobAndBlob {@Resourceprivate UserOracleDao userOracleDao;@Testvoid testBlob() throws Exception {List<Map<String, Object>> val = userOracleDao.findVal("123");if (val!=null && val.size() > 0 ){Map<String, Object> temp = val.get(0);Clob clobData = (Clob) temp.get("CLOB");String str = clobData.getSubString(1, (int) clobData.length());System.out.println(str);Blob blobData = (Blob) temp.get("BLOB");byte[] bytes = blobData.getBytes(1, (int) blobData.length());boolean b = FileUtil.save2File("D:\\\\test\\\\22.png", bytes);System.out.println(b);}}}