今天主要實現的是員工信息的翻頁設計,用AJAX實現的,接著實現了員工信息的刪除實現,總結
一天的知識,感覺jQuery確實是十分有用的一門技術。
1.帶復雜條件的分頁:(非AJAX分頁)
直接把deptid屬性過濾加上會導致出現:org.hibernate.QueryException:
這時因為在
Employee 實體類中根本就沒有 deptid 屬性(并非指在 Employee 類中有該屬性,而是要在映射文件中映射該屬性).
解決方法:
在 EmployeeDao 中重寫 Page<T> findPage(final
Page<T> page, final List<PropertyFilter> filters) 方法, 以解決表單頁
面的 deptid和實體類的
dept屬性的對應問題
注
意:1.增強 for 循環時, 不能 remove 其元素
2.在
循環時刪除集合的元素, 會改變集合的 size 屬性
2.AJAX分頁設計
1.需要在EmployeeAction的對應方法中,返回JSON數據,在頁面上進行解析即可
2.實現過程:
1.點擊上一頁連接時,需要使用AJAX分頁:因為ajax分頁時,頁面沒有刷新,
下一頁連接添加AJAX支持
<script
type=”text/javascript”>
$(function(){
$(“#nextpage”).click(function(){
Var
url=”${cp}/employee-list-2.do?pageNo=” + (parseInt($(“#pageNo”).val()) +
1);
var args = $(“:hidden:not(#pageNo)”).serialize();
$.getJSON(url,args,function(data){
$(“.pagebanner”).html(“共”+data.totalCount+”條記錄 ”);
$(“#pageNo”).val(data.pageNo);
});
return false;
});
});
</script>
服務器端實現(employeeList2)
1.獲取請求參數
String
pageNoStr = request.getParameter(“pageNo”);
2.從頁面獲取PropertyFilter集合
3.調用service的findPage方法,得到分頁數據Page對象
4.將page對象轉化為對應的JSON數據格式。那么需要轉化為什么樣的JSON數據
{totalCount:,totalPages:,pageNo:,employees:[{employeid,:loginName:,gender:,...}] }
5.返回JSON數據
response.setContentType(“text/javascript”);
response.getWritter().print(jsonResult);
3.員工信息
刪除功能
1.AjAX刪除功能的實現:
1.若當前頁已經是最后一頁,且當前記錄是當前頁的最后一條記錄,則不能再請求當前頁的信息, totalPages不能代表服務器端的總頁數
2.Ajax 刪除要實現的功能:
1. 彈出confirm(): 確
定要刪除嗎?
2. 若點擊"否",
則文本框或下拉框的值恢復為剛才的默認
值: 使用隱藏域.
3. 若點擊"是",
進行ajax
刪除
4. 若
員工信息有外鍵關聯時,注
意:通過 ajaxError 函數進行提示,彈出“不能刪除該記錄”
關鍵代碼:
4.查看員工的詳細信息
這樣的功能實現在現在來說,已不難實現,我實現了一下,不難!還用了下插件!顯示Employee
的頭像!
posted @
2010-03-07 23:03 d66380022|
編輯 收藏
員工的錄入和查詢(帶
條件查詢)
今天做的是員工信息錄入和服務器端的驗證,目標是使用jQuery更熟悉,掌握分頁設計,更好理解Hibernate的一些以前未用過的類中的一些方法。
一. 員工的錄入,并進行驗證
1.顯示員工的錄入頁面
1.用jQuery 的validator
為表單做前臺驗證
2.對登錄名的Ajax 校驗
3.使用jQuery 的blockUI
插件提示Ajax 操作
4.錄入員工信息
2.服務器端的簡單驗證
1.使用struts的validator框架
2.以email為例,email非空,且符合email格式
3.員工錄入服務器端的復雜驗證
1.數據庫,EmployeeAction中,得到登錄名
2.對登錄名的可用性進行驗證,驗證登錄名在數據庫中是否存在
3.這時可以采用struts的聲明式異常
4.使用py4j 解決把漢字轉為對應的拼音: 佟剛--> tg, 張孝祥--> zxx, 黎活明--> lhm
二.員工的查詢
1.顯示員工信息:AJAX分頁
使用displaytag 分頁顯示員工信息,記
錄不超過百萬條。簡單,使用。比如OA。
1.在tomcat的webapps目錄下展示其實例。
2. OpenSessionInView:
1使用OpenSessionInView
若Hibernate中某一個類的引用屬性(也
包括集合屬性)采取懶加載策略,則可能出現懶加載異常,但沒有對其懶加載屬性進行初始化,此時關閉Session,然后再來獲取屬性,就會異常
聲明使用spring的聲明式事務:
<aop:config>
<aop:pointcut
expression="execution(* cn.itcast.ems.service.*.*(..))"
id="emsTxPointcut"/>
<aop:advisor
advice-ref="emsTxAdvice" pointcut-ref="emsTxPointcut"/>
</aop:config>
OpenSessionInView可以解決這個問題,因為OpenSessionInView的使用流程是:
request à open
session 并開始transaction
–>controller à view(jsp)à
2.如何使用:
在web.xml配置:
3.缺點:
如果流程中的某一步被阻塞, 而這期間的 connection 卻一直被占用不被釋放. 例如輸出頁面時, 一方面可能是頁面內容大, response.write的時間長; 另一方面可能是網速慢, 服務器與用戶間傳輸時間久. 當大量這樣的情況出現時,就有連接池連接不足, 造成頁面假死現
象.
所以在內容多流量大的網站需慎用.
3.翻頁相關的類:
1.Page:
與具體 ORM
實現無關的分頁參數及查詢結果封裝
2.
PropertyFilter: 與具體 ORM 實現無關的屬性過濾條件封裝類, 主要記錄頁面中簡單的搜索過濾條件
3.
HibernateDao: 擴展
SimpleHibernateDao, 功能包括分頁查詢, 按屬性過濾條件列表:
1.不帶任何查詢條件時, 需要使用的方法:
--countCriteriaResult
--setPageParameter
--findPage(Page<T>
page, Criterion...criterions)
HibernateWebUtils
分頁:
不帶查詢的分頁
employee-list-1.do --> Action
--> Service -->
DAO
2.查詢條件的翻頁:使用jQuery 的一個thickbox 插件完成查詢頁面的彈出
1.jQuery的分頁插件
2.在獲取第一頁的內容以后,如何
把查詢條件帶到第二頁
--把封裝了查詢條件的List放到session域中,下一次從session中取。
--把查詢條件放在隱藏域中
3.攜帶查詢條件
使用jQuery提供的serialize()方法攜帶查詢條件(行不通)
var url = this.href + “&” +
$(“:hidden”).serialize();
window.location.href=url;
注意:上述方法在第一次不能起作用: 即不能再第一次把隱藏域中的參數帶過去, 因為在第一次點擊該鏈接時, href 的屬性值已經固定了, 不能再發生變化,
而第二次點擊時, 因為第一次已經改變了該屬性的值, 所以好用
所以必須在第一次點擊該鏈接之前讓
this.href = this.href + "&" +
$(":hidden").serialize(); 起作用
解決方案:
$("#criteria").attr("href",
$("#criteria").attr("href")
+ "&" +
$(":hidden").serialize());
今天就到這兒,明天continue!
posted @
2010-03-06 23:50 d66380022|
編輯 收藏
今天接著昨天的整合,由佟老師總指揮,基于xml配置的Action,這涉及struts整合.今天先把登陸實現了,最后使用兩個插件把員工信息錄入功能
實現,頁面效果在當今還是主流的。
2.服務器端驗證
1.查詢數據庫,得到信息
2.若用戶名不存在,則提示用戶名不存在
errors.add("",new ActionMessage(" "));
若用戶名和密碼不匹配,則提示用戶名和密碼不匹配
若errors.isEmpty()為true,則登陸,并將其保存在session中,
方法:
使用 struts 的聲明式異常來轉發頁面和顯示提示信息.
詳細解決:
由 EmployeeService 的方法拋出異常, Action 不進行處理, 而由 struts 框架根據當前的
action 節點配置來進行相應的處理:
如果出現對應的異常, 會利用當前 excpeption 配置節點的 key 生成對應的 ActionMessage
對象, 再放入 ActionMessages 中,
把頁面派發到 input 對應的頁面中, 在前臺頁面利用 <html:errors
property="key"> 進行顯示
4.ReflectUtils類的作用:
1.convertValue:beanUtils1.8提供了DateConverter
2. PropertyUtils: 提供了讀寫 Bean 的屬性的方法
3. fetchElementPropertyToString: StringUtils.join 方法可以把指定集合的元素用分隔符鏈接起來
4. getSuperClassGenricType: ParameterizedType
5.SimpleHibernateDao 類介紹:SimpleHibernateDao<T,PK extends
Serializable> 說明:該類在service層中使用,
T:Dao操作的對象類型
PK:主鍵類型
1.getIdName():
2.distinct(List list):通過 Set 將不唯一的對象列表唯一化,主 要用于 HQL/Criteria
預加載關聯集合形成重復記 錄, 又不方便使用 distinct 查詢語句時
6.CreateCriteria:
createQuery(String queryString, Object... values)
7. ReflectionUtils
1 convertValue: beanUtils 1.8 提供了 DateConverter
2. PropertyUtils: 提供了讀寫 Bean 的屬性的方法
3. fetchElementPropertyToString: StringUtils.join
方法可以把指定集合的元素用分隔符鏈接起來
4. getSuperClassGenricType: ParameterizedType
8. SimpleHibernateDao:
1. getIdName: ClassMetadata 該類可以獲取到對應的 class 的 hbm 配置文件的幾乎所有信息
2. 標準查詢:
-->創建 Criteria 對象: session.createCriteria(clazz);
-->為 Criteria 對象添加查詢條件: criteria.add(criterion);
-->獲取 Criterion 對象: 通過 Restrictions 來獲取
9.struts的導航組件:struts-menu的使用方法:
1. 把 struts-menu.war 文件復制到服務器下, 運行
2. 在 struts-config.xml 文件中加入 struts-menu 插件
3. 復制 struts-menu\WEB-INF\menu-config.xml 到 conf 目錄下.
4. 復制 struts-menu-2.4.3\struts-menu-2.4.3.jar 到 classpath 下
5. struts-menu 的去除默認背景色問題:
①. 通過 jQuery: 把 left.jsp 頁面的第三個 table 的
style="background-color:lightgrey" 屬性清除
②. 通過修改默認的配置文件: 修改 struts-menu=2.4.3.jar
net.sf.navigator.displayer 包的的 DisplayerStrings.properties 文件,
把 dd.menu.top=<table width\="150"
style\="background-color\:lightgrey" cellpadding\=1
cellspacing\=1><tr align\=left><td nowrap
class\=normal><b>
的 style\="background-color\:lightgrey" 去除
10.員工錄入前臺驗證,用的是jQuery的插件jquery-validate
5.對輸入的登陸名進行ajax驗證:驗證該登錄名在數據庫中是否存在。
11.在loginname字段已經給出對應的“該登錄名已經被占用”的基礎上,再一次點擊“提交”按鈕,則需要進行服務器端驗證,再返回錄入頁面
12.若驗證都通過,則需要進行服務器端的驗證。
13.員工的錄入操作:
1). 顯示員工的錄入頁面
①. 查詢數據庫, 獲取所有的部門信息和職位信息, 并在頁面上加以顯示
②. 頁面使用 jQuery 的 validator 插件作為表單的前臺驗證
1. 在當前 jsp 頁面中導入 jquery.validate.js
2. 為需要驗證的字段添加 class 屬性, 在其中指定驗證規則, 獲取添加 minlength 等屬性
今天就到此了!
posted @
2010-03-05 23:16 d66380022|
編輯 收藏
SVN版本控制
今天有毛偉老
師講版本控制,版本控制(Revision control)是維護工程藍圖的標準做法,能追蹤工程藍圖從誕生一直到定案的過程,確保由不同人員所編輯的同一文
件檔案都能得以同步。最新的Spring3.0已經提供了更高級的版本控制,但是國內沒幾個用,先掌握SVN,以后有機會再用高級的。下面詳細總結
一下:
1.Subversion介紹:是一種開放源碼的全新版本控制系統。是新一代的版本控
制工具,他不但提供了常見的比較、修補、標記、提交、回復和分支等功能,適于 Web 開發和其他
在傳統方式下未采納版本控制功能的領域
2.svn安裝
1.運行svn的server端,運行setup.exe,就OK
檢驗安裝好了:
運行dos窗口
,輸入svn ,回車,出現svn help 提示,安裝成功
2.svn服務器啟動(我安裝目錄:D:"Program
Files"Subversion"bin)
cmd:
svn根目錄 svnserve -d 即D:"Program
Files"Subversion"bin>svnserve
–d
是否啟動成功
.當前是否啟動3690端口號
3.版本庫目錄介紹:
dav目錄:是提供給Apache與mod_dav_svn使用的目錄,讓它們存儲內部數據,當前我們使用的版本沒有這個目錄(與你下載的Subversion版
本有關系)。
db目錄:就是所有版本控制的數據存放文件。
hooks目錄:放置hook腳本文件的目錄。
locks目錄:用來放置Subversion文件庫鎖定數據的目錄,用來追蹤存取文件庫的客戶端。
format文件是一個文本文
件,里面只放了一個整數,表示當前文件庫配置的版本號。
conf目錄:是這個倉庫的配置文件(倉庫的用戶訪問帳號、權限等)。
4.創建版本庫、導入、檢出
1、創建版本庫
右鍵--->TortoiseSVN--->Create
repository
here
2.導入
右鍵--->TortoiseSVN--->導入(一般在項目創建初始化數據時使用,當然也可用于把任意文件或目錄從外部導入到指定倉庫中)
3.檢出(提醒:檢出項目后客戶端文件夾
的變化.svn)
右鍵--->SVN Checkout...
5.SVN基本功能:
清理、更新到指定版本
日志記錄、提交日志限定必填。
鎖定、解鎖:基本權限控制(可以限制被鎖定的文件只能由被鎖定用戶修改提交)
誤刪除恢復操作:直接重更新或通過日志列表
單個文件過濾:選中文件-->TortoiseSVN---->增加到忽略列表
導出:使項目脫離版本控制。
6.總結SVN的使用:
在其文件夾上右鍵
"SVN Checkout..."寫上對應SVN地址
在其文件夾上右鍵
"SVN Update" 來更新我們的本地版本
在其文件夾上右鍵
"SVN Commit"
來提交我們的本地版本
在其文件夾上右鍵
"TortoiseSVN" --> "Export..." 來
發布、導出
在其文件上右鍵
"TortoiseSVN" --> 增加(A)" 來向版本庫中增加一
個受版本控制的文件
7.關于SVN的各種顏色提示說明:
CVS客戶端的使用基本上同SVN客戶端一樣,更簡單些,就不多說了
posted @
2010-03-03 00:02 d66380022|
編輯 收藏
spring對事務的管理
今天講了Spring的事務,及對hibernate的整合,對struts的整合。以后還得學習,記不住,用到再整理。
1.事務的四大特點:
atomic:要么都發生,要么都不發生。
consistent:數據應該不被破壞。
Isolated:用戶間操作不相混淆
Durable:永久保存
2.介紹spring的事務管理器
spring沒有直接管理事務,而是將管理事務的責任委
托給某個特定平臺的事務實現。
3.Hibernate事務:
<bean
id="transactionManager"
class="…HibernateTransactionManager">
<property
name="sessionFactory" ref="sf" />
</bean>
其中sessionFactory屬性必須和一個Hibernate的SessionFactory綁定
HibernateTransactionManager把事務管理委托給一個從Hibernate
session
中取得的net….Transaction對象。當一個事務成功完成時,
HibernateTransactionManager將調用Transaction對象的commit()
方法。類似的,當一個事務失敗時,Transaction對象的rollback()方
法將被調用。
4.事務屬性
1.隔離級別:設定事務的并發程度
臟讀:一個事務讀取了另一個事務改寫但還未
提交的數據,如果這些數據被回滾,則
讀到的數據是無效的。
不可重復讀:一個事務執行相同的查詢兩次或兩次以
上,但每次查詢結果都不同。
幻讀:一個事務讀取了幾行記錄后,另一個事務插入一
些記錄,幻讀就發生了。再后來的查詢中,第一
個事務就會發現有些原來沒有的記錄。
2.只讀 若對數據庫只進行讀操作,可設置事務只讀的屬性,使用某些優化措施。數據庫會進行優化處理。若使用hibernate作為持久化機制,聲明一個只讀事務會使hibernate的flush模式設置為FLUSH_NEVER。避免不必要的數據同步,將所有更新延遲到事務的結束。
3.事務超時 若事務在長時間的運行,會不必要的占用數據庫資源。設置超時后,會在指定的時間片回滾。將那些具有可能啟動新事務的傳播行為的方法的事務設置超時才有意義
5.CMT:容器管理事務
BMT:bean 管理事務
<tx:annocation-driven
transaction-manager="hibernateTransactionManager"/>
類上加@Transactional
6.總結:
事務策略
在業務中不能加try
catch ,因為Spring的環繞通知在出現異常時會回滾事務,你已捕獲,就會提交事務(任何情況下)
7.Spring整合Struts
1.web服務器啟動時,完成Spring容器的實例化。plugin|listener
2.struts中的action交給Spring容器管理。
3.基本操作
注意:在spring上下文中,作為普通bean配置action,但action的不能用id,只能用name,
因為需要struts-config.xml文件中action的path一致.
bean.xml
<bean name="/loginAction" class="..LoginAction">
<property name="xxxService" ref="xxxService"
/>
</bean>
posted @
2010-03-01 01:04 d66380022|
編輯 收藏
今天主要是AOP編程,徐老師先講了原理,由淺入深,最
后讓開發由aspectJ來完成,使開發更簡單,收獲蠻大
1.Aspect術語
通知:切面的實際實現,他通知系統新的行為。如在日志通知包含了實
現日志功能的代碼,如向日志文件寫日志。通知在連接點插入
到應用系統中。
連接點::應用程序執行過程中插入切面的地點,可以是
方法調用,異常拋出,或者 要修改的字段。
切入點:定義了通知應該應用在哪些連接點,
通知可以應用到AOP框架支持的任何 連接點。
引入:不變源代碼的情況下,為類添加新方法
和屬性。
目標對象::被通知的對象。既可以是你編寫的類也可以是
第三方類。
代理對象:嶄新的對象,將通知應用到目標對
象后創建的對象,應用系統的其他部 分不用為了支持代理對象而 改變。
織入:將切面應用到目標對象從而創建一個新代理對
象的過程。織入發生在目標
對象生命周期的多個點上:
編譯期:切面在目標對象編譯時織入.這需要一個特殊的編譯器.
類裝載期:切面在目標對象被載入JVM時織入.這需要一個特殊的類載入器.
運行期:切面在應用系統運行時織入.
4.切入點:定義了通知應該應用在哪些連接點,通知可以應用到AOP框架支持的任何連接點。
兩種:jdk動態代理(接口,松耦合),cglib(對類代理)
2.方法介紹
一.通知類型
1.前置通知
public interface MethodBeforeAdvice{
void before(Method m,Object[]
os
,Object target){
}
}
該接口提供了獲得目標方法、參數和目標對象的機會。不能夠改變運行時參數,即不能替換參數對象和目
標對象。
注意在方法結束后不返回任何值東西。原因是該接口返回后,目標方法將會被調用,應該返回目標對象的
返回值。該接口唯一能
阻止目標方法被調用的途徑是拋出異常或(System.exit())。
2.動態代理對象ProxyFactoryBean是一個在BeanFactory中顯式創建代理對象的中心類,可以給它一個
要實現的接口、一個要代理的目標對象、一個
要織入的通知,并且他將創建一個嶄新的代理
對象。
3.后置通知
同前置通知類似。
public interface AfterReturningAdvice{
public void afterReturning(Object
returnValue,Method
m,Object[] os,Object target);
}
多了一個返回值。
4.環繞通知
public
interface
MethodInterceptor extends Interceptor{
Object invoke(MethodInvocation invocation);
}
該接口同前兩種通知有兩個重要區別:1.該通知能夠控制目標方法
是否真的被調用。通過invocation.proceed()方法來調用。
2.該通知可以控制返回的對象。可以返回一個與proceed()方法返回對象完全不同的對象。但要謹慎使用。
5.異常通知
public interface ThrowsAdvice{
}
該接口為標識性接口,沒有任何方法,但實現該接口的類必須要有如下形
式的方法:
void
afterThrowing(Throwable
throwable);
void
afterThrowing(Method
m,Object[] os,Object
target,Throwable
throwable);
第一個方法只接受一個參數:需要拋出的異常。
第二個方法接受異常、被調用的方法、參數以及目標對象。
二.創建切入點方法
1. 切入點根據方法和類決定何處
織入通知。ClassFilter接口決定了一個類
是否符合通知的要求:
public interface ClassFilter{
boolean matches(Class clazz);
}
實現該接口的類決定了以參數傳遞
進來的類是否應該被通知。實現該接
口的類一般根據類名決定,但不一
定必須如此。
注意: 為減少系統負擔,盡量使用靜態切入點
2.定義切入點 spring提供了Advisor類。他把通知和切入點組合到一個對象中。更確切地說PointcutAdvisor提供了這些功
能
3.使用aspectJ開發
1.添加類庫:aspectjrt.jar和aspectjweaver.jar
2.添加aop schema.
3.定義xml元素:<aop:aspectj-autoproxy>
4.編寫java類,并用@Aspect注解成通知
AspectJ 支持 5 種類型的通知注解:
@Before: 前置通知, 在方法執行之前執行
@After: 后置通知, 在方法執行之后執行
@AfterRunning: 返
回通知, 在方法
返回結果之后執行
@AfterThrowing: 異
常通知, 在方法
拋出異常之后
@Around: 環繞通知, 圍繞著方法執行
配置成普通bean元素即可.
注意:
JoinPoint參數可訪問連接點細節,入方法名和參數等.
今天知識點蠻多的,對面試挺有用的,好好掌
握!
posted @
2010-02-28 01:11 d66380022|
編輯 收藏
Spring
對這個框架并不陌生,spring是一個開源的控制反轉(Inversion
of Control
,IoC)和面向切面(AOP)的容器框架.它的主要目得是簡化企業開發...
1.為Spring添加jar
支持
2.Spring:1.xml + 反射
2.不需要實例化
3.不需要set方法
以前 至上而下,
按部就班
之下而上,反的
3. bean的生命周期
bean被載入到容器中時,他的生命周期就開始
了。bean工廠在一個bean可以使用前完成很多
工作:
1.容器尋找bean的定義信息并實例化。
2.使用依賴注入,spring按bean定義信息配置bean的所有屬性。
3.若bean實現了BeanNameAware接口,工廠調用Bean的setBeanName
()方法傳遞bean的ID。
4.若bean實現了BeanFactoryAware接口,工廠調用setBeanFactory()
方法傳入工廠自身。
5.若BeanPostProcessor和bean關聯,則它們的
postProcessBeforeInitialization()方法被調用。
6.若bean指定了ini-method方法、,它將被調用。
7.最后,若有BeanPostProcessor和bean關聯,則它們的
postProcessAfterInitialization()方法被調用、。
4.set注入的缺點:
無法清晰表達哪些屬性是必須的,哪些是可選
的,構造注入的優勢是通過構造強制依賴關系,不可能實例化不
完全的或無法使用的bean。
5.自動裝配
<bean id=" " class="" autowire="autowire 類型">
有四種自動裝配類型:
1.byName:尋找和屬性名相同的bean,若找不到,則裝不上。
2.byType:尋找和屬性類型相同的bean,找不到,裝不上,找到多個拋異常。
3.constructor:查找和bean的構造參數一致的一個或
多個bean,若找不到或找到多個,拋異常。按照參數的類型裝配
4.autodetect: (3) 或者(2)方式選一個。不確定
性的處理與(3)和(2)一致。
注意:
spring2.5提供了<context:annotation-config
/>配置.
該配置可激活在類中探測到的各種注解,@Required
@Autowire
@PostConstrct @PreDestroy @Resource @EJB @PersistenceContext
@WebServiceRef等等,
也可以選擇為這些注解激活單獨的后處理器.
6.屬性的外部化
分散配置
將配置文件分成幾個分散的配置文件。如數據源。
<bean class="...PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>jdbc.properties</value>
<value>securtiy.properties</value>
</list>
</property>
</bean>
當然在Spring2.5可以簡化為
<context:property-placehoder location>
7.AOP
有一些模塊是每個系統都需要的,切面是系統
模塊化的一個切面或領域。如日志記錄。不改變源代碼,還給類增加新的功能
2.連接點:應用程序執行過程中,可以應用切面的地點,可以是方法調用,異常拋出,或者要修改的
字段。
3.通知:切面的實際實現,他通知系統新的行為。
4.切入點:定義了通知應該應用在哪些連接點,通知可以應用到AOP框架支持的任何連接點。
5.引入:為類添加新方法和屬性。
6.目標對象:被通知的對象。既可以是你編寫的類也可以是第三方類。
7.代理:將通知應用到目標對象后創建的對象,應用系統的其他部分不用為了支持代理對象而
改變。
8.織入:將切面應用到目標對象從而創建一個新代理對象的過程。織入發生在目標
對象生命周期的多個點上:
編譯期:切面在目標對象編譯時織入.這需要一個特殊的編譯器.
類裝載期:切面在目標對象被載入JVM時織入.這需要一個特殊的類載入器.
運行期:切面在應用系統運行時織入.
今天到此結束,明天繼續!
posted @
2010-02-26 23:02 d66380022|
編輯 收藏
UML
今天學習UML,uml是unified modeling language,是一種基于面向對象的可視化建模語言. 老徐講了很多與開發有關的東西,很不錯,還介紹了軟件的發展等,開始整理下
1. UML 采用了一組形象化的圖形(如類圖)符號作為建模語言, 使用這些符號可以形象地描述系統的各個方面。oop:ooa(分析) + ood(設計)
2.軟件的生命周期
瀑布模型:
需求分析(可行性分析:)
1.時間可行性
2.技術可行性
3.經濟可行性
系統分析和設計(系分)
實現
測試
維護
角色分配:項目經理技術總監代碼人員測試人員 db管理人員系統分析人員
project leader 系統架構師
3. 統一軟件開發過程(Rational Unified Process,RUP): 一個通用的軟件流程框架, 以架構為中心, 用例驅動的迭代化開發流程.
4.uml:圖(圖元)
UML 中一共有 10 種圖:
類圖**** 對象圖 包圖 組件圖 部署圖 用例圖** 時序圖*** 協作圖 狀態圖
活動圖*
5.用例圖
是從軟件需求分析到最終實現的第一步, 它是從客戶的角度來描述系統功能.
用例圖包含 3 個基本組件: 參與者(Actor), 用例(Use Case),關系
6.類圖
類圖是面向對象系統建模中最常用的圖. 是定義其他圖的基礎.
類圖主要是用來顯示系統中的類,
接口以及它們之間的關系.
類圖包含的主要元素有類, 接口和關系. 其中關系有關聯關系, 泛化關系, 依賴關系和實現關系. 在類圖中也可以包含注釋和約束.
7.類之間的幾種關系:實現依賴關聯聚合組成
實現關系:在 UML 中, 實現關系用來表示類與接口之間的實現關系.
依賴關系:對于兩個相對獨立的系統,當一個系統負責構造另一個系統的實例,或者依賴另一個系統的服務時,這兩個系統之間體現為依賴關系.
關聯:對于兩個相對獨立的系統,當一個系統的實例與另一個系統的一些特定實例存在固定的對應關系時,這兩個系統之間為關聯關系。
聚合:聚合關聯是一種特殊的關聯. 它表示類間的關系是整體與部分的關系.
組合關系: 整件擁有部件的生命周期, 所以整件刪除時, 部件一定會跟著刪除. 而且, 多個整件不可以同時共享同一個部件。
8. 時序圖
時序圖用于描述對象之間的傳遞消息的時間順序, 即用例中的行為順序.
當執行一個用例時, 時序圖中的每條消息對應了一個類操作或者引起轉換的觸發事件.
對象: 時序圖中對象使用矩形表示, 并且對象名稱下有下劃線. 將對象置于時序圖的頂部說明在交互開始時對象就已經存在了. 如果對象的位置不在頂部, 表示對象是在交互的過程中被創建的.
生命線:生命線是一條垂直的虛線. 表示時序圖中的對象在一段生命周期內的存在. 每個對象底部中心的位置都帶有生命線.
9. 活動圖
在 UML 中, 活動圖本質上就是流程圖. 它用于描述系統的活動, 判定點和分支等.
10.臨時
持久化 游離 刪除
11.狀態圖
狀態圖: 通過建立對象的生存周期模型來描述對象隨時間變化的動態行為.
狀態: 用圓角矩形表示. 狀態名稱表示狀態的名字, 通常用字符串表示. 一個狀態的名稱在狀態圖所在的上下文中應該是唯一的.
12.包圖:
由包和包之間的關系組成. 包的圖標就如同一個帶標簽的文件夾.
13.組件圖
用來建立系統中各組件之間的關系, 各組件通過功能組織在一起.
14.部署圖
用來幫助開發者了解軟件中的各個組件駐留在什么硬件位置, 以及這些硬件之間的交互關系。
今天就講了這些知識,挺瑣碎的,關鍵是看懂就OK了!
posted @
2010-02-25 23:29 d66380022|
編輯 收藏
JPA第二天
今天JPA的第二天,繼續學習關聯,還有分頁,設置參數,單值檢索等重點,下午是EJB的介紹,實現。這其中足見老師水平之高,經驗太豐富了。好 ,作總結:
1. 多對一單向關聯
2.一對多
@OneToMany(mappedBy=””) 忽略關聯關系
mappedBy讓對端忽略關系的變化,相當于HibernateSet集合中的inverse,緩存就不再負責set的
em.find(Order.class,1);默認迫左/延遲
3.一對一外鍵關聯
<many-to-one
name=”addr” column=”aid”
class=”Addr” unique=”true”/>
<one-to-one
name=”” column=”” property-ref=”addr”/>
JPA中的實現
@OneToOne[觀察自動創建出來的表結構]
class User{
@OneToOne
protected Addr addr;
class Addr{
@OneToOne(mappedBy=“addr", optional="false");
protected User user;
}
mappedBy:控制權問題
optional:false 表示沒有用戶的BillingInfo是不能單獨存在的.
4.多對多
@ManyToMany
@ManyToMany
protected Set<Student> students;
@ManyToMany(mappedBy=“students")
protected Set<Teacher> teachers;
5.繼承關系
以Employee為例
Employee{id
name age}
HourEmployee(HE){rate} SalaryEmployee(SE){salary}
映射繼承關系樹:整個繼承關系樹對應一張表
游離,臨時,持久 詳解:
1.位于一個session緩存中,總是被一個
session關聯。
2.持久化對象和數據庫記錄相對應。
3.清理緩存時,會根據對象屬性變化,同步
更新數據庫。
4.save把臨時對象轉變為持久化對象。
5.load或find或get返回的對象總是持久化狀態。
6.find方法返回的list存放的都是持久化對象。
7.update、save、SaveOrUpdate和Lock方法使游離對象裝變
為持久化對象。
6、分頁:
("findCustomerByName");
query.setParameter("name", "t,om");
query.setMaxResults(10);
query.setFirstResult(3); query = em.createNamedQuery
List customers = query.getResultList();
7、設置參數:
SELECT o FROM Order i WHERE i.orderNo = ?1
query.setParameter(1, 100.00);
SELECT o FROM Order i WHERE o.price = :price
query.setParameter("price", 100.00);
8.單個實體檢索
query.getSingleResult();
9.
查詢集合:
WHERE c.orders IS EMPTY
WHERE CONCAT(c.fname, c.lname) = 't,om'
SELECT c.id, c.name FROM Customer c
10.多態查詢
SELECT c FROM Customer c WHERE c.name LIKE :name
11.分組
SELECT o.customer, COUNT(o.id) FROM Order o
GROUP BY
o.customer
12.排序
order by
13.子查詢
SELECT o FROM Order I WHERE o.customer IN
(SELECT c FROM Customer c WHERE c.name LIKE ?1)
EJB
1.ejb簡介:enterprise
java bean就是開發分布式組件的。in
ejb容器具有負載均衡 容
錯 線程池 安全 高并發性等功
能。
EJB = pojo + @
spring:業務層 管理bean的,容器key-value.沒有ejb的java ee
j2ee
: 開發分布式企業級應用的規范(jsp servlet jpa ejb)
2.開發EJB步驟:
1.下載安裝jboss
2.配置環境變量:
JBOSS_HOME JBOSS安裝目錄
3.web服務器端口(${jboss_home}"server"default"deploy"jboss-web.deployer"server.xml)[22行]
4.啟動。${jboss_home}"bin"run.bat
IDE中配置服務器:
windows/首選項/myeclipse/servers/jboss/4.x/運行模式(非調式模式) + jdk1.5.
5.啟動服務器,進入管理頁面.http://localhost:8088/
點擊[JMX Console]超鏈接
點擊Jboss/service=JNDIView
ok.
今天就OK了!
posted @
2010-02-22 00:14 d66380022|
編輯 收藏
JPA
今天講的是JPA規范,還是由經驗豐富的徐老師講的,JPA是一門解決了各個ORM“諸侯爭霸”的局面。詳細點就是
1.JPA概述
JPA(Java Persistence API)是Sun官方提出的Java持久化規范。它為Java開發人員提供了一種對象/關系映射工具來管理Java應用中的關系數據。JPA是在充分吸收了現有Hibernate(數據庫平臺無關)、TopLink等ORM框架的基礎上發展而來的,達到平臺無關性(持久化技術產品)。
JPA是EJB的一部分。
2.jar包支持
Hiberante核心包(8個文件)
hibernate-distribution-3.3.1.GA,加上mysql的驅動jar
3. JPA規范要求在類路徑的META-INF目錄下放置persistence.xml,文件的名稱是固定的。
事務的特點:acid: atomic consistent isolate durable
4.JPA編程建模
映射關系

代理主鍵:( 采用一種增長策略) @id
定義id屬性,相當于Hibernate中的OID.這兩個注解必須顯式指定,其他的映射是隱
式(默認)的.
5.方法上注解優先,測試CRUD操作
em.persist(order);
em.find(Order.class,new Long(1));
em.remove(order);
em.merge(order);
6.JPA語法嚴謹,語句:select p from Person p where p.name=’tom’ select要寫
7.不想往數據庫中存,就注解 @Transient
8. @Lob
@Basic(fetch=FetchType.LAZY)
protected byte[] picture;
映射temporal(精確度)
@Temporal(TemporalType.DATE)//該注解只能注util.Date和Canlendar.
protected Date creationDate;
9.組成關系
Customer homeAddress comAddress
Address{
}
在類上加@Embeddable
10.JPA關系 重點
JPA關系 ManyToOne/OneToMany
@ManyToOne/@OneToMany
Class Order{
@ManyToOne
Customer customer ;
Class Customer{
@OneToMany(mappedBy=“”)
Set<Order> orders = ..
}
注:如果集合不采用泛型的話,如何才知道集合與誰關聯.
@OneToMany(targetEntity=Order.class,mappedby=“customer”)
今天就到此了!
posted @
2010-02-21 01:18 d66380022|
編輯 收藏