Thứ Ba, 17 tháng 11, 2009

Làm thế nào để tập trung trở lại vào các mục tiêu mà mình đặt ra?

Bạn không thành công, không thể đạt được đến mục tiêu của mình đơn giản chỉ vì bạn đã mất tập trung vào chúng. Làm thế nào để tập trung trở lại vào các mục tiêu mà mình đặt ra? Đơn giản lắm, bạn hãy đặt cho mình những câu hỏi dưới đây:

Liệu mình có thực hiện được các mục tiêu đã đề ra?

Thực hiện được, nghĩa là thực tế và có thể đạt đến được. Vì đôi khi vô tình bạn đã đặt ra những mục tiêu mà bất kỳ ai cũng thực sư phải khó khăn mới đạt được, thậm chí khi họ có những phương tiện và thời gian để thực hiện.

Điều cần làm là bạn phải chia mục tiêu của mình thành những mục tiêu nhỏ hơn, thực tế hơn và phải thực hiện được trong những khung thời gian hợp lý. Thường thì bạn sẽ đạt được nhưng mục tiêu lớn hơn khi bạn đã được những mục tiêu nhỏ. Điều quan trọng là bạn nên chia những mục tiêu của mình càng thực tế và dễ thực hiện càng tốt.

Mình có đủ tự tin?

Thực tế là chỉ những người tin tưởng vào bản thân có thể đạt được thành công. Vì thế bạn nên tin vào mình, vào những gì bản thân có thể làm được để đạt được mục tiêu. Nghi ngờ bản thân là một tai hoạ lớn nhất và là trở ngại lớn nhất mà bạn phải vượt qua để đến được thành công. Nếu như bạn nghĩ rằng mình không thể đỗ được đại học, thì bạn có học trời học biển đi chăng nữa thì cuối cùng, kết quả cũng không thể nào tốt đẹp được. Hay, nếu như bạn đặt mục tiêu là sẽ đủ can đảm để thuyết trình trước đông đảo khán giả, mà bạn lại nghĩ rằng mình sinh ra vốn đã chẳng có chút tài năng nào về thuyết trình, thì dù bạn có chuẩn bị tài liệu, kiến thức kĩ càng đến đâu song bài thuyết trình của bạn cũng sẽ không đạt được thành công. Trong cuộc sống, có thể bạn đã mất tập trung vào những mục tiêu của mình vì vô tình bạn đã chưa vượt qua sự nghi ngờ bản thân ?

Mình đã có kế hoạch cụ thể nào chưa?

Vâng, bạn biết bạn muốn gì, nhưng bạn vẫn không biết phải làm gì để đạt được? Bạn cần có một sự huấn luyện chuyên môn hay nghệ thuật đặc biệt để có thể đạt được mục tiêu? Hay là một trình độ học vấn cao hơn? Bạn đã có một kế hoạch cho những việc phải làm để thực hiện mục tiêu cuả mình chưa? Những thứ rõ ràng hoặc không rõ ràng, bạn có cần chúng cho việc đat đến mục tiêu không?

Hãy bỏ một ít thời gian ngồi xuống và liệt kê tất cả những thứ bạn cần làm, hãy lập một kế hoạch. Cũng rất tốt nếu bạn chia nhỏ chúng thành những mục tiêu nhỏ và thực tế hơn và hãy thực hiện chúng.

Ví dụ, nếu bạn muốn nâng cao trình độ tiếng Anh của mình, thì không nên chỉ đặt mục tiêu chung chung, kiểu như: “Tôi sẽ giỏi tiếng Anh hơn”. Thay vào đó, bạn hãy đặt cho mình những chỉ tiêu nhỏ và chi tiết: “Mỗi ngày học thêm 5 từ vựng tiếng Anh”, “ Mỗi tuần học thêm được 10 cấu trúc”. Với sự tích lũy từ ngày này qua ngày khác, trình độ tiếng Anh của bạn sẽ được cải thiện đáng kể cho xem.

Mình có đang trải sức quá nhiều?

Thỉnh thoảng, bạn nên thực hiện một mục tiêu hơn là cùng một lúc đổ sức cho quá nhiều mục tiêu. Thứ nhất, nếu thực hiện nhiều việc cùng một lúc sẽ gây nhiều trở ngại cho việc đạt được mục tiêu nhanh hơn. Lý do khác là bạn sẽ không thể tập trung hết sức lực cho một mục tiêu. Bạn sẽ phải mãi chạy theo và cố gắng đạt hết mục tiêu này đến mục tiêu khác, và đôi khi bạn sẽ chẳng đạt được gì. Nếu bạn là một sinh viên, và mục tiêu của bạn là đạt được bằng Giỏi khi tốt nghiệp, vậy thì bạn không thể dành quá nhiều thời gian cho part time. Bạn phải ưu tiên trước hết cho việc tích lũy kiến thức đã. Hãy chia những mục tiêu theo thứ tự ưu tiên và hãy bắt đầu với những cái ưu tiên nhất hoặc thực tế nhất. Bằng cách này, bạn sẽ nhận thấy rằng bản thân mình làm được và đạt được nhiều cái hơn.

Mình có là người dễ bỏ cuộc không?


Đồng thời với việc tự hỏi xem liệu bạn có tin tưởng vào khả năng của bản thân hay không thì đây cũng là một câu hỏi quan trọng thứ hai bạn nên tự hỏi. Vâng, bạn đã thực hiện những bước để đạt đến mục tiêu, nhưng sau một vài thất bại, liệu bạn sẽ bỏ cuộc hay sẽ tiếp tục cố gắng? Bền bỉ và kiên nhẫn là chìa khoá đạt đến mục tiêu và thành công cuối cùng. Hãy luôn nhớ rằng có rất hiếm những người đạt được mục đích và thành công ngay từ những lần thử sức đầu tiên. Vì nếu ai cũng làm được vậy thì chẳng cần thiết phải xây dựng sự tự tin, tính bền bỉ và kiên nhẫn của bản thân mỗi người, phải không bạn?

Vì vậy, hãy tự hỏi 5 câu hỏi trên, hãy bắt đầu hành trình để đạt đến những mục tiêu của đời mình ngay từ hôm nay!

Mai Hà Uyên (Theo www.esiportal.com)

Thứ Ba, 10 tháng 11, 2009

16課(01-40)

1.そんな小さなナイフで__ものなら、殺してみろ!
①殺す ②殺さない ③殺せる ④殺される

2.初めてカラオケで日本語の歌が歌えたときは、うれしい__
恥ずかしい__、何とも言えない気持ちだった。
①なり なり ②と と ③など など ④やら やら

3.定職もない私に銀行がお金を貸してくれる__がない。
①とか ②くらい ③もの ④わけ

4.仕事が忙しくても、親友の結婚式には__わけにはいかない。
①出席する ②出席しない ③出席した ④出席しよう

5.あんな変な宗教から息子を脱会させられる__脱会させたい。
①そうなら ②ほどなら ③ものなら ④ところなら

6.音楽が好きな田中さんの部屋には、クラシック__、ロック__さまざまなジャンルのCDがたくさんある。
①とも とも ②し し ③やら やら ④たり たり

7.全然勉強しないで、試験に合格する__。
①わけだ ②わけがない ③わけでない ④のでもない

8.母はがっかりするだろうが、試験に落ちてしまったことを知らせない__。
①どころではない ②にすぎない ③わけにはいかない ④べきではない

9.日本では他人と違うことを__ものなら、すぐ協調性がないと言われる。
①する ②した ③しよう ④すれば

10.こんなにたくさん資料があったら、調べたくても__がない。
①調べ ②調べる ③調べよう ④調べたい

11.彼が__わけはない。彼が計画した旅行なんだから。
もう少し待ってみよう。
①来る ②来ない  ③来よう ④来たい

12.田中さんは、病気__わりに元気そうだ。
①が ②で ③を ④の

13.大統領__なれるものならなって、国のためにつくしたい。
①で ②ば ③に ④なら

14.クイズ番組で自動車が当たった。しかし運転免許証がないので、運転__。
①したくない ②せずにはいられない ③しかねない ④しようがない

15.賄賂を受け取っていたといわれている政治家が再当選する__はなかった。
①くらい ②もの ③わけ ④ほど

16.海外出張で何度も現地に行っている__何もわかっていない。
①わりに ②から ③でも ④ところが

17.自分でケーキを作ってみようと思い材料を買った__戸棚にしまったままだ。
①もの ②ものの ③ものか ④ものを

18.英語で自分紹介しろと言われても、英語ができないのだから自分紹介しようが__。
①あります ②ありません ③あった ④あろう

19.9月に引っ越してきたのだから、まだ3か月しか経っていない__。
①ところだ ②つもりだ ③ことだ ④わけだ

20.中学、高校、大学で10年も勉強した__英語が身についていない。
①のわりに ②わりに ③わりで ④ところが

21.熱が下がったと思っていったん起きてみた__、
頭が痛くてまたベッドに戻った。
①ながら ②でも ③しかし ④ものの

22.風邪をひいてしまって、明日の約束を断りたいが、山田さんの家の電話番号がわからないので連絡の__。
①しかたがない ②おそれがない ③しようがない ④しかない

23.彼はもう3年も日本に住んでいるそうだ。彼のほうが私より日本語が__わけだ。
①じょうず ②じょうずだ ③じょうずな ④じょうずの

24.クリスマスの__人出が少ない。不況のせいだろうか。
①よりには ②わりには ③はずには ④わけには

25.改革の必要性は論じられた__、その具体策は、一向に明らかにされる気配はない。
①ものの ②から ③かわりに ④ながら

26.1日も早く家が__ように貯金をしている。
①買う ②買える ③買った ④買えた

27.経済大国になったからといって、すべての日本国民が豊かになった__。
①ではない ②ことではない ③ものではない ④わけではない

28.防風林は風害を防止することを目的__植えられている。
①に対し ②ぐらいも ③でこそ ④として

