1. 程式人生 > >mybatis中插入和讀取mysql的blob/text型別資料

mybatis中插入和讀取mysql的blob/text型別資料

mysql中的blob,mediumblob  ,longblob 可以對映到mybatis中 的byte[] 型別 ,需要mybatis的org.apache.ibatis.type.BlobTypeHandler 型別轉換處理器的支援。

clob則需要org.apache.ibatis.type.ClobTypeHandler處理器支援。

而mysql中text型別則可以直接使用String 接收和設定即可。。。。

1   前端html測試頁面

<p>圖書上架--帶圖片</p>
   書名:<input type="text" id="name" name="name" /><br />
   價格:<input type="text" id="price" name="price" /><br />
   作者:<input type="text" id="author" name="author" /><br />
   出版社:<input type="text"  id="publisher" name="publisher" /><br />
   出版時間:<input type="text" id="publishtime" name="publishtime" /> <br />
   描述:<input type="text" id="des" name="des" /> <br />
   圖片:<input type="file"  id="file" name="file" /><br />
   html大文字串:<input type="text" name="htmlText" id="htmlText" /><br />
   <button type="button" onclick="doRequest()">提交</button>
 <br /><br />

  function doRequest(){
	var request = new XMLHttpRequest();
	var url="http://localhost:8100/mvnweb2/book_AddWithImg.do";
	request.open("POST",url);
         var formdata=new FormData();
         formdata.append("name",document.getElementById("name").value);
         formdata.append("price",document.getElementById("price").value);
         formdata.append("author",document.getElementById("author").value);
         formdata.append("publisher",document.getElementById("publisher").value);
         formdata.append("publishtime",document.getElementById("publishtime").value);
         formdata.append("des",document.getElementById("des").value);
         
          var fileObj = document.getElementById("file").files[0]; // 獲取檔案物件
	 formdata.append("file",fileObj);
	formdata.append("htmlText",document.getElementById("htmlText").value);//htmlText為大文字資料
	request.onreadystatechange=function(){
	if(request.readyState==4 &&request.status==200){
		alert(request.responseText);
				
		}
			
	}
	request.send(formdata);
		
}
2 後臺controller 方法
@RequestMapping("/book_AddWithImg")
	public String book_AddWithImg(HttpServletRequest request,HttpServletResponse response,
			@RequestParam(value = "file", required = false) MultipartFile file,Book book)throws Exception{
          byte[] imgbytes=   file.getBytes();
		  book.setImgBytes(imgbytes);
		  book.setId(UUID.randomUUID().toString());
		  book.setCreatetime(LTDateFormatUtil.format(new Date()));
		Map<String,Object> map=  bookService.doAddBook(book);
		response.getWriter().write(JSON.toJSONString(map,SerializerFeature.WriteMapNullValue));
		return null;
	}
