目录
- 一、表结构
- 二、mapper 接口和sql
- 三、实体类
- 四、controller
- 五、插入成功后的效果
springboot连接Oracle写入blob类型图片数据
一、表结构
-- 创建表: student_info 属主: scott (默认当前用户)
create table scott.student_info (sno number(10) constraint pk_si_sno primary key,sname varchar2(10),sex varchar2(2),create_date date,headimage blob
);
二、mapper 接口和sql
@Mapper
public interface StudentMapper {@Insert("insert into scott.student_info (SNO, SNAME,SEX,CREATE_DATE,HEADIMAGE) values (#{sno},#{sname},#{sex},sysdate,#{headimage})")int addStudent(Student student);
}
三、实体类
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Data
public class Student {private int sno;private String sname;private String sex;private Date create_date;private byte[] headimage;public Student(int sno,String sname,String sex,byte[] headimage){this.sno = sno;this.sname = sname;this.sex = sex;this.headimage = headimage;}
}
四、controller
@Slf4j
@RestController
public class StudentController {@Resourcepublic StudentMapper studentMapper;@PostMapping("/addStudent")public String addStudent(String name, String sex, @RequestParam MultipartFile file){// 将MultipartFile 格式 转换成byte[]类型,以便插入Oracle blob类型字段。InputStream ins = null;byte[] data=new byte[1024];try {ins = file.getInputStream();byte[] buffer=new byte[1024];int len=0;ByteArrayOutputStream bos=new ByteArrayOutputStream();while((len=ins.read(buffer))!=-1){bos.write(buffer,0,len);}bos.flush();data = bos.toByteArray();} catch (IOException e) {e.printStackTrace();}finally {ins.close();}int sno= RandomUtil.randomInt(1,1000000);//产生一个[10, 100000)的随机数Student student = new Student(sno,name,sex,data);log.info("String.valueOf(student.getHeadimage().length) "+String.valueOf(student.getHeadimage().length));//log.info("入参 "+student);int i = studentMapper.addStudent(student);log.info("插入值 i "+i);//return AjaxResult.success("插入成功",i);if (i>=1){return "插入成功";}else {return "插失败功";}}}
五、插入成功后的效果
如下图所示,查询出来后能查看到图片。