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

在数据表对应的实体内中长文本与二进制文件对应的属性为:
  • 长文本对应String类型
  • 二进制文件对应 Blob类型(java.sql.Blob)
    //长文本
    private String context;
    //二进制
    private Blob img;
在配置文件中 通过property标签的 type属性设置:
  • 二进制文件 type="blob"
  • 长文本 "clob"
  • 两者可以通过property标签sql-type属性进行精确指定
    
    
    
    
    
    
        
    

代码中使用:

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

  • 二进制文件存放数据库
    主要解决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(长文本与二进制文件保存读取))