29.富士山に登ってみた__、あまり感動しなかった。富士山は遠くからながめているほうがよいと思う。
①どころか ②ものの ③に反して ④しかし

30.指定された場所以外ではたばこは吸わない__。
①はず ②べし ③ように ④まい

31.政治家みんなが信頼できない__ではないが、
私は今の政治に失望している。
①はず ②わけ ③ばかり ④くらい

32.みんなはAさんをクラスの代表委員__選出した。
①とする ②とした ③として ④にたいして

33.志望校に見事に合格した彼は、大声で叫ぶ__跳び上がる__大喜びでした。
①と と ②だの だの ③やら やら ④や や

34.発電所ができたのでこの村でも電気が__ようになりました。
①使う ②使った ③使える ④使えた

35.家のローンを払わなければならないから会社をやめる__。
①わけだ ②わけではない ③わけでもない ④わけにもいかない

36.ポケベルの液晶表示の数字を暗号__使って、声でなく数字で話す高校生もいる。
①ぐらい ②として ③ほど ④だけ

37.結婚することが決まった好子さんは、家具__電気製品__をそろえている。
①たり たり ②やら やら ③すら すら ④のみ のみ

38.例に示してある__太枠の中に必要事項を記入してください。
①ような ②ように ③ようで ④よう
39.今すぐにでも行きたいのだが、休暇がとれないので__わけにはいかない。
①行く ②行かない ③行こう ④行きたい

40.実際にあった事件を題材__映画が作られた。
①なのに ②からして ③として ④だからといって




Chủ Nhật, 8 tháng 11, 2009

15課(01-40)

1.明日のパーティーに行こうか行く    迷っている。
① つもりか   ② だろうか   ③ まいか    ④ でしょうか

2.最近は若い母親    子育ての雑誌が多数出版されている。
これも核家族が増えたためだろうか。
① 向いた    ② 向く     ③ 向ける    ④ 向けの

3.「何ぐずぐずしているの。早くしなさい。」「だって行きたくないんだ    。」
① ね      ② って     ③ もの     ④ から

4.この悔しさは忘れる    。いつか必ず彼を見返してみる。
① かねない   ② にかたくない ③ にあたらない ④ ものか

5.聞く耳を持たない彼には二度とアドバイスはする    
① つもりだ   ② だろう    ③ まい     ④ でしょう

6.電車も飛行機も熟年夫婦    割引切符が販売されている。
① 向けの    ② 対しての   ③ とっての   ④ ための

7.今日は出かけたくないなあ。雨が降っているんだ    
① もの     ② ので     ③ こと     ④ から

8.二日酔いで頭がくらくらするときは、もう酒など飲む    と思うが、夜になるとまた飲んでしまう。
① ことか    ② ものか    ③ のか     ④ ところか

9.昨夜、あんなに飲んだから、彼は二日酔いで今日は会社には来れ    
① はずだ    ② に違いない  ③ まい     ④ わけだ

10.彼は普段無口だがお酒は入ると、カラオケも歌    、ダンスもする。
① っても    ② ったら    ③ っていると  ④ えば

11.「そんなに食べて大丈夫なの。お腹壊すわよ。」「だって、
これ好きなんだ    。」
① から     ② って     ③ もの     ④ ものの

12.慣れないことをすると疲れる    
① ものを     ② ものです  ③ ものがある  ④ ものか

13.彼が会社をやめようが    が私には関係ない。
① やめない   ② やめるつもり ③ やめるだろう ④ やめまい

14.外国人の中にも納豆が好きな人も    嫌いな人もいる。
① いても    ② いたら    ③ いれば    ④ いると

15.「最近元気ないわ。」「親友とけんかしちゃったんだ    。元気でないよ。」
① もの     ② こと     ③ ので     ④ って

16.私も若いころは、夜遅くまで    ものだ。
① 遊び歩く   ② 遊び歩いている ③ 遊び歩いた ④ 遊び歩き

17.幼児    の絵本を日本語教育に使用してる学校がある。
① 的      ② っぽい    ③ 向き     ④ 気味

18.彼女は弁護士の資格も    、医師の資格も持っている。
① あっても   ② あれば    ③ あったら   ④ あると

19.動物の親子の愛情には、感動させられる    がある。
① の      ② よう     ③ もの     ④ ばかり

20.フランスで古いお城を見た。私もあんなお城に住んで    ものだ。
① みる     ② みた     ③ みたい    ④ みよう

21.このコンピューターの解説書は、小学生向き    やさしく書かれている。
① の      ② に      ③ を      ④ は

22.先週は風邪を引いて、せきも    熱も出るしで、つらかった。
① 出たら    ② 出て     ③ 出れば    ④ 出るなら

23.最近のアジア諸国の発展には目覚しい    
① のだ     ② ようだ    ③ そうだ    ④ ものがある

24.首相も一刻も早くこの不況から    ものだと思っているに違いない。
① 脱出する   ② 脱出しよう  ③ 脱出するつもり ④ 脱出したい

25.これは若い女性    の雑誌だ。
① 向く     ② 向かない   ③ 向き     ④ 向いて

26.あのアパートの若者たちは近所の人の迷惑も    毎晩夜遅くまで騒いでいる。
① かかわらず  ② かまわず   ③ のみならず  ④ かぎらず

27.彼女のスピーチ    人々を感動させるものがあった。
① では     ② からは    ③ には     ④ が

28.出かけにお客が来た    だから遅くなってしまってごめんなさい。
① の      ② こと     ③ ところ    ④ もの

29.この日本語の教科書は、技術研修生    
① 気味だ    ② っぽい    ③ ものだ    ④ 向きだ

30.A国は世界各国からの非難    かまわず核実験を行った。
① を      ② は      ③ で      ④ も

31.ゴッホの絵    人を引き付けて離さないものがある。
① とは     ② には     ③ なら     ④ では

32.「お父さんはどうして元気がないの?」「
娘がお嫁に行くことになったもの    、寂しいらしいのよ。」
① から     ② だから    ③ ので     ④ なので

33.この車はアメリカ    開発されたもので、日本の狭い道路では運転しにくい。
① 対して    ② 向けに    ③ とって    ④ 向け

34.父親がうるさいと怒鳴っているのも    、息子はボリュームをいっぱいにして、ロックを聴いていた。
① かかわらず  ② かぎらず   ③ かけず    ④ かまわず

35.あんなに一生懸命勉強したのに合格できないなんて…、もう勉強なんかする    
① もの     ② ものだ    ③ ものか    ④ ものの

36.何を着て出かけようかと    ものだから、部屋中洋服だらけになってしまった。
① 迷う     ② 迷わない   ③ 迷って    ④ 迷った

37.高齢化社会の到来とともに、高齢者    商品が次々と開発されている。
① 向けの    ② よりの    ③ からの    ④ によっての

38.子供が電車の中を走り回って他人に迷惑をかけている    かまわず、おしゃべりに夢中になっている母親がいる。
① でも    ② のも      ③ にも     ④ も

39.親友だと思ったら、何でも話したのに、クラスの人に言うなんて…、もう他人なんか    ものか。
① 信じる    ② 信じて    ③ 信じない   ④ 信じ

40.子供は勉強    ものだから、頭が痛いとうそをついた。
① する     ② しない    ③ したい    ④ したくない


Thứ Bảy, 7 tháng 11, 2009

14課(01-40)

1.食べれば食べる    お腹が空いてしまう。そういう体質なのだろうか。
① まで     ② から     ③ ぐらい    ④ ほど

2.傘をもっていなかった    全身びしょうぬれになってしまった。
① わけで    ② ほどに    ③ ばかりに   ④ くらいに

3.残業が廃止された。早く帰宅できる    、残業手当がなくなり収入が減る。
① ぐらい    ② ばかりに   ③ ほど     ④ 反面

4.私は愛煙家だが、社内は禁煙だから我慢する    
① ばかりだ   ② ほどだ    ③ に違いない  ④ ほかない

5.「勉強しなさい」と母に言われれば言われる    、勉強したくなくなる。
① くらい    ② ほど     ③ につれ    ④ から

6.彼は彼女との約束30分遅れた    、ふられてしまった。
① のに     ② だけに    ③ ばかりに   ④ のゆえに

7.人間は脳が発達している    、ほかの動物が持っている本能的な能力を失っている。
① ほど     ② 反面      ③ そくめん   ④ ほかに

8.台風が飛行機が欠航になってしまったのだから、
旅行は延期する    
① にほかならない ② ほかしかたがない ③ べきではない ④ ほどだ

9.反抗期の子供は、これはやってはいけないと    言うほどやろうとする。
① 言うなら   ② 言うと    ③ 言えば    ④ 言ったら

10.「わー、合格だ!友達は    、両親には今すぐ電話で知らせよう。」
① ともに    ② ともかくに  ③ ともかくとして ④ ともかくといって

11.自然は人間の生活を豊かにしてくれる    、人間に脅威を与えることもある。
① わりに    ② 反面     ③ ほど     ④ ので

12.できるだけのことはやったのに、よい結果が出さず、
叫びたい    悔しかった。
① のも     ② ほど     ③ のほど    ④ なら

13.収入が    少ないほど、エンゲル係数は高くなる。
① 多ければ   ② 少なければ  ③ 多くて    ④ 少なくて

14.「ゴールデンウィークにどこへ行かない?」「どうだね。電車で行くかどうか    、宿泊先の予約しておこう。」
① として    ② といえば   ③ はともかく  ④ にして

15.農業の技術が進歩し一年中さまざまな作物が取れるようになった    、季節感がなくなってきた。
① ともかく   ② 反面     ③ のに     ④ ほどに

16.冬の北海道は息も凍る    寒い。
① のに     ② ばかり    ③ だけ     ④ ほど

17.ジョンさんは一週間だけの日本滞在だったのに、京都    札幌の雪祭りにも行ったそうだ。
① だけか    ② ほかに    ③ ばかりか   ④ しか

18.結婚式に誰を招待するか    式場だけは予約しておいたほうがいいね。
① の反面    ② するほど   ③ について   ④ はともかく

