mybat-大文件的存取
在mybatis中存储大文件可以直接存
取的时候取出来的是二进制
1.在实体类中添加大文本和图片
package com.java1234.model;
public class Student {
private Integer id;
	private String name;
	private Integer age;
	private byte[] pic;
	private String remark;
public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
public Student(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
public Student(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
public byte[] getPic() {
		return pic;
	}
public void setPic(byte[] pic) {
		this.pic = pic;
	}
public String getRemark() {
		return remark;
	}
public void setRemark(String remark) {
		this.remark = remark;
	}
@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age
				+ ", remark=" + remark + "]";
	}
}
2.在dao接口中添加查询方法
package com.java1234.mappers;
import java.util.List;
import java.util.Map;
import com.java1234.model.Student;
public interface StudentMapper {
public List<Student> searchStudents(Map<String,Object> map);
public List<Student> searchStudents2(Map<String,Object> map);
public List<Student> searchStudents3(Map<String,Object> map);
public List<Student> searchStudents4(Map<String,Object> map);
public List<Student> searchStudents5(Map<String,Object> map);
public List<Student> searchStudents6(String name,int age);
public int updateStudent(Student student);
public int insertStudent(Student student);
public Student getStudentById(Integer id);
}
3.在mapper中添加方法
<?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.java1234.mappers.StudentMapper">
<resultMap type="Student" id="StudentResult">
		<id property="id" column="id"/>
		<result property="name" column="name"/>
		<result property="age" column="age"/>
	</resultMap>
<insert id="insertStudent" parameterType="Student">
		insert into t_student values(null,#{name},#{age},#{pic},#{remark});
	</insert>
<select id="getStudentById" parameterType="Integer" resultType="Student">
		select * from t_student where id=#{id}
	</select>
<select id="searchStudents6" resultMap="StudentResult">
		select * from t_student where name like #{param1} and age=#{param2}
	</select>
<select id="searchStudents" parameterType="Map" resultMap="StudentResult">
		select * from t_student 
		 where gradeId=#{gradeId}
		 <if test="name!=null">
		 	and name like #{name}
		 </if>
		 <if test="age!=nulll">
		 	and age=#{age}
		 </if>
	</select>
<select id="searchStudents2" parameterType="Map" resultMap="StudentResult">
		select * from t_student 
		 <choose>
		 	<when test="searchBy=='gradeId'">
		 		where gradeId=#{gradeId}
		 	</when>
		 	<when test="searchBy=='name'">
		 		where name like #{name}
		 	</when>
		 	<otherwise>
		 		where age=#{age}
		 	</otherwise>
		 </choose>
</select>
<select id="searchStudents3" parameterType="Map" resultMap="StudentResult">
		select * from t_student 
		 <where>
			 <if test="gradeId!=null">
			 	gradeId=#{gradeId}
			 </if>
			 <if test="name!=null">
			 	and name like #{name}
			 </if>
			 <if test="age!=nulll">
			 	and age=#{age}
			 </if>
		 </where>
	</select>
<select id="searchStudents4" parameterType="Map" resultMap="StudentResult">
		select * from t_student 
		 <trim prefix="where" prefixOverrides="and|or">
			 <if test="gradeId!=null">
			 	gradeId=#{gradeId}
			 </if>
			 <if test="name!=null">
			 	and name like #{name}
			 </if>
			 <if test="age!=nulll">
			 	and age=#{age}
			 </if>
		 </trim>
	</select>
<select id="searchStudents5" parameterType="Map" resultMap="StudentResult">
		select * from t_student 
		 <if test="gradeIds!=null">
		 	<where>
		 		gradeId in 
		 		<foreach item="gradeId" collection="gradeIds" open="(" separator="," close=")">
		 		 #{gradeId}
		 		</foreach>
		 	</where>
		 </if>
	</select>
<update id="updateStudent" parameterType="Student">
		update t_student
		<set>
		 <if test="name!=null">
		 	name=#{name},
		 </if>
		 <if test="age!=null">
		 	age=#{age},
		 </if>
		</set>
		where id=#{id}
	</update>
</mapper>
4.添加测试:
package com.java1234.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.java1234.mappers.StudentMapper;
import com.java1234.model.Student;
import com.java1234.util.SqlSessionFactoryUtil;
public class StudentTest2 {
private static Logger logger=Logger.getLogger(StudentTest2.class);
	private SqlSession sqlSession=null;
	private StudentMapper studentMapper=null;
/**
	 * 测试方法前调用
	 * @throws Exception
	 */
	@Before
	public void setUp() throws Exception {
		sqlSession=SqlSessionFactoryUtil.openSession();
		studentMapper=sqlSession.getMapper(StudentMapper.class);
	}
/**
	 * 测试方法后调用
	 * @throws Exception
	 */
	@After
	public void tearDown() throws Exception {
		sqlSession.close();
	}
@Test
	public void testInsertStudent(){
		logger.info("添加学生");
		Student student=new Student();
		student.setName("张三4");
		student.setAge(14);
		student.setRemark("很长的本文...");
		byte []pic=null;
		try{
			File file=new File("c://boy.jpg");
			InputStream inputStream=new FileInputStream(file);
			pic=new byte[inputStream.available()];
			inputStream.read(pic);
			inputStream.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		student.setPic(pic);
		studentMapper.insertStudent(student);
		sqlSession.commit();
	}
@Test
	public void testGetStudentById(){
		logger.info("通过ID查找学生");
		Student student=studentMapper.getStudentById(4);
		System.out.println(student);
		byte []pic=student.getPic();
		try{
			File file=new File("d://boy2.jpg");
			OutputStream outputStream=new FileOutputStream(file);
			outputStream.write(pic);
			outputStream.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
@Test
	public void testSearchStudents6() {
		logger.info("添加学生(带条件)");
		List<Student> studentList=studentMapper.searchStudents6("%3%",12);
		for(Student student:studentList){
			System.out.println(student);
		}
	}
}
mybat-大文件的存取的更多相关文章
- 【转载】  Pyqt 利用QDataStream对文件进行存取
		
# -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.s ...
 - mongoDB 大文件存储方案, JS 支持展示
		
文件存储 方式分类 传统方式 存储路径 仅存储文件路径, 本质为 字符串 优点: 节省空间 缺点: 不真实存储在数据库, 文件或者数据库发送变动需要修改数据库 存储文件本身 将文件转换成 二进制 存储 ...
 - PHP搭建大文件切割分块上传功能
		
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
 - Java中使用IO流实现大文件的分裂与合并
		
文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分 ...
 - CephRGW 在多个RGW负载均衡场景下,RGW 大文件并发分片上传功能验证
		
http://docs.ceph.com/docs/master/radosgw/s3/objectops/#initiate-multi-part-upload 根据分片上传的API描述,因为对同一 ...
 - asp.net配置web.config支持jQuery.Uploadify插件上传大文件
		
配置web.config有两处地方需要配置,分别是集成模式和经典模式. 集成模式: <!--文件上传大小设置--> <httpRuntime requestValidationMod ...
 - split分割大文件--包含通过awk按规则分割文件到对应子文件
		
当对一个大文件进行传输或者分析的时候,一个可以参考的办法是先通过split对文件进行分割,再对每个子文件进行处理,如果需要合并再进行合并. split函数可以按文件大小或者行数来进行分割. -a : ...
 - linux系统加快大文件的写入速度
		
linux系统加快大文件的写入速度 setvbuf进行优化内存IO
 - python 小程序大文件的拆分合并
		
1. 将大文件拆分为小文件 I 通过二进制的方式将大文件读取出来,将其拆分存,以不同的文件方式存放在一个目录下面 II 提供两种操作方式交互式和命令行模式 #! usr/bin/python # -* ...
 - 用百度webuploader分片上传大文件
		
一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传, ...
 
随机推荐
- 数据库路由中间件MyCat - 源代码篇(16)
			
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 5. 路由模块 真正取得RouteResultset的步骤:AbstractRouteStrategy的ro ...
 - 聊聊 CDN 缓存与浏览器缓存
			
CDN 是互联网上内容分发的重要一环.无论您之前是否了解过 CDN,其实它已经在您的日常生活中发挥作用了.比如您正在淘宝挑选心仪的商品,或者在观看一段令人捧腹的视频,以及您正在阅读的这篇文章,这些资源 ...
 - PAT L2-014【二分】
			
思路: 最后发现对当前列车比我大的编号的栈有没有就好了,所以开个vector存一下,然后二分一下vector找一下第一个比我大的数就好了 #include <bits/stdc++.h> ...
 - Master 接受其它组件的注册
			
Master对其它组件注册的处理: Master接受注册的对象主要就是: Driver.Application.Worker.注意:Executor 不会向 Master 注册,它是向 Driver ...
 - 莫队算法-小Z的袜子
			
小Z的妹子袜子这道题用的是莫队算法,据说解决离线区间询问几乎无敌. 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于 ...
 - 验证控件jQuery Validation Engine调用外部函数验证
			
在使用jQuery Validation Engine的时候,我们除了使用自带的API之外,还可以自己自定义正则验证.自定义正则验证上一篇已经讲过了,如果想使用自定义函数进行验证怎么办?其实这个控件有 ...
 - Unity---MonoBehaviour9大生命周期
			
1.MonoBehaviour9大生命周期 MonoBehaviour是一个基类,所有Unity脚本都派生自该类. Awake():在脚本实例化时被调用. Start():在Awake之后,Updat ...
 - DHCP服务器的设计
			
介绍 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理.分配IP地址,使网络环境中的主机动态的 ...
 - State模式(状态设计模式)
			
State??? State模式中,我们用类来表示状态.以类来表示状态后,我们就能通过切换类来方便地改变对象的状态.当需要增加新的状态时,如何修改代码这个问题也会很明确. 直接用状态代替硬编码 依赖于 ...
 - 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解
			
这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...