posts - 15,  comments - 8,  trackbacks - 0
          摘要:本文通過一個實例講述如何通過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.51cto.com/");
              workNote.setOrgId(Long.parseLong("999"));
              workNote.setCreateDate(new Date());
              byte[] b="lavasoft".getBytes();
              workNote.setImage(b);
              officeService.saveWorkNote(workNote);
            }
          }

          看看測試結果:



          posted on 2008-06-04 20:43 lvq810 閱讀(687) 評論(0)  編輯  收藏 所屬分類: Open Framekwork
          主站蜘蛛池模板: 许昌市| 江津市| 麟游县| 左权县| 石渠县| 汝阳县| 荔浦县| 阿拉善盟| 阆中市| 阿荣旗| 依兰县| 临清市| 礼泉县| 张家川| 张北县| 沭阳县| 星子县| 四会市| 丰城市| 徐州市| 江阴市| 定西市| 英吉沙县| 甘泉县| 汝南县| 句容市| 延寿县| 堆龙德庆县| 富平县| 乾安县| 清水县| 洛阳市| 措勤县| 长泰县| 文化| 晋江市| 浦北县| 体育| 河曲县| 凤城市| 开封县|