19.部下が残業しているのに、上司である自分が帰る    
① ほどではない ② ところだ   ③ べきでなはい ④ べきだ

20.外国での一人暮らしは、泣きたい    寂しくなることがある。
① ので     ② のに     ③ だけに    ④ ほど

21.この学校では日本語    、日本事情や日本の文化も学ぶことができる。
① ばかりに   ② でなく    ③ ばかりでなく ④ ほかに

22.すべての語句を理解できた    、日本の文学作品を一冊読み終えた。
① からには   ② かはともかく ③ のでは    ④ かでは

23.あなたは学生なのだから遊ぶ前にやる    ことがたくさんあるでしょう。
① なければ   ② べきではない ③ べき     ④ ほかない

24.霧が濃くて、1メートル先も見えない    だった。
① ほど     ② ばかりに   ③ くらいに   ④ ので

25.あのレストランは、味はいい    サービスもいい。
① ほどでなく  ② くらいでなく ③ ばかりでなく ④ ので

26.私の日本語学校はウィークデー    週末にも補習の授業がある。
① とともに   ② はもちろん  ③ から     ④ でも

27.政治家は国民の声に耳を    
① かたむけべきだ         ② かたむけるべきだ
③ かたむけたべきだ        ④ かたむけてべきだ

28.日本語は勉強すればする    難しいと感じる。
① から     ② くらい    ③ ほど     ④ なら

29.彼女は誰にでも親切な    いつでも笑顔をたやさない。
① だけか    ② だけで    ③ ばかりか   ④ ばかりで

30.私の大学は日曜    もとより、土曜日も授業もない。
① に      ② と      ③ を      ④ は

31.会社は倒産するのだろうか。支払われる    給料を今月はまだ受け取っていない。
① なら     ② べき     ③ だけの    ④ つもりの

32.先進国    多くの問題を抱えている。
① ほど     ② ほどに    ③ くらい    ④ くらいに

33.いつもと違う道を歩いた    、道に迷ってしまった。
① ばかりで   ② ばかりに   ③ ところを   ④ ところに

34.陳さんは日本語を話すこと    日本語できちんとした文章を書くこともできる。
① はもう    ② はもちろん  ③ もちろん   ④ ほど

35.遊んでばかりいて両親からの仕送りを止められてしまった。
アルバイトをする    
① ほかしかたがない ② ならしかたがない ③ ばかりだ ④ ものではない

36.能力がない人    、人に自慢したがる。
① くらい    ② ばかりに   ③ ほどに    ④ ほど

37.社長に直接自分の意見を言った    、部長ににらまれた。
① だけに    ② ばかりに   ③ のに     ④ くらいに

38.対日非難・批判は、現在、経済    政治、社会、文化にまで及び、日本の社会システムこそ問題にすべきだ、という意見も強まっている。
① ばかりに   ② の反面    ③ ばかりでなく ④ ほど

39.法務大臣の失言がマスコミで大きく報じられた。辞任する    ないだろう。
① のほか    ② よりのほか  ③ よりほか   ④ だけしかない

40.失敗を気にすればする    緊張して、余計に失敗しやすくなる。
① くらい    ② ばかりに   ③ ほどの    ④ ほど


Thứ Năm, 5 tháng 11, 2009

13課(01-40)

1.みんなの予想    、Aチームが勝った。
① が反して   ② に反して   ③ を反して   ④ は反して

2.長年の研究    基づいて、論文を書いた。
① を      ② に      ③ で      ④ から

3.たまには子供    主人と二人でフランス料理でも食べに行きたいものだ。
① どうして   ② だけで    ③ ぬきで    ④ ばかりで

4.激しい議論の応酬    、新しい法案が成立した。
① 末      ② とおり    ③ の末     ④ のとおり

5.優勝すると思っていたが期待に    結果になってしまった。
① 即して    ② 同じ     ③ 反する    ④ 逆の

6.裁判官は過去の判例    、判決を下した。
① のもとに   ② に基づいて  ③ について   ④ に対して

7.私たちの結婚式なのに、私たち    親同士が結婚式場を決めた。
① だけで    ② ぬきで    ③ よそで    ④ ぬけで

8.これはよく    結論ですから、簡単に変えることはできません。
① 考えた末   ② 考える末   ③ 考えた末の  ④ 考える末の

9.実験の結果は予期    ものとなった。
① 反した    ② の反した   ③ が反した   ④ に反した

10.昨夜の火事はストーブの消し忘れ    ものだそうだ。
① による    ② に対しての  ③ にとっての  ④ からの

11.音楽は私の生涯の友です。音楽    私の人生は考えられません。
① だけでは   ② しか     ③ ぬきには   ④ では

12.最近の果物は品種改良されていて、形    味もよい。
① ばかりならず ② しかならず  ③ ならず    ④ のみならず

13.親の期待    、子供は進学しなかった。
① と反し    ② を反し    ③ が反し    ④ に 反し

14.太陽黒点はガリレオ    はじめて望遠鏡で発見されたと言われるが、
それ以前のも中国では肉眼で観察されていた。
① よって    ② による    ③ によって   ④ がよって

15.オリーブオイル    イタリア料理は考えられません。それほどオリーブオイルはイタリア料理にとってなくてはならないものです。
① つきには   ② ばかりには  ③ ほどには   ④ ぬきには

16.あのレストランは味がいいのみならず、店も    、いつもにぎわっている。
① きれいなので ② きれいなのに ③ きたないので ④ きたないのに

17.計算を間違った原因は、コンピューターの入力ミス    
① とほかならない ② でほかならない ③ にほかならない ④ がほかならない

18.これは人間国宝の作家    、作れたものです。
① で      ② よって    ③ より     ④ によって

19.「夕べのサッカーの試合見た?」「見たよ。キーパーは最後までゴールを守り    。」
① ついたね   ② ぬきだったね ③ ぬかなかったね ④ ぬいたね

20.あのアパートは駅から近くて便利である    、自然環境にも恵まれている。
① から     ② のみで    ③ のみなら   ④ のみならず

21.国立大学に合格できたのはあなた自身が努力した    ほかならない。
① ため     ② からに    ③ のでに    ④ のにに

22.田中さん    、小林さんは来春結婚するそうだ。
① がいうと   ② がよると   ③ にいうと   ④ によると

23.
先日のニューヨークマラソンでは足に障害を持つ女性が28時間か    抜き、話題になった。
① 走る     ② 走って    ③ 走り     ④ 走った

24.タバコを吸うと、喫煙者本人    、煙を吸い込む周囲の人にも肺癌が発生する危険が高まる。
① のことも   ② のみも    ③ のみならず  ④ ばかりで

25.親が子供のしつけに厳しいのは子供を愛しているから    
① だけだ    ② しかない   ③ ばかりだ   ④ にほかならない

26.入学試験は二日間    行われた。
① わたり    ② わたって   ③ にわたって  ④ にかけて

27.悩み    あげく、会社をやめることにした。
① きった    ② ぬいた    ③ ぬった    ④ ぬく

28.親    暮らしている間、親のありがたさはなかなか分からない。
① とともで   ② ともとで   ③ にもとで   ④ のもとで

29.彼が自殺したのは、いじめられたから    
① でほかならない ② にほかならない ③ とほかならない ④ がほかならない

30.一週間    国際女性会議が開かれた。
① わたる    ② わたった   ③ わたって   ④ にわたって

31.彼女とは幼馴染だから、お互いを知り    いるよ。
① ぬいて    ② きれて    ③ とおして   ④ ついて

32.彼はフランスで一番だと言われているシェフ    修業したから、彼の作るフランス料理は一流だ。
① にもとで   ② をもとで   ③ がもとで   ④ のもとで

33.最新の理論    、新しい治療法が試みられた。
① の基づいた  ② から基づいた ③ に基づいた  ④ を基づいた

34.大地震は神戸全域    大きな被害をもたらした。
① かけて    ② わたって   ③ にかかって  ④ にわたって

35.苦労を重ね    彼は偉大な業績を残した。
① る末に    ② ている末に  ③ た末に    ④ 末に

36.その芸術家は裕福な商人の庇護    、すばらしい作品を次々生んでいった。
① のうえで   ② の末で    ③ のもとで   ④ のことで

37.彼は、自分の信念    ボランティア活動をしている。
① につき    ② からの    ③ とおり    ④ に基づき

38.この図書館にある書物はあらゆる分野    
① にかかっている ② にひろげている ③ にわたっている ④ にかけている

39.入退院を繰り返した    、とうとう彼はなくなった。
① とおり    ② だけで    ③ まま     ④ 末

40.教育の名    、子供の人権が無視されるケースが増えている。
① から     ② にとって   ③ をもとに   ④ のもとに

Thứ Tư, 4 tháng 11, 2009

12課(01-40)

1.大きな組織の一員    私ですが、自分らしさは失いたくないと思います。
① にとっての  ② に対する   ③ にすぎない  ④ についての

2.お客様のご要望    よう、社員一同努力しております。
① に対する   ② にあえる   ③ に伴う    ④ に沿える

3.私が大学をやめること    両親は反対しなかった。
① について   ② につれて   ③ にしたがって ④ に比べ

4.年を取る    、髪が薄くなってきたようだ。
① に対して   ② につれ    ③ により    ④ に沿い

5.広く見えるこの地球も太陽から見れば、一つの衛星    
① による    ② にきまっている ③ にすぎない ④ に伴う

6.ガイドライン    実施されているので、問題ないと思います。
① に対して   ② にとって   ③ に沿って   ④ につれて

7.この本は日本語の文法    分かりやすく説明してある。
① によって   ② について   ③ に対して   ④ にとって

8.いやなことも時間がたつ    忘れていくものだ。
① につれ    ② に沿い    ③ によって   ④ にして

9.万能と言われるコンピューターも人間の作り出した道具の一つ    
① となる    ② にすぎる   ③ にすぎない  ④ にきまっている

