Hibernate+Spring彻底搞定Clob、Blob的存取

一、创建实体并添加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.51cto.com/");

        workNote.setOrgId(Long.parseLong("999"));

        workNote.setCreateDate(new Date());

        byte[] b="lavasoft".getBytes();

        workNote.setImage(b);

        officeService.saveWorkNote(workNote);

    }

}

你可能感兴趣的:(spring,oracle,Hibernate,工作,idea)