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博客 ” ,链接:http://blog.itpub.net/374079/viewspace-131326/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/374079/viewspace-131326/