10.授業中私語をするのは、先生    失礼です。
① にとって   ② につれて   ③ に対して   ④ にしたがって

11.準備中    しばらくお待ちください。
① にして    ② に対して   ③ にも     ④ につき

12.現代の高校生    ポケベルは生活必需品となっている。
① にとって   ② に対して   ③ にすぎない  ④ によって

13.そのプロジェクトは、まだ計画段階    。実行するかどうかは検討中だ。
① にきまっている ② にすぎない ③ にすぎる   ④ による

14.店員はお客    、丁寧な言葉を使います。
① にとって   ② によって   ③ に対して   ④ に比べ

15.絶対安静    面会謝絶。
① につき    ② につれ    ③ にきわめ   ④ について

16.祖父母    、孫は目の中に入れても痛くないほどかわいい。
① に対しては  ② によっては   ③ にとっては  ④ については

17.かぎは、あの財布を出したとき、落とした    
① にすぎない  ② にわかる   ③ に相違ない  ④ にきまる

18.洋服は活動的である。それ    着物は動きにくい。
① にとって   ② によって   ③ につき    ④ に対して

19.嬉しいに    、悲しいに    、彼は酒を飲む。
① つれ/つれ  ② つき/つき  ③ つけ/つけ  ④ より/より

20.この本の言語表現は日本人    難しいのだから、外国人にはなかなか理解できないと思う。
① にとっては  ② にとっても  ③ に対しては  ④ に対しても

21.このバッグは、田中さんの    。前に持っているのを見たことがある。
① に相違ない  ② そうだ    ③ にかわりない ④ に違う

22.ある高校では、制服    反発が強い。
① にとって   ② によって   ③ に対する   ④ にかける

23.田舎の風景をテレビで見る    、故郷が思い出される。
① にとり    ② により    ③ について   ④ につけ

24.環境問題は国民一人一人    大きな問題だ。
① にとっても  ② によっても  ③ に対するも  ④ に沿っても

25.電気が消えているから、もう寝てしまった    
① にわかっている ② に相違ある ③ に相違ない  ④ に違う

26.彼女の英語の発音はイギリス人のようだ。
彼女はイギリスに住んでいたことがある    
① に違いない  ② にすぎない  ③ によっている ④ にわかっている

27.都会の騒音を聞く    、故郷の静かさが懐かしい。
① にとっても  ② につけても  ③ によっても  ④ につれても

28.高齢化    社会福祉の充実が課題となってきている。
① について   ② につけ    ③ に伴い    ④ にかかわり

29.犯人は窓から入った    。窓の下に、足跡が残っている。
① にすぎない  ② に相違ない  ③ に違う    ④ にきまった

30.彼は私と目をあわせようとしない。彼はうそをついている    
① にすぎない  ② にわかる   ③ に違いない  ④ そうだ

31.ピアノの音を聞く    、音楽家になることを夢見ていた若いころを思い出す。
① につれ    ② について   ③ に対し    ④ につけ

32.円高    、海外旅行に出かける人が増えた。
① にともに   ② によれば   ③ に伴って   ④ にかわって

33.カリキュラム    、授業は進められる。
① に沿って   ② にとって   ③ に対して   ④ に加えて

34.彼女は昨日夜遅くまで起きていた    。とても眠そうだ。
① に違う    ② にそうない  ③ に違いない  ④ にすぎない

35.一生懸命勉強する    日本語がおもしろくなってきた。
① によって   ② に対して   ③ について   ④ につれて

36.不況    、ホームレスの人が増えたそうだ。
① につき    ② につけて   ③ に伴って    ④ に対して

37.川    、工場が立ち並んでいる。
① によって   ② に近づく   ③ にこえて   ④ に沿って

38.早寝早起きのAさんのことだから、
この時間にはもう寝ている    
① にすぎない  ② にきわまる  ③ に違いない  ④ にそうだ

39.電車が北のほうに進む    窓の外には田園風景が広がってきた。
① につき    ② に対し    ③ につけ    ④ につれ

40.都市化    、交通渋滞などさまざまな問題が起きている。
① に対して   ② に伴って   ③ に比べて   ④ につけて

Thứ Tư, 28 tháng 10, 2009

11課(01-40)

1.彼は一流の料理人だ。彼が作った料理ならおいしい    
① にわかっている ② にきまった ③ にきまっている ④ に違っている

2.彼は、今住んでいる家    、マンションも持っていて、人に貸している。
① に対し    ② にとって   ③ に際し    ④ に加え

3.テレビ出演    、テレビ局のスタッフと打ち合わせをした。
① に対し    ② にとって   ③ に先に    ④ に先立ち

4.友達は驚いているが、私    、彼と結婚することになろうと思ってもいなかった。
① にしては   ② にして    ③ にしても   ④ にすれば

5.夜も寝ないで勉強したのだから、合格する    
① にきめている ② にきまっている ③ にきまる  ④ にきまった

6.その子は絵の才能    、音楽の才能も豊かである。
① に先立ち   ② に際し    ③ に対し    ④ に加え

7.海外旅行    、旅行先の国のビザを取っておかなければならない。
① に対し    ② にとって   ③ に先に    ④ に先立ち

8.こんな仕事は、私    あまりやりたくはありません。
① にしても   ② に沿っても  ③ に対しては  ④ としても

9.シートベルトをしないで運転したら危ない    
① にきめている ② にきまっていない ③ にきまっている ④ にきまってある

10.国会議員は選挙民の期待    、地元に駅を作ろうがんばった。
① にとって   ② に先立ち   ③ にこたえ   ④ に加えて

11.インタビュー    打ち合わせで、質問する順番を決めておいた。
① に沿う    ② に対し    ③ にして    ④ に先立ち

12.この建物は、百年たっている    、どこも壊れていないし、きれいだ。
① にしろ    ② にしては   ③ にして    ④ にても

13.そんなに塩を入れたら、塩辛い    
① にわかっている ② にきまった ③ にきまっている ④ にきめてある

14.東京都住民の要望      、学校の施設を放課後都民に開放している。
① にとって   ② に先立って  ③ にこたえて  ④ にきわめて

15.公演    、最後のリハーサルが行われた。
① について   ② に先に    ③ に先立ち   ④ に沿い

16.彼は80歳    、元気で若々しい。
① にしても   ② にして    ③ にしては   ④ にすれば

17.猫は人に飼われていても、ひもでつながれていないので、犬    自由である。
① にせよ    ② に比べて   ③ に先立ち   ④ によって

18.子供は親の期待に    として、ストレスがたまっている。
① にあう    ② しよう    ③ こたえよう  ④ 沿う

19.精神的に成長する    、人は美しくなる。
① に先立って  ② に対して   ③ に沿って   ④ にしたがって

20.この料理は一流のコックが作った    、おいしくない。
① にしても   ② にすれば   ③ にしてから  ④ にしては

21.雨の日は、晴れた日    、客の入りが悪い。
① にとって   ② に先立って  ③ に沿って   ④ に比べて

22.ファンのアンコールの声    、歌手は再びステージに登場した。
① にとって   ② にこたえ   ③ に沿い    ④ に加え

23.年月がたつ    、記憶が薄れる。
① に先立って  ② に加えて   ③ にしたがって ④ に沿い

24.ここは都心    珍しく緑が多い。
① にして    ② にしても   ③ にしては   ④ にとっても

25.郊外は都心    、空気もきれいで、住みやすい。
① にして    ② に先立って  ③ に比べて   ④ にとって

26.アパートへの入居    、契約書にサインした。
① に対して   ② に際し    ③ にとり    ④ に加え

27.話が進む    、おもしろくなる。
① に加え    ② に際し    ③ にしたがって ④ に沿って

28.友達がやった    、一緒にいたのだからあなたにも責任がある。
① によっても  ② に比べて   ③ にすれば   ④ にせよ

29.高い山は、平地    夏でも気温が低い。
① にせよ    ② にしても   ③ に比べ    ④ にとって

30.自宅の建て替え工事    、近所に挨拶に行った。
① にときに   ② によって   ③ に対して   ④ に際して

31.上流へさかのぼる    、川幅は狭くなっていった。
① によって   ② に沿って   ③ にせよ    ④ にしたがって

32.卒業式に出席するにしろ    、事前に連絡してください。
① したにしろ  ② しなかったにしろ ③ しないにしろ ④ しないしろ

33.医者になるには、大学の医学部を卒業すること    、医師国家試験にも合格しなければならない。
① によって   ② に比べ    ③ にしたがって ④ に加え

34.入学試験を受ける    、注意すべきことを先輩に助言してもらった。
① に際し    ② にしたがい  ③ に対し    ④ にとり

35.母親    、娘の家では相当のショックだったに違いない。
① に対して   ② にしたら   ③ にして    ④ によって

36.海へ行く    山へ行く    、行くなら、観光客の少ない静かなところがいいね。
① し/し    ② しろ/しろ  ③ にしろ/にしろ ④ と/と

37.彼は車の運転免許    、飛行機の操縦免許も取得した。
① に比べ    ② にしたがい  ③ によりも   ④ に加え

38.車を購入する    、保険に加入しなければならない。
① によっては  ② に際しては  ③ にしたがっては ④ に比べては

39.大学当局    
この学部にこんなに大勢志願者があるとは想像もしなかっただろう
① に比べれば  ② に沿えば   ③ によれば   ④ にすれば

40.部下がしたこと    責任は部長にもある。
① すれば    ② にすれば   ③ にせよ    ④ せよ

Thứ Hai, 26 tháng 10, 2009

10課(01-40)

1.子供__彼は、
大学生と同じくらいの学力を持っていると言われている。
①のに ②ながら ③けど ④しかし

2.新入社員歓迎会__、1年先輩の社員のひとりがスピーチをした。
①によって ②にわたって ③に沿って ④にあたり

3.この仕事は年齢や経験__、誰でもできます。
①にかわり ②にかかって ③にもかかわらず ④にはかかわりなく

