服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

read-atleap-hibernate部分分析2-createnews

  read-atleap-hibernate部分分析2-createnews

<!--[if !vml]-->

read-atleap-hibernate部分分析2-createnews(图一)

<!--[endif]-->

  主要的类:

ª com.blandware.atleap.persistence.hibernate.news. newsdaohibernate.createnewsitem

ª com.blandware.atleap.persistence.hibernate.news. newsdaohibernate. listnewsitems

 

ø 数据结构分析

ª newsitem继承与page

ª page又继承与localizable

 

ª localizable.hbm.xml中的page映射定义

            <joined-subclass

            name="com.blandware.atleap.model.core.page"

            table="page"

            dynamic-update="false"

            dynamic-insert="false"

            lazy="false"

        >

        <key

            column="localizable_id"

        />

        <joined-subclass

            name="com.blandware.atleap.model.news.newsitem"

            table="news_item"

            dynamic-update="false"

            dynamic-insert="false"

            lazy="false"

        >

        <key

            column="page_id"

        />

        <property

            name="publicationdate"

            type="date"

            update="true"

            insert="true"

            access="property"

            column="publication_date"

            not-null="false"

        />

        </joined-subclass>

        </joined-subclass>

ª news_item表内容

mysql> select * from news_item;

+---------+------------------+

| page_id | publication_date |

+---------+------------------+

| 47    | 2005-02-27     |

+---------+------------------+

ª page表内容

+----------------+-----------------------------------+---------------+--------+

| localizable_id | uri                    | usage_counter | active |

+----------------+-----------------------------------+---------------+--------+

|              2 | /login               |         0 | t     |

 

ø 建立新闻业务过程分析

<!--[if !supportlists]-->i)            <!--[endif]-->newsitemid = newsmanager.createnewsitem(newsitem);

 public long createnewsitem(newsitem newsitem) {

    //1.保持newsitem进数据库

    long newsitemid = (long) gethibernatetemplate().save(newsitem);

    //2.newsitem添加名为“title”的contentfield

    newsitem.addcontentfield(ftitle) ;

gethibernatetemplate().save(ftitle);

//3.newsitem添加名为“annotation”的contentfield

//4.newsitem添加名为“body”的contentfield

//5.newsitem添加名为“title”的contentfieldvalue

//6.newsitem添加名为“annotation”的contentfieldvalue

//7.newsitem添加名为“body”的contentfieldvalue

© 插入数据库时先插入父类表中的数据(localizable),在插入子类表中的数据(page

    news_item),最后插入关联关系的表中数据(fieldfield_value

执行的sql

hibernate: insert into localizable (version, class_name, id) values (?, ?, ?)

hibernate: insert into page (uri, usage_counter, active, localizable_id) values

(?, ?, ?, ?)

hibernate: insert into news_item (publication_date, page_id) values (?, ?)

hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, simple_value, fi

eld_id, last_updated, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, value, field_id,

 last_updated, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, value, field_id,

 last_updated, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, simple_value, fi

eld_id, last_updated, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, value, field_id,

 last_updated, id) values (?, ?, ?, ?, ?, ?)

hibernate: insert into field_value (version, locale_identifier, value, field_id,

 last_updated, id) values (?, ?, ?, ?, ?, ?)

<!--[if !supportlists]-->ii)         <!--[endif]-->newsitem.seturi(uri);

uri="/rw/news/newsitemid"

newsmanager.updatenewsitem(newsitem);

执行的sql

hibernate: update field_value set version=?, last_updated=? where id=? and versi

hibernate: update localizable set version=?, class_name=? where id=? and version

=?

hibernate: update page set uri=?, usage_counter=?, active=? where localizable_id

=?

hibernate: update news_item set publication_date=? where page_id=?

<!--[if !supportlists]-->iii)      <!--[endif]--> index news item

    searchmanager searchmanager =

        searchmanager.getinstance(request.getsession().getservletcontext());

searchmanager.reindexpage(newsitem, request);

 

<!--[if !supportlists]-->iv)         <!--[endif]-->return mapping.findforward("listnewsitems");

ø 显示新闻列表

ü      <forward

        name="listnewsitems"

        path="/news/listitems.do"

        redirect="true"

   />

 ü   <action

      path="/news/listitems"

      type="com.blandware.atleap.webapp.action.news.listnewsitemsaction"

      name="newsitemform"

      scope="request"

      roles="manager"

      unknown="false"

      validate="false"

    >

      <forward

        name="listnewsitems"

        path=".news.listitems"

        redirect="false"

      />

    </action>

ø 显示新闻列表业务过程分析

<!--[if !supportlists]-->1) <!--[endif]-->设置查询参数

<!--[if !supportlists]-->2) <!--[endif]-->从数据库中检索新闻列表

list newsitems = newsmanager.listnewsitems(queryinfo).aslist();

<!--[if !supportlists]-->3) <!--[endif]-->将查询得到的newsitems存入request作用域

request.setattribute(newsmodulewebconstants.news_items_collection_key,

newsitems);

<!--[if !supportlists]-->4) <!--[endif]-->return mapping.findforward("listnewsitems");

    <definition name=".news.listitems" extends=".corelayout" role="manager">

        <put name="titlekey" value="news.listitems"/>

        <put name="content" value="/web-inf/pages/news/listitems.jsp" />

    </definition>

© 显示新闻列表时执行的

hql

select distinct item, title.simplevalue, annotation.value from newsitem as item

left outer join item.contentfields as titlefield left outer join item.contentfie

lds as annotationfield left outer join item.contentfields as bodyfield left oute

r join titlefield.contentfieldvalues as title left outer join annotationfield.co

ntentfieldvalues as annotation left outer join bodyfield.contentfieldvalues as b

ody left outer join item.roles as role where titlefield.identifier = 'title' and

 annotationfield.identifier = 'annotation' and bodyfield.identifier = 'body' and

 title.contentlocale = annotation.contentlocale and title.contentlocale = body.c

ontentlocale and title.contentlocale.identifier = ?  order by item.publicationda

te desc, title.simplevalue asc

对应sql

 

hibernate: select distinct newsitem0_.page_id as id, newsitem0_.publication_date

 as publicat2_11_, newsitem0__1_.uri as uri6_, newsitem0__1_.usage_counter as us

age_co3_6_, newsitem0__1_.active as active6_, newsitem0__2_.version as version0_

, newsitem0__2_.class_name as class_name0_, newsitem0_.page_id as x0_0_, content

fie4_.simple_value as x1_0_, contentfie5_.value as x2_0_ from news_item newsitem

0_ inner join page newsitem0__1_ on newsitem0_.page_id=newsitem0__1_.localizable

_id inner join localizable newsitem0__2_ on newsitem0_.page_id=newsitem0__2_.id

left outer join field contentfie1_ on newsitem0_.page_id=contentfie1_.localizabl

e_id left outer join field contentfie2_ on newsitem0_.page_id=contentfie2_.local

izable_id left outer join field contentfie3_ on newsitem0_.page_id=contentfie3_.

localizable_id left outer join field_value contentfie4_ on contentfie1_.id=conte

ntfie4_.field_id left outer join field_value contentfie5_ on contentfie2_.id=con