3  後臺mapper.xml 配置
   
 <insert id="save" parameterType="Book">
		 INSERT INTO t_book(id,`name`,author,price,des,publisher,publishtime,createtime,imgBytes,htmlText) 
		 VALUES(#{id},#{name},#{author},#{price},
		 #{des},#{publisher},#{publishtime},#{createtime}
		 ,#{imgBytes,typeHandler=org.apache.ibatis.type.BlobTypeHandler},#{htmlText})
     </insert>

 如果插入失敗 sql報錯 data too long ...   說明上傳的檔案太大超過了mysql的blob儲存範圍(65K),可以改用mediumBlob 16M 或longBlob (4G) 接收 圖片。

4 插入圖書圖片成功,前臺頁面讀取圖片
<img  src="http://localhost:8100/mvnweb2/book_getBookImg.do?id=1a261fb4-17a4-4d8a-89eb-638d46691c79"  />
 

5 讀取圖片後臺方法

@RequestMapping("/book_getBookImg")
	public String book_getBookImg(HttpServletRequest request,HttpServletResponse response,String id) throws Exception{
		byte[] imgbytes= bookService.doFindBookImg(id);
	    OutputStream  out= response.getOutputStream();
	    out.write(imgbytes);
		return null;
	}
  @Transactional(propagation=Propagation.NOT_SUPPORTED)
	public byte[] doFindBookImg(String id) {
	 try {
		Map<String,Object> map= bookMapper.findBookImg(id);
		 return  (byte[]) map.get("imgBytes");
	} catch (Exception e) {
		throw new MyCustomException(e);
	} 
	}
<resultMap type="java.util.Map" id="imgResultMap" >
            <result  property="imgBytes" column="imgBytes" jdbcType="BLOB"  typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>
      </resultMap>
      
       <select id="findBookImg" parameterType="string" resultMap="imgResultMap" >
		SELECT   a.`imgBytes` FROM `t_book` a WHERE a.`id`=#{_parameter}
      </select>

。。。

相關推薦

mybatis插入讀取mysql的blob/text型別資料

mysql中的blob,mediumblob  ,longblob 可以對映到mybatis中 的byte[] 型別 ,需要mybatis的org.apache.ibatis.type.BlobTypeHandler 型別轉換處理器的支援。 clob則需要org.apac

Mysqlchar,varchar與text型別的區別選用

關於char,varchar與text平時沒有太在意,一般來說,可能現在大家都是用varchar。但是當要儲存的內容比較大時,究竟是選擇varchar還是text呢?不知道。。。。。。 於是去查閱了一些資料,順便將這三種類型做個比較: (1)char:  char不用多說

插入讀取blobclob型別資料

/******************blob*********************/ public class Blob_Test { //建立表 @Test public void create(){ Connec

mybatis自動生成mapperjavaBean關於text型別的問題

mybatis自動生成javaBeantext,對於text型別的不自動生成欄位,會多產生一個表,這個表繼承遠javabeng,並單獨存放這幾個型別是text的欄位。在生成程式碼的時候,配置檔案中修改對應欄位如下:<columnOverride column="PROC

MybatisjavaTypejdbcType對應關系

mat brush true real default url define red tools MyBatis 通過包含的jdbcType類型 BIT FLOAT CHAR TIMESTAMP OTHER

mybatis的#$的區別

背景 插入 trac sql註入 -m .com article 參數 -s 1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麽解析成sql時的值為order by "111", 如果傳

mybatisresultTyperesultMap的聯系

平時 sel 多對多查詢 oid resultmap key 一對一 我們 多對多 在使用mybatis進行數據庫連接操作時對於SQL語句返回結果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下面說下我對這兩者的認識和理解 比如,我們平

淺談 Mybatis的 ${ } #{ }的區別

mybatis sql註入 語句 nbsp 之前 com pre 預編譯 sql 語句 一、舉例說明 1 select * from user where name = "dato"; 2 3 select * from user where name = #

Mybatis collection association 的區別

clas pub iat col oci myba lis bat mybatis public class A{ private B b1; private List<B> b2;} 在映射b1屬性時用association標簽,(一對一的關系)

MyBatisresultTyperesultMap的區別

items 如果 分享圖片 ID itcast err http ber cast resultType和resultMap功能類似 ,都是返回對象信息 ,但是resultMap要更強大一些 ,可自定義。因為resultMap要配置一下,表和類的一一對應關系,所以說就算

mybatismysqloracle的差異

n-n 數據 操作 紅色 pid bsp b2c 技術 where 1=1 1、applicationContext.xml中的配置差異: 在applicationContext.xml的數據源dataSource的配置中,mysql數據庫需要心跳包的配置,而oracle

MyBatis的${}#{}的區別

1 、  理論區別          $與#的區別是很大的。#為佔位符,而$為字串拼接符。 字串拼接是將引數值以硬編碼的方式直接拼接到了SQL 語句中。字串拼接就會引發  兩個問題:SQL注入問題

MybatisjavaTypejdbcType對應和CRUD例子

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MybatisjdbcTypejavaType、typeHandler的對照關系

array tro ear 處理器 any strong util char sql 類型處理器Java 類型JDBC 類型 BooleanTypeHandler java.lang.Boolean, boolean 數據庫兼容的 BOOLEAN Byte

MyBatisselectByExampleselectByExampleWithBLOBs區別

區別 數據 font automatic pro tin http fonts ffd MyBatis中selectByExample和selectByExampleWithBLOBs區別 先貼一段自動生成的Mapper代碼 <select id="selectB

Mybatiscollectionassociation的使用區別

ring striped ram ati column font -a str result 1. 關聯-association2. 集合-collection 比如同時有User.java和Card.java兩個類 User.java如下: public class Us

Js或者jQuery向瀏覽器寫入讀取cookie

<script> //瀏覽器端設定cookie,value必須是一個字串,如果存入物件可以存一個json字串 function setCookie(name,value) { var

mybatis # 號 $ 符的區別

mybatis#號和$符的區別? 區別 1 #是將傳入的值當做字串的形式,eg:select id,name,age from student where id =#{id},當前端把id值1,傳入到後臺的時候,就相當於 select id,name,age from stude

mybatis批量插入修改sql

批量修改sql語句 1.批量修改方式一:(此種方式適用於針對每條的修改值都不同) 2.批量修改方式二:(此種方式適用於根據一個列的唯一標識修改相同的資料比如給表中新增預設值等操作) 3.批量插入方式: 1.批量修改方式

mybatis的$#區別

提前總結: 1mybatis中$取值不會自動給你轉為string型別,即不會給你自動在值得兩側加雙引號,用#取值會自動轉為String,自動加雙引號,這個大家都知道。 2如果實際傳的是個map,parameterType可以宣告為"java.lang.String",但此時取值只能使用#,不