4.ハムレットを演じること__、彼の右に出る者はいない。
①にかけては ②にしては ③にとっては ④によっては

5.若いときは、悪いことだとわかってい__暴走行為を繰り返していました。
①ながら ②のに ③ので ④けれど

6.会社をやめる__、やりかけの仕事を田中さんに引きついでもらった。
①にあたって ②にとって ③に沿って ④にかわって

7.事故で片腕を失った__、彼は野球をやめなかった。
①にかかわって ②にかかって ③にもかかわらず ④にはかかわりなく

8.走ること__、校内一だと思っている。
①にかけては ②にとっては ③によっては ④に応じては

9.最近の若者は日本人であり__、間違った日本語を平気で使っている。
①でも ②ながら ③だが ④けど

10.アジア__経済発展は、めざましいものがある。
①にあたって ②にいる ③にある ④における

11.最近は学歴__実力次第で出世できる企業も増えている。
①にはかかわりなく ②に基づいて ③にしたがって ④に伴って

12.骨折した田中選手__佐藤選手が出場し、見事に優勝した。
①において ②にかんして ③にかわり ④に際し

13.母親にしかられて子供はいやいや__塾に出かけた。
①して ②で ③から ④ながら

14.1996年のオリンピックはアトランタ__
おいて行われた。
①で ②に ③を ④へ

15.農業の技術の進歩に伴い、季節__かかわりなくほとんどの野菜が一年中食べられるようになった。
①を ②で ③に ④が

16.父が急用で出席できませんので、父__かわりに私が出席させていただきます。
①は ②の ③を ④に

17.世界の最高峰エベレストに比べたら、富士山__問題にならない。
①より ②ほど ③など ④から

18.江戸時代__、士農工商という身分制度があった。
①については ②にとっては ③においては ④によっては

19.本日は12歳以下に__、入場料は無料になっています。
①しか ②だけ ③のみ ④限り

20.この地方では、米に__野菜を作る農家が増えている。
①わたって ②おいて ③ともに ④かわり

21.都内の一戸建て住宅__、庶民には買えません。
①やら ②ほど ③くせに ④なんて

22.語学学習__留学の利点は大きい。
①における ②に関する ③について ④に応じる

23.この大学は日本人に__、
世界各国からの留学生を受け入れています。
①限り ②限らず ③限って ④限る

24.担当の者が出かけておりますので__私がご説明申しあげます。
①あたって ②かわって ③比べて ④限って

25.テレビ__見ていたら、明日の試験にいい成績は取れませんよ。
①なんか ②ものか ③ことか ④まいか

26.当旅行社は、お客様のご予算__宿泊先をご紹介しております。
①からの ②についた ③に対した ④に応じた

27.私が聞いた__では、彼女はまだ進学するかどうか決めていない。
①限り ②ばかり ③ほど ④こと

28.最近はペットブームで、ペットに__テレビ番組が増えている。
①かける ②関する ③沿った ④つれた

29.大切なのは、心だ。お金__いくらあっても幸せにはなれない。
①かけて ②からといって ③なんて ④といって

30.10代のころは、ロックが好きでしたが、今はうるさいだけです。年齢__、音楽の好みも変わってきました。
①について ②にかわり ③に応じて ④に沿って

31.新装開店のため本日__全品半額です。
①について ②にとって ③に対した ④に限り

32.政府は今後の経済の見通しに__、
学者たちの意見を聞いた。
①おいて ②比べて ③かわって ④関して

33.定年退職する__あたって、あらためて、同僚や家族に感謝の気持ちがわいてきた。
①で ②を ③に ④と

34.話し相手__、目上の人には丁寧な言葉、親しい友達には親しさを表す言葉を使います。
①に応じて ②に応じた ③にかえて ④にかわって

35.技術はまだ未熟ですが、熱心さ__、誰にも負けません。
①にしては ②にとっては ③によっては ④にかけては

36.彼は科学者だが、平和運動__、強い関心を持っている。
①に関しても ②にとっても ③に基づいても ④に応じても

37.新婚旅行で海外に出かける__、パスポートの有効期限を確認した。
①あげくに ②にあたって ③からといって ④において

38.住まいは、その地方の気候__特色があります。
①とともに ②に対する ③にとっての ④に応じた

39.チャーハンを作ること__、彼の右に出る者はいない。
①により ②にとっては ③にかけては ④にしては

40.主人は家では、仕事__関する話は一切しない。
①で ②が ③に ④を



Thứ Tư, 21 tháng 10, 2009

EJB là gì

EJB viết tắt của Enterprise JavaBeans ( tui không dịch )
Nó có đặc điểm cơ bản sau
+ nằm trong lòng các container chính là các application server phía server side ( điển hình là JBOSS và GlassFish )
+ chỉ giao tiếp với các chương trình viết bằng java ( có giao tiếp với webservice viết bằng Java ) miễn là thông qua JNDI các chương trình đó tìm được đúng Bean cần dùng

Về các loại Bean trong EJB
Bean thực ra tương đương với remote component trong .NET nó có 3 loại chính ( có thể chia ra làm 5 loại )

+ Stateless Session Beans : ( loại thứ nhất của Session Bean )nôm na là nó chứa các nghiệp vụ logic mà public ra bên ngoài cho phép các hệ thống khác có thể truy nhập.
+ Stateful Session Beans : ( loại thứ haicủa Session Bean ) giống với loại trên nhưng 2 loại bean này khác nhau đúng 1 điểm : nếu giữa các người dùng sử dụng đến thuộc tính của Session Beans thì với Stateful Session Beans, lần sử dụng sau vẫn lưu giá trị của lần trước đối với người dùng đó còn Stateless Session Bean thì không phân biệt

Nôm na là : nều bạn muốn xài biến Session như viết web asp thì nó chính là Stateful Session Beans, còn nếu bạn muốn biến global thì nó sẽ là Session Beans.

+ Bean Managed Persistent Entity Bean ( BMP )
+ Container Managed Persistent Entity Bean ( CMP )

Hai loại trên dùng để ánh xạ 1 bản ghi trong csdl ở đâu đó mà Application có thể giao tiếp, hoặc đơn giản chỉ là 1 csdl bằng text do bạn tự quy định. CSDL ở đây có thể là tất cả những ghi có thể lưu trữ thông tin
Hai loại này khác nhau đúng chữ "Bean" và "Container". Nó cũng nói lên đặc điểm khác nhau điển hình của chúng. đó là : BMP việc giao tiếp csdl bạn phải tự quan lý ( tự code ), CMP việc giao tiếp csdl là tự động bạn chỉ cần khai báo cấu hình cho bean này ánh xạ đến csdl
Vì vậy CMP giới hạn hơn BMP vì nó chỉ có thể giao tiếp với các hệ quản trị csdl, còn BMP do các bạn viết code nên nó có thể lưu cả trên file txt, xml, excel ... miễn lưu được dữ liệu.
Và SUN cũng khuyên chúng ta cho các client sử dụng BMP và CMP thông qua các loại Session Bean
+ Message driven Bean : loại Bean này Sun đưa vào trong hệ thống EJB theo tôi thì nó là con nuôi của Beans . Vì khi triển khai code Bean thì loại này chẳng giống gì 4 loại Bean trên. Tuy nhiên nó rất quan trọng. Các hệ thống ngân hàng giao tiếp thanh toàn tài khoản với nhau chỉ dùng message cho nên đây là đất võ của Message driven Bean.
Có 2 loại Bean trong Message driven Bean và các loại Bean này năm trong MOM (Message Oriented Middleware)
Hai loại đó là Queue và Topic. Ứng với mỗi loại Bean này MOM có 2 loại hàng đợi phù hợp cho nó.
Quese thì chỉ cho 1 client gửi 1 message tới 1 người ( ví dụ chat yahoo )
Topic thì chỉ cho 1 client gửi 1 message tới nhiều người ( ví dụ chat room trong yahoo )
miễn là người nhận có đăng ký với hàng đợi message.
----------------------------------------------------
cụ thể hoạt động của mỗi loại Bean thì rắc rối nhưng 4 loại trên thì cùng nguyên tắc, JMS có nguyên tắc khác.

Introduction to Struts


Goals After completing this chapter, the student will be able to
  • understand the MVC architecture.
  • set up an application using Struts.
  • use the Struts bean and html tags.
  • process user input from HTML forms through Struts.
Prerequisites The student will need to have an understanding of JSP, JavaBeans, and custom tags.
Objectives This chapter is presented to provide the student with an understanding of the Struts framework.

The Model-View-Controller Architecture

"Model-View-Controller" is a way to build applications that promotes complete separation between business logic and presentation. It is not specific to web applications, or Java, or J2EE (it predates all of these by many years), but it can be applied to building J2EE web applications.

The "view" is the user interface, the screens that the end user of the application actually sees and interacts with. In a J2EE web application, views are JSP files. For collecting user input, you will have a JSP that generates an HTML page that contains one or more HTML forms. For displaying output (like a report), you will have a JSP generates an HTML page that probably contains one or more HTML tables. Each of these is a view: a way for the end user to interact with the system, putting data in, and getting data out.

When the user clicks 'Submit' in an HTML form, the request (complete with all the form information) is sent to a "controller". In a J2EE web application, controllers are JavaBeans. The controller's job is to take the data entered by the user (in the HTML form that the JSP generated) and pass it to the "model", which is a separate Java class that contains actual business logic. The model does whatever it does (for instance, store the user's data in a database), then returns some result back to the controller (perhaps a new ID value from the database, or perhaps just a result code saying "OK, I'm done"). The controller takes this value and figures out what the user needs to see next, and presents the user with a new view (for instance, a new JSP file that displays a confirmation that the data they entered was successfully saved).

This all sounds like a lot of work, and it is. But there is a point to architecting applications this way: flexibility. The beauty of model-view-controller separation is that new views and controllers can be created independently of the model. The model -- again, this is pure business logic -- knows nothing of HTML forms or JSP pages. The model defines a set of business functions that only ever get called by controllers, and the controllers act as proxies between the end user (interacting with the view) and the business logic (encapsulated in the model). This means that you can add a new view and its associated controller, and your model doesn't know or care that there are now two different ways for human beings to interact with the application.

