ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]read-atleap-Hibernate部分分析2-CreateNews

[转载]read-atleap-Hibernate部分分析2-CreateNews

原创 Linux操作系统 作者:dinner1007 时间:2019-04-23 10:39:06 0 删除 编辑
read-atleap-Hibernate部分分析2-CreateNews
read-atleap-Hibernate部分分析2-CreateNews

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

<!--[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映射定义

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

table="page"

dynamic-update="false"

dynamic-insert="false"

lazy="false"

>

column="localizable_id"

/>

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

table="news_item"

dynamic-update="false"

dynamic-insert="false"

lazy="false"

>

column="page_id"

/>

name="publicationDate"

type="date"

update="true"

insert="true"

access="property"

column="publication_date"

not-null="false"

/>

ª 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),最后插入关联关系的表中数据(field和field_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");

Ø 显示新闻列表

Ü

name="listNewsItems"

path="/news/listItems.do"

redirect="true"

/>

Ü

path="/news/listItems"

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

name="newsItemForm"

scope="request"

roles="manager"

unknown="false"

validate="false"

>

name="listNewsItems"

path=".news.listItems"

redirect="false"

/>

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

<!--[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");

listItems.jsp" />

© 显示新闻列表时执行的

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-131326/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论