美文网首页
Hibernate学习6(长文本与二进制文件保存读取)

Hibernate学习6(长文本与二进制文件保存读取)

作者: 又是那一片天 | 来源:发表于2017-08-08 11:41 被阅读0次
    在数据表对应的实体内中长文本与二进制文件对应的属性为:
    • 长文本对应String类型
    • 二进制文件对应 Blob类型(java.sql.Blob)
        //长文本
        private String context;
        //二进制
        private Blob img;
    
    在配置文件中 通过property标签的 type属性设置:
    • 二进制文件 type="blob"
    • 长文本 "clob"
    • 两者可以通过property标签sql-type属性进行精确指定
        <!--二进制 -->
        <property name="img" type="blob"></property>
        <!-- 长文本 -->
        <!-- <property name="context" type="clob"></property> -->
        <!-- 长文本 精确指定 -->
        <property name="context">
            <column name="CONTEXT" sql-type="mediumtext"></column>
        </property>
    
    
    代码中使用:

    长文本和普通文本方式一样

    • 二进制文件存放数据库
      主要解决Blob对象如何得来可以使用Hibernate提供的工具
        /**
         * test二进制保存
         */
        public static void testSaveBlob() {
            StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
            SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
    
            News news = new News("上海", "好久没有下雨", new Date(new Date().getTime()));
            news.setContext("我的长文本");
            // 二进制保存
            try {
                //文件输入流
                InputStream stream = new FileInputStream("xxxxx.png");
                Blob img = Hibernate.getLobCreator(session).createBlob(stream, stream.available());
                news.setImg(img);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //保存
            session.save(news);
            transaction.commit();
            session.close();
            sessionFactory.close();
        }
    
    • 二进制文件从数据库中读取
      通过获取数据库Blob对象获取流
        /**
         * test二进制读取
         */
        public static void testGetBlob() {
            StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
            SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            //获取记录
            News news = session.get(News.class, 2);
            //获取记录中二进制
            Blob img = news.getImg();
            try {
                //获取对应流
                InputStream in = img.getBinaryStream();
                System.out.println(in.available());
                in.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } // 获取流
    
            transaction.commit();
            session.close();
            sessionFactory.close();
        }
    

    相关文章

      网友评论

          本文标题:Hibernate学习6(长文本与二进制文件保存读取)

          本文链接:https://www.haomeiwen.com/subject/uzhtrxtx.html