For instance, in an application with complicated data entry screens, you could add a JSP that generated a quick-edit form with default values instead of a longer, standard form. Both JSPs (the short form and the long form) could use the same controller; default values could simply be stored in the HTML

as hidden input values, and the controller would never know the difference. Or you could create a completely new interface -- a desktop application in addition to a web application. The desktop application would have views implemented in some interface-building tool, and have associated controllers for each screen. But these controllers would call the business functions in the model, just like the controllers in the web application. This is called "code reuse", specifically "business logic reuse", and it's not just a myth: it really can happen, and the Model-View-Controller architecture is one way to make it happen.


What is Struts?

Struts is a framework that promotes the use of the Model-View-Controller architecture for designing large scale applications. The framework includes a set of custom tag libaries and their associated Java classes, along with various utility classes. The most powerful aspect of the Struts framework is its support for creating and processing web-based forms. We will see how this works later in this chapter.


Struts Tags

Common Attributes

Almost all tags provided by the Struts framework use the following attributes:

Attribute Used for
id the name of a bean for temporary use by the tag
name the name of a pre-existing bean for use with the tag
property the property of the bean named in the name attribute for use with the tag
scope the scope to search for the bean named in the name attribute

Referencing Properties

Bean properties can be referenced in three different ways: simple, nested, or indexed. Shown here are examples for referencing the properties each way:

Reference Method Example
simple
nested
indexed

flavorful mix of methods

Creating Beans

Beans are created by Java code or tags.

Here is an example of bean creation with Java code:

// Creating a Plumber bean in the request scope
Plumber aPlumber = new Plumber();
request.setAttribute("plumber", aPlumber);

Beans can be created with the tag:




creating/using a bean in session scope of type java.lang.String

Most useful is the creation of beans with Struts tags:






Other Bean Tags

The Struts framework provides other tags for dealing with issues concerning copying cookies, request headers, JSP implicity defined objects, request parameters, web application resources, Struts configuration objects, and including the dynamic response data from an action. These tags are not discussed here, but it is important to be aware of their existence.










Bean Output

The and tags from the Struts framework will write bean and aplication resources properties into the current HttpResponse object.


This tag allows locale specific messages to be displayed by looking up the message in the application resources .properties file.








This tag writes the string equivalent of the specified bean or bean property to the current HttpResponse object.




Creating HTML Forms

Quite often information needs to be collected from a user and processed. Without the ability to collect user input, a web application would be useless. In order to get the users information, an html form is used. User input can come from several widgets, such as text fields, text boxes, check boxes, pop-up menus, and radio buttons. The data corresponding to the user input is stored in an ActionForm class. A configuration file called struts-config.xml is used to define exactly how the user input are processed.

The following diagram roughly depicts the use of Struts for using forms.


The Struts html tags are used to generate the widgets in the html that will be used in gathering the users data. There are also tags to create a form element, html body elements, links, images, and other common html elements as well as displaying errors. Below are the tags provided by html section of the Struts framework and a short description of each.

Note: Most of the tags for use with forms are able to take the name and property attributes representing the initial state of the widgets and for capturing the state that the widgets were in when a form submission occurred.


Generates an tag. This tag should be used inside a element.
Generates an tag and causes the Action servlet not to invoke its validate() method. This tag should be used inside a element.

Generates an .

Generates an . "Checkedness" depends upon whether the property array specified contains a corresponding value as the one specified for the multibox.


Generates a tag. This tag should be used inside of a tag.



Wheat Wood Clay
Stone Sheep
Generates html to display any errors that may have occurred during invocation of the validate() method.

Generates
.
There is a hidden element here which is invisible. :-)
Generates . Generates .

A link to an external site
Generates an html link.
Generates for use in collecting information that should not be shown on-screen.
Credit Debit

Generates a radio button ().

Generates .





Generates


Generates to submit form data entered by the user.

Name
Email Address
Generates .

Generates

Thứ Ba, 20 tháng 10, 2009

Tìm hiểu Hibernate

Chương 1.
1.1. Khái niệm Hibernate


1.1.1. ORM Framework

• Framework là một khái niệm trong phát triển phần mềm dùng để chỉ những “cấu trúc hỗ trợ được định nghĩa” mà trong đó những dự án phần mềm khác có thể được sắp xếp vào đó và phát triển.

• ORM (Object Relational Mapping) framework là một cơ chế cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng. Lập trình viên hoàn toàn không quan tâm đến loại database sử dụng, SQL, …
1.1.2. Persistence Layer

• “Tier” và “Layer”: tier thường được gắn với phần cứng về mặt vật lý (physical) còn layer thì dính đến vấn đề cách thức tổ chức bên trong của ứng dụng. Việc phân chia tier là “trong suốt” (transparent) đối với ứng dụng về mặt luận lý (logical). Điều này có nghĩa là khi ta phát triển một ứng dụng, chúng ta không bận tâm đến các thành phần (component) sẽ triển khai (deploy) ra sao mà chỉ chú ý là chúng ta sẽ tổ chức ứng dụng thành những layer như thế nào.

• Peristence layer: một ứng dụng có thể được chia làm 3 phần như sau: giao diện người dùng (presentation layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ liệu (data layer). Cụ thể ra, business layer có thể được chia nhỏ thành 2 layer con là business logic layer (các tính toán nhằm thỏa mãn yêu cầu người dùng) và persistence layer. Persistence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ - Relational DBMS). Persistence sẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS.
1.1.3. Hibernate Framework

• Hibernate là một trong những ORM Framework

• Hibernate framework là một framework cho persistence layer. Như vậy, nhờ có Hibernate framework mà giờ đây khi bạn phát triển ứng dụng bạn chỉ còn chú tâm vào những layer khác mà không phải bận tâm nhiều về persistence layer nữa.

• Hibernate: là một dịch vụ lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh.

 Hibernate giúp bạn phát triển các class dùng để lưu trữ dữ liệu theo cách thức hướng đối tượng: association, inheritance, polymorphism, composition và collections
 Hibernate cho phép bạn thực hiện các câu truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc là ngôn ngữ SQL nguyên thủy cũng như là sử dụng các API.
 Hibernate được license theo LGPL (Lesser GNU Public License). Theo đó, bạn có thể thoải mái sử dụng Hibernate trong các dự án open source hoặc các dự án thương mại (commercial).
1.2. Cài đặt và sử dụng

1.2.1. Cài đặt

• Việc cài đặt Hibernate rất đơn giản. Hibernate được build thành 1 tập tin JAR. Bạn chỉ cần download tập tin này và lưu nó vào thư mục LIB của project mà bạn đang phát triển.

• Download JDBC Driver cho database (cũng được build thành 1 tập tin JAR).

• Thêm các thành phần liên quan của Hibernate vào classpath.

1.2.2. Sử dụng

• Việc sử dụng Hibernate cũng rất đơn giản. Bạn cần gì ở một persistence layer? Đó là chúng sẽ truy xuất cũng như lưu trữ dữ liệu của bạn xuống database. Về mặt vật lý, theo mô hình dữ liệu quan hệ, dữ liệu của bạn sẽ bao gồm các thực thể (entity) có quan hệ với nhau. Và khi hiện thực cụ thể hơn mức database, chúng sẽ được đại diện bởi các table, bởi các ràng buộc khóa ngoại, khóa chính, … Hibernate cũng như vậy.

• Mỗi table trong database là một object trong Hibernate. Do đó, bạn cần có một java bean cho mỗi table trong database. Các java bean này sẽ có các getters / setters và một số ngoại lệ theo quy ước của Hibernate.

• Tiếp theo để Hibernate biết một object được “ánh xạ” (mapping) như thế nào với table trong database, Hibernate yêu cầu bạn cung cấp tập tin đặc tả gọi là mapping file. Theo quy ước của Hibernate, các mapping file này có đuôi là .hbm.xml và phải hợp lệ với DTD (Document Type Definition) mà Hibernate đã đưa ra. Trong các mapping file này, bạn sẽ đặc tả các mối quan hệ giữa property của object với field của table. Tức là bạn giúp cho Hibernate hiểu “mối quan hệ giữa các object” tương ứng như thế nào với “mối quan hệ giữa các field”.

• Tiếp theo nữa, bạn cần có 1 tập tin để Hibernate bắt đầu: hibernate.cfg.xml. Có thể nói tập tin này được load lên đầu tiên khi bạn “khởi động” Hibernate. Trong tập tin này, bạn đặc tả các thông tin sau:

 SQL Dialects.
 JDBC connection property: connection (url, driver class name, user name, password, pool size).
 Hoặc là datasource property: datasource JNDI name, user name, password.
 Hibernate configuration: show sql, …
 Hibernate cache configuration.
 Hibernate transaction configuration.
 Miscellaneous configuration.
1.3. Các tập tin config

1.3.1. hibernate.cfg.xml

• Tập tin này bắt đầu bằng thẻ và kết thúc với thẻ .

• Thẻ là thẻ con của thẻ . Những thể con của thẻ được sử dụng để định nghĩa properties và resources của session-factory.

• Để định nghĩa các properties của session-factory, ta sử dụng thẻ class.

 name của thẻ property là property của session-factory. Những properties của session-factory có thể là:
o hibernate.connection.driver_class
o hibernate.connection.url
o hibernate.connection.username
o hibernate.connection.password
o hibernate.connection.pool_size
o show_sql
o dialect
o hibernate.hbm2ddl.auto
o …

 class là các giá trị của các properties của session-factory.

 Ví dụ:

com.mysql.jdbc.Driver


• Để định nghĩa resouces của session-factory, ta sử dụng

 resource là đường dẫn url của hbm.xml file.

1.3.2. hibernate.properties

