Hibernate+Spring搞定Clob、Blob的存取

摘要:本文通过一个实例讲述如何通过Spring2+Hibernate3来快捷操作数据库中的Lob字段。    环境:Oracle10g、Srping2、Hibernate3、JUint4

    说明:由于时间紧迫,没有详细写出思路。运行一下例子就明白了。

    一、创建实体并添加Xdoclet的Hibernate标签

    /**     * @author leizhimin     * @hibernate.mapping default-lazy="false"     * @hibernate.meta attribute="class-description" value="工作日志"     * @hibernate.class table="rc_gzrz"     */    public class WorkNote {        private Long id;                    //标识        private Date workDate;             //日期        private String weather;             //天气        private String content;             //日志内容(Clob)        private String state;               //日志状态        private Long orgId;                 //机构id        private Long userId;                //用户id        private Date createDate;            //创建日期        private byte[] image;               //图片

        public static final String WORKNOTE_BLANK = "00";         //未填写        public static final String WORKNOTE_FULL = "11";          //已填写

        /**         * @hibernate.id generator-class="sequence" column="BS"         * @hibernate.meta attribute="field-description" value="标识"         * @hibernate.generator-param name="sequence" value="SEQ_GW"         */        public Long getId() {            return id;        }

        public void setId(Long id) {            this.id = id;        }

        /**         * @hibernate.property column="workDate" not-null="false" type="timestamp"         * @hibernate.meta attribute="field-description" value="工作日期"         */

        public Date getWorkDate() {            return workDate;        }

        public void setWorkDate(Date workDate) {            this.workDate = workDate;        }

        /**         * @hibernate.property column="weather" not-null="false" length="24"         * @hibernate.meta attribute="field-description" value="天气"         */        public String getWeather() {            return weather;        }

        public void setWeather(String weather) {            this.weather = weather;        }

        /**         * @hibernate.property column="content" not-null="false" type="text"         * @hibernate.meta attribute="field-description" value="内容"         */        public String getContent() {            return content;        }

        public void setContent(String content) {            this.content = content;        }

        /**         * @hibernate.property column="state" not-null="false" length="2"         * @hibernate.meta attribute="field-description" value="状态"         */        public String getState() {            return state;        }

        public void setState(String state) {            this.state = state;        }

        /**         * @hibernate.property column="orgId" type="long"         * @hibernate.meta attribute="field-description" value="机构id"         */        public Long getOrgId() {            return orgId;        }

        public void setOrgId(Long orgId) {            this.orgId = orgId;        }

        /**         * @hibernate.property column="userId" type="long"         * @hibernate.meta attribute="field-description" value="用户id"         */        public Long getUserId() {            return userId;        }

        public void setUserId(Long userId) {            this.userId = userId;        }

        /**         * @hibernate.property column="createDate" not-null="false" type="timestamp"         * @hibernate.meta attribute="field-description" value="创建日期"         */        public Date getCreateDate() {            return createDate;        }

        public void setCreateDate(Date createDate) {            this.createDate = createDate;        }

        /**         * @hibernate.property column="image" type="blob" not-null="false"         * @hibernate.meta attribute="field-description" value="图片"         */        public byte[] getImage() {            return image;        }

        public void setImage(byte[] image) {            this.image = image;        }    }

    二、通过XDoclet生成Mapping,并修正lob映射的类型为Spring提供的类型

    <?xml version="1.0" encoding="gb2312"?>

    <!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <hibernate-mapping            default-lazy="false"    >        <class            name="com.topsoft.oa.routine.domain.office.entity.WorkNote"            table="rc_gzrz"        >            <meta attribute="class-description">工作日志</meta>

            <id                name="id"                column="BS"                type="java.lang.Long"            >                <meta attribute="field-description">标识</meta>                <generator class="sequence">                    <param name="sequence">SEQ_GW</param>                  <!--                      To add non XDoclet generator parameters, create a file named                      hibernate-generator-params-WorkNote.xml                      containing the additional parameters and place it in your merge dir.                  -->                </generator>            </id>

            <property                name="workDate"                type="timestamp"                update="true"                insert="true"                column="workDate"                not-null="false"            >                <meta attribute="field-description">工作日期</meta>            </property>

            <property                name="weather"                type="java.lang.String"                update="true"                insert="true"                column="weather"                length="24"                not-null="false"            >                <meta attribute="field-description">天气</meta>            </property>

            <property                name="content"                type="org.springframework.orm.hibernate3.support.ClobStringType"                update="true"                insert="true"                column="content"                not-null="false"            >                <meta attribute="field-description">内容</meta>            </property>

            <property                name="state"                type="java.lang.String"                update="true"                insert="true"                column="state"                length="2"                not-null="false"            >                <meta attribute="field-description">状态</meta>            </property>

            <property                name="orgId"                type="long"                update="true"                insert="true"                column="orgId"            >                <meta attribute="field-description">机构id</meta>            </property>

            <property                name="userId"                type="long"                update="true"                insert="true"                column="userId"            >                <meta attribute="field-description">用户id</meta>            </property>

            <property                name="createDate"                type="timestamp"                update="true"                insert="true"                column="createDate"                not-null="false"            >                <meta attribute="field-description">创建日期</meta>            </property>

            <property                name="image"                type="org.springframework.orm.hibernate3.support.BlobByteArrayType"                update="true"                insert="true"                column="image"                not-null="false"            >                <meta attribute="field-description">图片</meta>            </property>

            <!--                To add non XDoclet property mappings, create a file named                    hibernate-properties-WorkNote.xml                containing the additional properties and place it in your merge dir.            -->

        </class>

    </hibernate-mapping>

 

    三、通过Mapping 用XDoclet生成数据库(Oracle)脚本,并建表

        drop table rc_gzrz cascade constraints;

        create table rc_gzrz (            BS number(19,0) not null,            workDate timestamp,            weather varchar2(24 char),            content clob,            state varchar2(2 char),            orgId number(19,0),            userId number(19,0),            createDate timestamp,            image blob,            primary key (BS)        );

        comment on table rc_gzrz is            '工作日志';

        comment on column rc_gzrz.BS is            '标识';

        comment on column rc_gzrz.workDate is            '工作日期';

        comment on column rc_gzrz.weather is            '天气';

        comment on column rc_gzrz.content is            '内容';

        comment on column rc_gzrz.state is            '状态';

        comment on column rc_gzrz.orgId is            '机构id';

        comment on column rc_gzrz.userId is            '用户id';

        comment on column rc_gzrz.createDate is            '创建日期';

        comment on column rc_gzrz.image is            '图片';

 

    四、创建DAO层

    /**     * Created by IntelliJ IDEA.     * User: leizhimin     * Date: 2007-11-16     * Time: 10:55:50     * To change this template use File | Settings | File Templates.     */    public interface WorkNoteDAO extends CommonDAO {        /**         * 根据日期查询工作日志         *         * @param workDate 工作日期         * @param userId   用户id         * @param orgId    机构id         * @param sp       分页对象         * @return List         */        public List findWorkNoteByDate(Date workDate, Long userId, Long orgId, SplitPage sp);

        /**         * 根据状态查询工作日志         *         * @param state     日志状态         * @param userId    用户id         * @param orgId     机构id         * @param sp        分页对象         * @return List         */        public List findWorkNoteByState(String state, Long userId, Long orgId, SplitPage sp);    }

 

    /**     * Created by IntelliJ IDEA.     * User: leizhimin     * Date: 2007-11-16     * Time: 10:56:00     * To change this template use File | Settings | File Templates.     */    public class WorkNoteDAOImpl extends CommonDAOImpl implements WorkNoteDAO{        public List findWorkNoteByDate(Date workDate, Long userId, Long orgId, SplitPage sp) {            return null;        }

        public List findWorkNoteByState(String state, Long userId, Long orgId, SplitPage sp) {            return null;        }    }

    五、创建带JTA事务控制的业务service层

    /**     * Created by IntelliJ IDEA.     * User: leizhimin     * Date: 2007-11-16     * Time: 16:43:57     * To change this template use File | Settings | File Templates.     */    public interface OfficeService {

        public void saveWorkNote(WorkNote workNote);

        public void updateWorkNote(WorkNote workNote);    }

    /**     * Created by IntelliJ IDEA.     * User: leizhimin     * Date: 2007-11-16     * Time: 16:45:54     * To change this template use File | Settings | File Templates.     */    public class OfficeServiceImpl implements OfficeService{        private WorkNoteDAO workNoteDAO;

        public WorkNoteDAO getWorkNoteDAO() {            return workNoteDAO;        }

        public void setWorkNoteDAO(WorkNoteDAO workNoteDAO) {            this.workNoteDAO = workNoteDAO;        }

        public void saveWorkNote(WorkNote workNote) {            this.workNoteDAO.saveObject(workNote);        }

        public void updateWorkNote(WorkNote workNote) {            this.workNoteDAO.updateObject(workNote);        }    }

    六、书写单元测试,并运行    /**     * Created by IntelliJ IDEA.     * User: leizhimin     * Date: 2007-11-16     * Time: 16:49:17     * To change this template use File | Settings | File Templates.     */    public class TestOffice extends TestCase {        public void test_worknote_save(){            OfficeService officeService = (OfficeService) ContextHelper.getContext().getBean("officeServiceProxy");            WorkNote workNote=new WorkNote();            workNote.setContent("http://lavasoft.blog.bitscn.com/");            workNote.setOrgId(Long.parseLong("999"));            workNote.setCreateDate(new Date());            byte[] b="lavasoft".getBytes();            workNote.setImage(b);            officeService.saveWorkNote(workNote);        }    }

    看看测试结果:

 

 

 

 

以上是 Hibernate+Spring搞定Clob、Blob的存取 的全部内容, 来源链接: utcz.com/p/205536.html

回到顶部