Mybatis最入门---大文本存储
2016-04-24 17:41
288 查看
[一步是咫尺,一步即天涯]
在日常开发中,我们除了基本的查询之外,经常遇到的情况还有对于大文本的存储.接下来,我们就来演示如何使用mybatis实现文本的存储。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,SQLyog
-------------------------------------------------------------------------------------------------------------------------------------
1.在我们的userinfo数据表中增加一个简历字段,类型为longtext,如下:
2.复制我们前文的工程,重命名为Mybatis10,工程结构保持不变。
3.修改UserInfo.java文件,具体内容如下:
5.在UserInfoDao.java中增加对应接口定义,如下:【注意,为节省篇幅,我们将下面的查询语句一起给出。】
6.单元测试方法如下:
-------------------------------------------------------------------------------------------------------------------------------------------------------
【注意】
a.本例使用范围为文本类型的文件。
b.文件的格式务必与数据库保持一致,如果不同,请一定在insert之前进行转码操作。如果在控制台输出乱码,那么即使所有配置正确,仍然可能导致插入失败,请各位看官特别注意。
c.如果控制台提示有packet长度不够,请在my.ini文件中修改对应配置,之后请重新启动即可。
--------------------------------------------------------------------------------------------------------------------------------------------------------
刚才我们演示了,insert操作,现在,我们来看看select操作步骤:
1.在Mapper文件中增加查询SQL,如下:
-------------------------------------------------------------------------------------------------------------------------------------------------------
【注释】
1.从上面的示例中,我们发现对于大文本文件的存储,实际上跟String的存储过程十分相似。在一般场景下,我们可以使用char,varchar达到我们的目的。
2.上面示例的方法内有关于文件读写的方法, 请各位看官在实际应用中严格按照文件的读写规范来编写。
3.在实际应用中,大量的文件最好不要存储在数据库中,推荐的做法是:将文件单独的存储在文件系统,数据库中保存路径即可。这样能够使得数据库的单表体积迅速降低,提高CRUD的效率。但是,如果确实存在需要将大文本存储在数据库中,也建议采取分表措施,即主体的其他信息是一张表,文本信息是一张表,再通过主外键等方法确定关联关系即可。上面的例子只是为了说明读写的操作步骤,从设计上,是非常不推荐的。请特别留意。
4.最后,看看各个数据库中各个文本类型的长度范围,如下:
TINYTEXT 最大长度是 255 (2^8 - 1) 个字符。
TEXT 最大长度是 65535 (2^16 - 1) 个字符。
MEDIUMTEXT 最大长度是 16777215 (2^24 - 1) 个字符。
LONGTEXT 最大长度是 4294967295 (2^32 - 1) 个字符
-------------------------------------------------------------------------------------------------------------------------------------------------------
至此,Mybatis最入门---大文本存储结束
参考资料:
官方文档:http://www.mybatis.org/mybatis-3
在日常开发中,我们除了基本的查询之外,经常遇到的情况还有对于大文本的存储.接下来,我们就来演示如何使用mybatis实现文本的存储。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,SQLyog
-------------------------------------------------------------------------------------------------------------------------------------
1.在我们的userinfo数据表中增加一个简历字段,类型为longtext,如下:
2.复制我们前文的工程,重命名为Mybatis10,工程结构保持不变。
3.修改UserInfo.java文件,具体内容如下:
@SuppressWarnings("serial") public class UserInfo implements Serializable { private String userid; private String department; private String position; private String mobile; private String gender; private String email; private String vc; //set,get,构造函数,toString,请读者自行完成 }4.修改UserInfoMapper.xml文件,具体内容如下:
<insert id="insertUserInfoByClob" parameterType="userInfo"> insert into userinfo values(#{userid},#{department},#{position},#{mobile},#{gender},#{email},#{cv}) </insert>
5.在UserInfoDao.java中增加对应接口定义,如下:【注意,为节省篇幅,我们将下面的查询语句一起给出。】
public interface UserInfoDao { int insertUserInfoByClob(UserInfo ui); UserInfo selectUserInfoClobById(String id); }
6.单元测试方法如下:
@Test public void testInsert() { try { UserInfo ui = new UserInfo("clob", "3", "clob", "77778888", "0", "clob@email.com", ""); File file = new File("C://Temp/my.txt"); FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024]; StringBuffer sb = new StringBuffer(); while ((fis.read(buf)) != -1) { sb.append(new String(buf)); buf = new byte[1024];// 重新生成,避免和上次读取的数据重复 } String cv = new String(sb.toString().getBytes(),"utf-8"); System.out.println(cv.length()); ui.setCv(cv); UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class); int re = userInfo.insertUserInfoByClob(ui); if (re == 1) { System.out.println("success"); } sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } }6.运行单元测试方法,观察数据库变化即可。
-------------------------------------------------------------------------------------------------------------------------------------------------------
【注意】
a.本例使用范围为文本类型的文件。
b.文件的格式务必与数据库保持一致,如果不同,请一定在insert之前进行转码操作。如果在控制台输出乱码,那么即使所有配置正确,仍然可能导致插入失败,请各位看官特别注意。
c.如果控制台提示有packet长度不够,请在my.ini文件中修改对应配置,之后请重新启动即可。
--------------------------------------------------------------------------------------------------------------------------------------------------------
刚才我们演示了,insert操作,现在,我们来看看select操作步骤:
1.在Mapper文件中增加查询SQL,如下:
<select id="selectUserInfoClobById" parameterType="String" resultType="userInfo"> select * from userinfo where userid=#{id} </select>2.新增单元测试方法,如下:
@Test public void testSelect() { try { String id = "clob"; UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class); UserInfo re = userInfo.selectUserInfoClobById(id); byte[] buff=new byte[]{}; buff=re.getCv().getBytes(); FileOutputStream out=new FileOutputStream("C://Temp/out.txt"); out.write(buff,0,buff.length); out.close(); System.out.println(re); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } }3.运行单元测试方法,观察目标目录是否有对应输出。
-------------------------------------------------------------------------------------------------------------------------------------------------------
【注释】
1.从上面的示例中,我们发现对于大文本文件的存储,实际上跟String的存储过程十分相似。在一般场景下,我们可以使用char,varchar达到我们的目的。
2.上面示例的方法内有关于文件读写的方法, 请各位看官在实际应用中严格按照文件的读写规范来编写。
3.在实际应用中,大量的文件最好不要存储在数据库中,推荐的做法是:将文件单独的存储在文件系统,数据库中保存路径即可。这样能够使得数据库的单表体积迅速降低,提高CRUD的效率。但是,如果确实存在需要将大文本存储在数据库中,也建议采取分表措施,即主体的其他信息是一张表,文本信息是一张表,再通过主外键等方法确定关联关系即可。上面的例子只是为了说明读写的操作步骤,从设计上,是非常不推荐的。请特别留意。
4.最后,看看各个数据库中各个文本类型的长度范围,如下:
TINYTEXT 最大长度是 255 (2^8 - 1) 个字符。
TEXT 最大长度是 65535 (2^16 - 1) 个字符。
MEDIUMTEXT 最大长度是 16777215 (2^24 - 1) 个字符。
LONGTEXT 最大长度是 4294967295 (2^32 - 1) 个字符
-------------------------------------------------------------------------------------------------------------------------------------------------------
至此,Mybatis最入门---大文本存储结束
参考资料:
官方文档:http://www.mybatis.org/mybatis-3
相关文章推荐
- 上海科目二经验总结
- [UIPasteboard generalPasteboard]剪贴板的使用
- zkw费用流
- k近邻算法(KNN)及kd树简介(KD-Tree)
- Spring官网下载dist.zip的几种方法
- 20145315 《Java程序设计》实验三实验报告
- 用户注册,重复用户名时的处理
- Docker数据管理(四)
- list.append()
- Python爬虫辅助利器PyQuery模块的安装使用攻略
- python函数(二)
- 服务器端Json生成及Android客户端的json解析
- UVALive 6442 Coins on a Ring(二分查找答案)
- OC 继承
- 初识HTML流水笔记
- C#_会员管理系统:开发六(数据搜索)
- 你的宽带ip地址被100.64了吗?
- LeetCode 189. Rotate Array
- FT检测算法检测
- 重构-改善既有代码设计 读书笔记