Khai báo các properties trong 1 file tên là: hibernate.properties, chỉ cần đặt file này trong classpath của ứng dụng. Nó sẽ tự kiểm tra và đọc khi Hibernate khởi chạy lần đầu tiên, là khi tao 1 Configuaration object. Tương tự như hibernate.cfg.xml, hibernate.properties cũng để khai báo các thông số, nhưng hibernate.properties thường được kết hợp với spring config.
1.4. Tập tin hbm.xml – tập tin ánh xạ:


1.4.1. Cấu trúc cơ bản
• Bắt đầu bằng và kết thúc với .

• Từng bảng trong CSDL được đinh nghĩa bằng thẻ và chứa những thuộc tính (attributes):

 name: là tên của lớp đối tượng dữ liệu (data object class) (của bảng tương ứng trong CSDL).
 table: là tên của bảng trong CSDL.

• Thẻ có các thẻ con sau:

 Thẻ : để định nghĩa id của bảng. Nó có những thuộc tính sau:
o name: là tên property của đối tượng dữ liệu (data object).
o column: là tên của cột trong CSDL.
o type: là kiểu dữ liệu của cột. Chú ý: đây là một kiểu của Hibernate chứ không phải của kiểu dữ liệu của Java hay của CSDL.

 Thẻ cũng có thẻ con sau:
o Thẻ để cho biết loại id trong table của CSDL (được gàn là: no-generate, increment: được tạo ra bởi hibernate (không nên sử dụng), identity: tự động tạo ra bởi CSDL, native: chọn các kiểu tạo khác như sequence của Oracle.

 Thẻ để chỉ ra một cột bình thường, có cùng thuộc tính như thẻ ngoại trừ việc thẻ này không có thẻ con .

1.4.2. Mapping types

Mapping types là những kiểu dữ liệu mà khi khai báo ở tập tin hbm.xml sẽ dược ánh xạ tương ứng. Hibernate có một số kiểu dữ liệu sẵn có mà Hibernate đã định nghĩa, goi là Built-in mapping types. Ngoài ra, bạn cụng có thể tự định nghĩa một kiểu riêng của bạn.
1.5. org.hibernate.cfg.Configuration

1.5.1. Configure()

Sử dụng các phép ánh xạ (mappings) và các đặc tính được xác định (properties specified) trong một tài nguyên ứng dụng (application resource) được đặt tên là hibernate.cfg.xml. Nhiều người thích tập trung cấu hình Hibernate bằng cách này thay vì thêm tham số vào Configuration trong code của ứng dụng.

1.5.2. addResource(String path)

Đọc các mappings trong một application resource (sử dụng cái này khi không muốn sử dụng file .cfg.xml để config).

1.5.3. addClass(java.lang.Class class)

Đọc mapping files của class đầu vào (ví dụ, có lớp User and và có User.hbm.xml, khi sử dụng addClass(User.class) nghĩa là thêm User.hbm.xml resource file vào Configuration).

1.5.4. setProperties(java.util.Properties)

Ta có thể class, driver, user, password (,…) để truy cập vào database bằng cách sử dụng .cfg.xml file hoặc .properties file. Khi sử dụng .properties file, phải sử dụng phương thức này để config.
1.6. org.hibernate.Session

1.6.1. Cách sử dụng

//open a session
Session session = sessionFactory.openSession();
//begin a transaction
Transaction tx = session.beginTransaction();

//
//do sth with session here
//

//commit
tx.commit();
//close session
session.close();



1.6.2. Rút trích một persistence object bằng id

Ví dụ lấy ra một user bằng id:

User user = session.get(User.class, new Long(100));



Nếu chúng ta sử dung phương thức này để lấy User với cùng id trong cùng session, phương thức này sẽ trả về một instance của User (không phải 2 instance).

Ví dụ:

User user1 = session.get(User.class, new Long(100));
User user2 = sessoon.get(User.class, new Long(100));



=> user1= user2

Ta có thể rút trích bằng phương thức load(). Sự khác biệt giữa phương thức load() và get() là ta có thể không rút trinh một đối tượng được trả về bởi phương thức load() khi session đã bị đóng (close).

1.6.3. lock()

Sau khi lấy một đối tượng từ CSDL, ta đóng session lại. Cái việc này sẽ làm cho đối tượng trở thành intacnce bị tách biệt (detached instance). Nó có thể được kết hợp lại (reassociated) với Session mới bằng cách gọi lock(). Phương thhức này sẽ ném ra một ngoại lệ là HibernateException khi nó không thể tìm thấy id trong CSDL bằng với id của đối tượng. HibernateException cũng sẽ bị ném khi bạn thay đổi id của đối tượng sau khi kết hợp lại.

Ví dụ:

Session session = sessionFactory.openSession();
User user = (User) session.get(User.class, new Long(100));
Session.close(); //user becomes detached

Session session2 = sessionFactory.openSession(); //another session
session2.lock(user, LockMode.NONE); //reassociated



1.6.4. Updating persistence objects

Các đối tượng được rút trích bởi phương thức session.load() hay session.get() đã được kết hợp với CSDL. Chúng ta chỉ cần set những giá trị mới và commit cái transaction để update. Objects that are reassociated are also the same.

Ví dụ:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, new Long(100));
user.setName(“ABC”);
tx.commit();
session.close();



Detached objects có thể thường được cập nhật bởi phương thức update(). Các đối tượng được cập nhật cũng được kết hợp lại với session mới.

Ví dụ:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, new Long(100));
user.setName(“ABC”);
tx.commit();
session.close();

// pretend that user has 2 properties, first is
// name, second is password; and the values by
// roster are “AAA” and “BBB”.
user.setName(“ABC”);//new name value
Session session2 = sessionFactory.openSession();
tx = session2.beginTransaction();
session2.update(user); //update and reassociated
user.setPassword(“EFG”);
tx.commit();
session2.close();

//the new values of user in turn of name and password are “ABC” and “EFG”



Một StaleStateException sẽ được ném khi ta cập nhật một đối tượng không tồn tại.

1.6.5. Insert

Để insert một đối tượng vào CSDL, ta sử dụng phương thức save(). Sau khi gọi phương thức này, đối tượng sẽ được kết hợp lại với session.

Ví dụ:

User user = new User();
user.setId(120);
user.setName(“Name”);
user.setPassword(“Password”);
Session session = sessionFactory.openSession();
Transaction tx = Session.beginTransaction();
session.save(user);
user.setName(“NewName”);
tx.commit();
session.close();
/* after executing the code above, in database, there is a row containing values as follow: id = 120, name = “NewName”, password = “Password” */



1.6.6. Delete

Để delete một dòng trong CSDL, ta phải đưa ra một đối tượng tương ứng với bảng trong CSDL. Nhưng ta không cần phải đưa hết giá trị vào các thuộc tính của đối tượng, ta chỉ cần set cái id của đối tượng. Phương thức này sẽ ném ra một ngoại lệ (StaleStateException) khi ta muốn xóa một đối tượng có id mà id này ko tồn tại trong CSDL.

Ví dụ:

User user = new User();
User.setId(100);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.delete(user);
tx.commit();
session.close();
1.6.7. Ngoại lệ ConstraintViolationException
Khi bạn có gắng để save, update, delete những đối tượng mà sẽ xâm phạm các ràng buộc CSDL (như duplicate identifier, not-null constraint, unique constraint), ngoại lệ ConstraintViolationException sẽ được ném ra.

1.7. org.hibernate.Transaction

1.7.1. Understanding database transactions

• Một database transaction nhóm các thao tác truy cập dữ liệu. Một transaction sẽ kết thúc bằng một trong 2 cách sau đây: committed hoặc rolled back.

• Nếu có nhiều thao tác dữ liệu được thực thi trong một transaction, bạn phải đánh dấu chắc chắn cho từng công việc. Bạn phải start transaction, và ở 1 vài thời điểm, phải commit những thay đổi. Nếu có lỗi xảy ra (trong quá trình thực thi các thao tác hay trong lúc đang commit những thay đổi), bạn phải roll back transaction để đưa dữ liệu trở về tình trạng thích hợp. Việc này còn được gọi là transaction demarcation.

• Minh họa: tình trạng trong quá trình của một transaction

1.7.2. JDBC và JTA transactions

• Trong môi trường non-managed, JDBC API thường đánh dấu các giao tác. Bạn bắt đầu một transaction bằng cách gọi setAutoCommit(false) trong JDBC connection và kết thúc nó bằng cách gọi commit(). Đôi khi, bạn muốn ép nó rollback ngay lập tức thì có thể làm bằng cách gọi rollback().

• Trong hệ thống lưu trữ dữ liệu trên nhiều cơ sở dữ liệu, một công việc có thể truy cập đến nhiều hơn 1 kho dữ liệu. Trong trường hợp này, bạn không thể chỉ sử dụng JDBC một mình. Bạn cần phải có một transaction manager mà hỗ trợ transaction phân bố. Bạn có thể liên lạc với transaction manager bằng cách sử dụng JTA.

• Trong môi trường managed, JTA không chỉ sử dụng cho transaction phân bố mà còn sử dụng cho container managed transactions (CMT). CMT cho phép bạn ngăn ngừa được những transaction gọi trong source code của ứng dụng.

• Hibernate tác động tới database thông qua JDBC Connection. Vì thế nó hỗ trợ cả APIs. Trong một ứng dụng đơn lẻ, chỉ cần JDBC transaction là đủ, còn trong một ứng dụng server thì Hibernate có thể sử dụng JTA transaction. Như vậy, code Hibernate giổng cả 2 môi trường managed và non-managed. Hibernate cung cấn nhựng lớp trừu tượng bên của nó, được dấu bên dưới transaction API. Hibernate cho phép người sử dụng mở rộng bằng cách đưa thêm vào CORBA transaction service.

1.7.3. Hibernate Transaction API

• Transaction interface cung cấp những phương thức cho một database transaction. Xem ví dụ cơ bản dưới đây:

Session session = session.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();

concludeAuction();

