Hibernate对与Oracle中Clob类型的使用

来源:互联网 发布:现货数据行情分析系统 编辑:程序博客网 时间:2024/05/29 12:03
Hibernate对与Oracle中Clob类型的使用

一.理解和分析:
1.为何实用Clob:  
oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob,本文描述clob怎么和Hibernate一起使用。

2.Clob类型的属性的赋值方式——   String转Clob

String content = request.getParameter("content");//1.从request请求中取值(String类型的)Clob clob = Hibernate.createClob(content);//2.通过hibernate将string转化为clobnews.setContent(clob);//3.给实体类对应属性赋值

3.Clob类型的属性的取值方式——   Clob转String

List<News> list = query.addEntity(News.class).list();//1.从数据库取值News news = (News)list.get(0);//2.取News对象String content = ClobUtil.ClobToString(news.getContent());//3.将news对象中的clob类型的content转化为String字符串

二.实例分析:
1.建表:News新闻表  

2.创建实体类和映射文件:

public class News {private Long id;private String dir;private String fileName;private String title;private String tag;private String imgUrl;private Integer type;private String creator;private Date createDate;private String remark;private Integer ishot;private Clob content;......}

      

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2014-11-28 9:58:10 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping>    <class name="com.datanew.czfc.frontPage.entity.News" table="NEWS">        <id name="id" column="ID">        <generator class="sequence">                <param name="sequence">SQ_NEWS</param>        </generator>        </id>        <property name="dir" type="java.lang.String">            <column name="DIR" />        </property>        <property name="fileName" type="java.lang.String">            <column name="FILE_NAME" />        </property>        <property name="title" type="java.lang.String">            <column name="TITLE" />        </property>        <property name="tag" type="java.lang.String">            <column name="TAG" />        </property>        <property name="imgUrl" type="java.lang.String">            <column name="IMG_URL" />        </property>        <property name="type" type="java.lang.Integer">            <column name="TYPE" />        </property>        <property name="creator" type="java.lang.String">            <column name="CREATOR" />        </property>        <property name="createDate" type="java.util.Date">            <column name="CREATE_DATE" />        </property>        <property name="remark" type="java.lang.String">            <column name="REMARK" />        </property>         <property name="ishot" type="java.lang.Integer">            <column name="ISHOT" />        </property>        <property name="content" type="java.sql.Clob">            <column name="CONTENT" />        </property>    </class></hibernate-mapping>

      

3.增加News的Servlet::—— 需要对String数据转化成Clob数据

String title = request.getParameter("title");String tag = request.getParameter("tag");String content = request.getParameter("content");String typeStr = request.getParameter("type");String ishotStr = request.getParameter("ishot");int type = Integer.valueOf(typeStr);int ishot = 0;if("on".equals(ishotStr)){ishot = 1;}Clob clob = Hibernate.createClob(content);INewsDao newsDao = new NewsDaoImpl();News news = new News();news.setDir(htmlDir + detailDir);news.setFileName(fileName);news.setCreateDate(createDate);news.setCreator(user.getUsername());news.setTitle(title);news.setTag(tag);news.setType(type);news.setIshot(ishot);news.setContent(clob);newsDao.saveNews(news);

注意:要对request获取的字符串用hibernate转化为clob类型  

4.从数据库获取news中的Content:—— 需要对String数据转化成Clob数据

public String getNewsContentById(int id) {    Session s = null;    News news = null;    String content = null;    try {        s = HibernateUtil.getSession();        s.beginTransaction();        StringBuffer sb = new StringBuffer("select * from news where id = " + id);        SQLQuery query = s.createSQLQuery(sb.toString());        news = (News) query.addEntity(News.class).uniqueResult();        content = ClobUtil.ClobToString(news.getContent());        s.getTransaction().commit();    } catch (Exception e) {        logger.error(e.toString());        HibernateUtil.endSession(s);    } finally {        HibernateUtil.endSession(s);    }    return content;}

注意:要对获取到的实体类中的Clob类型数据转化为String类型  

5.Clob工具类:

public class ClobUtil {public static String ClobToString(Clob clob) {        String clobStr = "";        Reader is = null;        try {            is = clob.getCharacterStream();        // 得到流        BufferedReader br = new BufferedReader(is);        String s = null;            s = br.readLine();        StringBuffer sb = new StringBuffer();        //执行循环将字符串全部取出赋值给StringBuffer,由StringBuffer转成String        while (s != null) {            sb.append(s);            s = br.readLine();        }        clobStr = sb.toString();        } catch (IOException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }        return clobStr;    }    }

    注意:通过流的方式读取Clob类型数据

0 0
原创粉丝点击