Mybatis最入门---多媒体文件存储

本文与前文的需求类似,废话不表,开始我们的正文部分吧

准备工作:

a.操作系统 :win7 x64

b.基本软件:MySQL,Mybatis,SQLyog

-------------------------------------------------------------------------------------------------------------------------------------

一。插入操作

1.在我们的userinfo数据表中增加一个headpic字段,类型为longblob,如下:


2.我们沿用上文工程,原有内容保持不变,需要修改的地方见下文。

3.在UserInfo中增加属性,如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @SuppressWarnings("serial")  
  2. public class UserInfo implements Serializable {  
  3.       
  4.     private String userid;  
  5.     private String department;  
  6.     private String position;  
  7.     private String mobile;  
  8.     private String gender;  
  9.     private String email;  
  10.     private byte[] headpic;  
  11.     private String cv;  
  12. //其他内容请自行补充。  
  13. }  
4.在Mapper文件中,增加如下内容:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <insert id="insertUserInfoByBlob" parameterType="userInfo">  
  2.     insert into userinfo values(#{userid},#{department},#{position},#{mobile},#{gender},#{email},#{headpic},#{cv})  
  3. </insert>  

5.在UserInfoDao中,增加对应接口:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int insertUserInfoByBlob(UserInfo ui);  

6.新增单元测试方法如下:

[java]  view plain  copy
  1. @Test  
  2.     public void testInsertBlob() {  
  3.         try {  
  4.   
  5.             UserInfo ui = new UserInfo("clob2""3""clob""77778888""0""clob@email.com""你好");  
  6.             File file = new File("C://Temp/temp.jpg");  
  7.             InputStream is = new FileInputStream(file);  
  8.             byte[] headpic = new byte[is.available()];  
  9.             is.read(headpic);  
  10.             is.close();  
  11.             ui.setHeadpic(headpic);  
  12.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  13.             int re = userInfo.insertUserInfoByBlob(ui);  
  14.             if (re == 1) {  
  15.                 System.out.println("success");  
  16.             }  
  17.             sqlSession.commit();  
  18.         } catch (Exception e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. </pre><p></p><pre>  
7.运行单元测试方法,观察数据库变化即可。

【注意】这里如果提示packet超长,请在my.ini文件中修改对应长度,或者新增对应配置,然后重新启动MySQL服务即可。

-------------------------------------------------------------------------------------------------------------------------------------二。查询操作。

1.在Mapper中增加查询语句,如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <select id="selectUserInfoBlobById" parameterType="String" resultType="userInfo">  
  2.     select * from userinfo where userid=#{id}  
  3. </select>  
2.在UserInfoDao中增加对应接口,如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. UserInfo selectUserInfoBlobById(String id);  
3.增加单元测试方法,如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Test  
  2.     public void testSelectBlob() {  
  3.         try {  
  4.             String id = "clob1";  
  5.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  6.             UserInfo re = userInfo.selectUserInfoBlobById(id);  
  7.             byte[] buff=re.getHeadpic();  
  8.             File file = new File("C://Temp/outpic.jpg");  
  9.                     OutputStream out=new FileOutputStream(file);    
  10.                     out.write(buff);    
  11.                     out.close();  
  12.             System.out.println(re);  
  13.             sqlSession.commit();  
  14.         } catch (Exception e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.     }  
4.运行单元测试方法,观察输出目标路径中是否正确生成文件即可。

-------------------------------------------------------------------------------------------------------------------------------------

【注意】

1.数据类型为longblob是以二进制流的形式进行存储,因此,该类型也能够存储更多类型文件。【博主亲测可行】
2.与前文类似,实际应用时,大量的文件最好不要存储在数据库中,推荐的做法是:将文件单独的存储在文件系统,数据库中保存路径即可。这样能够使得数据库的单表体积迅速降低,提高CRUD的效率。但是,如果确实存在需要将大文本存储在数据库中,也建议采取分表措施,即主体的其他信息是一张表,文本信息是一张表,再通过主外键等方法确定关联关系即可。上面的例子只是为了说明读写的操作步骤,从设计上,是非常不推荐的。请特别留意。

-------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入门---多媒体文件存储结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值