tx.commit();
} catch (Exception e) {
if (tx != null) {
try {
tx.rollback();
} catch (HibernateException he) {
// log he and rethrow e
}
}
throw e;
} finally {
try {
session.close();
} catch (HibernateException he) {
throw he;
}
}



• Việc gọi session.beginTransaction() là đánh dấu điểm bắt đầu của một một database transaction. Trong trường hợp là môi trường non-managed thì JDBC transaction sẽ bắt đầu trên JDBC connection. Còn trong môi trường managed, nó sẽ bắt đầu một JTA transaction mới nếu chưa có tồn tại JTA transaction, hoặc là kết hợp với JTA transaction đã tồn tại. Tất cả việc này đều được quản lý bởi Hibernate, nên bạn không cần phải quan tâm đến vấn đền này.

• Việc gọi tx.commit() đồng thời thay đổi tình trạng Session đối với cơ sở dữ liệu. Hibernate sẽ commit transaction bên dưới khi và chỉ khi beginTransaction() bắt đầu một transaction mới. Nếu beginTransaction() không bắt đầu một transaction bên dưới mới, commit() chỉ thay đởi tình trạng Session đối với cơ sở dữ liệu.

• Nếu concludeAuction() ném ra một ngoại lệ, chúng ta phải ép buộc transaction rollback bằng cách gọi tx.rollback().
1.8. Mối kết hợp (Association)

Có 2 mối kết hợp thường được sử dụng. Đó là many-to-one và one-to-many. (còn lại rất hiếm được sử dụng, đó là one-to-one và many-to-many).

1.8.1.

Có những thuộc tính và thẻ con sau:

• Child “column”: chứa tên thuộc tính để chỉ ra cái trường trong CSDL mà chứa khóa ngoại.
• Attribute “name”: tên của bảng trong CSDL mà được tham chiếu đến.
• Attribute “class”: đối tượng tương ứng của bảng trong CSDL mà được tham chiếu đến.
• Attribute “lazy”: nếu được set là true, nạp những đối tượng có liên quan từ CSDL mỗi lần nạp đối tượng này.

1.8.2.

Để chỉ ra quan hệ one-to-many, ta không chỉ đưa ra thẻ one-to-many. Mà còn có những thức khác để làm:

• Đầu tiên, ta phải sử dụng thẻ . Lớp tương ứng trong Java là Set. Ta sử dụng đối tượng này để giữ những giá trị của bảng tham chiểu đến bảng này.
• Trong thẻ này, ta phải chỉ ra các thuộc tính và các thẻ con sau:

 Attribute “name”: tên của bảng tham chiếu đến bảng này.
 Attribute “lazy”: nếu được set là true, nạp đối tượng liên quan từ CSDL mỗi lần nạp đối tượng này.
 Child “key”: có thẻ con là column mà thuộc tính name của nó chứa cái tên của trường chứa khóa ngoại của bảng mà giữ cái id của bảng này.
 Child “one-to-many”: chứa thuộc tính class để chỉ ra lớp tương ứng của bảng ngoại.
1.9. Simple Queries

1.9.1. HQL (Hibernate Query Language)

1.9.1.1. Tạo thể hiện

Để tạo một thể hiện của HQL, sử dụng session.createQuery(String)

1.9.1.2. Simple query

Ví dụ 1:

//get all records in table User.
Query query = session.createQuery("from User")



Ví dụ 2:

Query query = session.createQuery("from User u where u.name = :name");
query.setString("name", "THUAN");



Chú ý rằng User không phải là tên của bảng trong cơ sở dữ liệu. “User” là tên của đối tượng tương ứng với bảng đó. Và tên của những đối tượng này có phân biệt chữ hoa và chữ thường.

1.9.1.3. Kết bảng trong HQL

Một User chứa 1 tập hợp billings (có thuộc tính billings với accessor của nó). Trong mỗi billing, ta có 1 amount (số lượng). Bây giờ, ta muốn lấy tất cả User mà có billing chứa amount lớn hơn 100. Ta sử dũng HQL sau đây:

Query query = session.createQuery("from User user left join fetch user.billings billing where billing.amount > 100");



Chú ý rằng “billings” là tên của một thuộc tính trong cách thuộc tính của “User”. Và nó cũng có một getter và một setter cho billings.

1.9.1.4. Sub-query trong HQL

Ta muốn liệt ke toàn bộ user mà có billing (một vài user có thể không có billings). Ta sử dụng HQL sau đây:

Query query = session.createQuery("from User user where user in (select b.user from Billing B)");



Hoặc:

Query query = session.createQuery("from User user where exists (select 1 from user.billings)");



Chú ý rằng, sub-query trả về nhiều dòng. HQL cũng định nghĩa một số từ khóa để thu hẹp kết quả như: “in”, “all”, “any”, “some”.

1.9.1.5. Gom nhóm

Ví dụ:

Query query = session.createQuery("select count(*) from User");
Query query = session.createQuery("select b.user, sum(b.amount) from Billing b group by b.user");

1.9.2. Điều kiện (Criteria)

1.9.2.1. Tạo thể hiện

Để tạo một thể hiện của Criteria, sử dụng: session.createCriteria(User.class)

1.9.2.2. Add(Criterion)

Tìm trong trong các điều kiện, sử dụng phương thức: add(Criterion)

Ví dụ 1:

Criteria crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("name", "Thuan"); //tìm user có name = 'Thuan'



Những phương thức dưới đây dùng để giới hạn tìm kiếm:

eq(String colName, String value): equal
gt(String colName, String value): greater than
ge(String colName, String value): greater than or equal



và …

Ví dụ: 2: lấy tất cả billing mà có amount nhỏ hơn 100 hoặc lớn hơn 1000

Criteria crit = session.createCriteria(Billing.class);
Crit.add(Restrictions.or(
Restrictions.lt("amount", 100),
Restrictions.gt("amount", 1000));



Sử dụng điều kiện “and” bằng cách tương tự như trên.

1.9.2.3. Kết

Ví dụ dưới đây sẽ lấy tất cả Users (và Billings của họ) mà có amount (của billing) lớn hơn 100.

Criteria crit = session.createCriteria(User.class);
crit.createCriteria("billings", "bill");
crit.add(Restrictions.gt("bill.amount", new Integer(100));



1.9.3. SQL

1.9.3.1. Tạo thể hiện

Đề tạo một thể hiện của SQL Query, sử dụng:
session.createSQLQuery(String).addEntity(String)

Ví dụ:

Query query = session.createSQLQuery("select * from User").addEntity(User.class);



1.9.3.2. SQLGrammaException

Nếu ta chỉ chọn từ User nhưng ta addEntity khác (ví dụ như Billing), Ngoại lệ SQLGrammaException sẽ được ném ra.

Ví dụ:

//SQLGrammaExeption will be thrown in the following code
Query query = session.createSQLQuery("select * from User").addEntity(User.class).addEntity(Billing.class);



1.9.3.3. Chọn nhiều bảng, chỉ addEntity một bảng

Nếu ta chọn từ nhiều bảng nhưng ta chỉ addEntity một bảng. Kiểu dữ liệu trả về chỉ là Entity đó.

Ví dụ:

Query query = session.createSQLQuery("select * from Billing b left join User u on u.ID = b.userID").addEntity(User.class);
//this query will return a List of User class.



1.9.3.4. Chọn nhiều bản, addEntity nhiều hơn 1 bảng

Nếu ta chọn từ nhiều bảng và ta addEntity nhiều hơn 1 bảng. Kiểu dữ liệu trả về là một mảng đối tượng chứa class theo thứ tự được add.

Ví dụ:

Query query = session.createSQLQuery("select * from Billing b left join User u on u.ID = b.userID")
.addEntity(User.class)
.addEntity(Billing.class);
Iterator iterator = query.list().iterator();
Object[] array;
User user;
Billing billing;
While (iterator.hasNext()) {
array = (Object[]) iterator.next();
User user = (User) array[0];
Billing billing = (Billing) array[1];
System.out.println("UserID = " + user.getId() + "; BillingID = " + billing.getId());
}



1.9.3.5. Gom nhóm

Ví dụ:

Query query = session.createSQLQuery("select count(1) userCount from User")
.addScalar("userCount", Hibernate.Integer);

Query query = session.createSQLQuery("select u.*, sum(b.amount) sumAmount from Billing b left join User u on u.ID = b.userID group by u.id")
.addEntity(User.class)
.addScalar("sumAmount", Hibernate.Integer);



Kiểu dữ liệu trả về là danh sách Object[2]. Object[0] là giá trị của phương thức addScalar method, kế tiếp là giá trị của phương thức addEntity.

1.9.4. Giới hạn kết quả trả về

Để giới hạn kết quả trả về, ta sử dụng 2 phương thức: setMaxResults(int) và setFirstResult(int).
2 phương thức này đều được thi hành bởi Criteria và Query
2.1. Khái niệm bean trong Spring

2.1.1. Cách khai báo 1 bean

• Bắt đầu trong spring là bằng thẻ và kết thúc bằng . Để định nghĩa 1 bean, ta dùng tag sau:





Singleton cho biết bean này chỉ được khởi tạo lên 1 lần. Mặc định singleton="true" (vì phần lớn controller chỉ cần khởi tạo 1 lần).

2.1.2.

• Ta có thể dùng tag property để set giá trị cho attribute của lớp và dùng tag contructor-arg để chỉ định contructor mà mình muốn dùng.

• Ví dụ, ta có class MyBean như sau:

package mypring;
public class MyBean {
private int myInt;
private List myList;
public MyBean(int myInt) {
this.myInt = myInt;
}
public void setMyInt(int myInt) {
this.myInt = myInt;
}
public int getMyInt() {
return this.myInt;
}
public void setMyList(List myList) {
this.myList = myList;
}
public List getMyList() {
return this.myList;
}
}



• Ta sẽ khai báo bean như sau:



1


2



red
blue






2.1.3.

• Một bean cũng có thể chứa bean khác bằng cách dùng tag ref: