Yan's blog
BlogJava
首頁
新文章
新隨筆
聚合
管理
posts - 0, comments - 17, trackbacks - 0
代碼重構(gòu)
來源:http://www.tkk7.com/martinx
今天無意中在springframework中見到這個函數(shù)
this
.getHibernateTemplate().findByExampl(Object obj)
以前沒注意到,看了一下源碼,原來就是Criteria中的Example.
以前代碼如下
package
martin.xpost.model;
import
martin.xpost.hibernate.UserDAO;
import
martin.xpost.util.ListUtil;
import
java.util.ArrayList;
import
java.util.List;
/** */
/**
*
@author
martin
*/
public
class
User
{
private
String id;
private
String userName;
private
String password;
private
String realName;
private
String email;
private
List blogEntities
=
new
ArrayList();
private
List rolls
=
new
ArrayList();
private
UserDAO service;
//
getter and setter
public
void
save()
{
this
.service.save(
this
);
}
public
void
remove()
{
this
.service.remove(
this
);
}
public
boolean
valid()
{
return
ListUtil.isNotEmpty(
this
.service.valid(
this
));
}
}
DAO代碼如下
package
martin.xpost.hibernate.impl;
import
martin.xpost.hibernate.UserDAO;
import
martin.xpost.model.User;
import
martin.xpost.util.ListUtil;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
org.springframework.orm.hibernate3.HibernateCallback;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import
java.util.List;
/** */
/**
*
@author
martin
*/
public
class
HibernateUserDAO
extends
HibernateDaoSupport
implements
UserDAO
{
public
void
save(User user)
{
this
.getHibernateTemplate().merge(user);
}
public
void
remove(User user)
{
this
.getHibernateTemplate().delete(user);
}
public
boolean
valid(
final
User user)
{
List list
=
(List)
this
.getHibernateTemplate().execute(
new
HibernateCallback()
{
public
Object doInHibernate(Session session)
throws
org.hibernate.HibernateException
{
Query query
=
session.createQuery(
"
from User user where user.userName=:userName and user.password=:password
"
);
query.setString(
"
userName
"
, user.getUserName());
query.setString(
"
password
"
, user.getPassword());
return
query.list();
}
}
);
return
ListUtil.isEmpty(list);
}
}
重構(gòu)
一:修改User的valid函數(shù)
public
boolean
valid()
{
return
ListUtil.isNotEmpty(
this
.service.find(
this
));
}
DAO中只負(fù)責(zé)和數(shù)據(jù)源打交道,我們將邏輯全部轉(zhuǎn)到model里面(就是邏輯太簡單了o_o)。
二:修改DAO代碼
package
martin.xpost.hibernate.impl;
import
martin.xpost.hibernate.UserDAO;
import
martin.xpost.model.User;
import
martin.xpost.util.ListUtil;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import
java.util.List;
/** */
/**
*
@author
martin
*/
public
class
HibernateUserDAO
extends
HibernateDaoSupport
implements
UserDAO
{
public
void
save(User user)
{
this
.getHibernateTemplate().merge(user);
}
public
void
remove(User user)
{
this
.getHibernateTemplate().delete(user);
}
public
List find(User user)
{
return
this
.getHibernateTemplate().findByExample(user);
}
}
這樣就簡單多了:)
Test 一下:
package
martin.xpost;
import
martin.xpost.model.User;
/** */
/**
*
@author
martin
*/
public
class
UserTest
extends
TestBase
{
public
void
testAdd()
{
User user
=
(User)
this
.getBean(
"
user
"
);
user.setUserName(
"
martin
"
);
user.setPassword(
"
1234
"
);
user.setRealName(
"
martin xus
"
);
user.setEmail(
"
martin.xus@gmail.com
"
);
user.save();
assertNotNull(user.getId());
}
public
void
testValid()
{
User user
=
(User)
this
.getBean(
"
user
"
);
user.setUserName(
"
martin
"
);
user.setPassword(
"
1234
"
);
assertTrue(user.valid());
}
public
void
testRemove()
{
User user
=
(User)
this
.getBean(
"
user
"
);
user.setUserName(
"
martin
"
);
user.setPassword(
"1234
"
);
user.remove();
assertNull(user.getId());
}
}
第三個沒有通過:(看了一下log,原來this.getHibernateTemplate().delete(user)中user必須是持久層對象,也就是說user的id不能為空。
再修改:首先判斷user.getId()是否為空,如果不為空,直接remvoe,否則,先find然后在remove.
public
void
remove(User user)
{
if
(
null
!=
user.getId()
&&
!
""
.equals(user.getId().trim()))
{
this
.getHibernateTemplate().delete(user);
}
else
{
List list
=
find(user);
if
(ListUtil.isNotEmpty(list))
for
(Object o : list)
{
this
.getHibernateTemplate().delete(o);
}
}
}
OK,測試通過!
posted on 2006-01-24
posted on 2008-02-27 16:32
xyz
閱讀(764)
評論(0)
編輯
收藏
所屬分類:
網(wǎng)絡(luò)文摘
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
web.xml學(xué)習(xí)筆記
區(qū)別.htm.html.dhtml.xhtml.shtm.shtml/ASP、JSP、PHP
如何使用Eclipse導(dǎo)入并運(yùn)行源碼
實(shí)踐中整理出tomcat集群和負(fù)載均衡
Tomcat集群與負(fù)載均衡
freemarker 點(diǎn)滴
freemarker 基本指令
學(xué)習(xí)FreeMarker(一)
acegi初體驗(yàn)
JSTL詳解--EL表達(dá)式
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
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
1
2
3
4
5
6
7
留言簿
給我留言
查看公開留言
查看私人留言
隨筆檔案
(1)
2007年12月 (1)
文章分類
(44)
ajax(2)
java ee(1)
struts(1)
他山之石(5)
我的文章(2)
網(wǎng)絡(luò)文摘(32)
設(shè)計(jì)模式(1)
文章檔案
(46)
2008年12月 (1)
2008年11月 (2)
2008年10月 (1)
2008年9月 (2)
2008年7月 (1)
2008年6月 (1)
2008年5月 (5)
2008年4月 (2)
2008年3月 (10)
2008年2月 (3)
2008年1月 (5)
2007年12月 (13)
收藏夾
(1)
MQ(1)
Adobe
adobe air
air_help
puremvc
AOP
aspectj
老資格的AOP
API
docs
java 1.4.0
java 1.5.0
java ee 5 sdk
json-lib api
servlet api
appServer
apachelounge
BI
architect-userguide
data vault
Data vault (DV) is a database modeling technique.
kettle
Pentaho Business Intelligence Platform Guides
pentaho sql download
power-architect
spagobi
SQL Power Architect
The SQL Power Architect data modeling tool was created by data warehouse designers and has many unique features geared specifically for the data warehouse architect. It allows users to reverse-engineer existing databases, perform data profiling on source databases, and auto-generate ETL metadata.
sqlpower
c
c-free
codeblocks
codelite
CodeLite IDE 是一個強(qiáng)大的開源,跨平臺的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
codelite官網(wǎng)
dev-c++
Dev-C++是一個C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
GCC
GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。
Cache
ehcache
ehcache
ehcache2.5.2 api
CMS
alfresco
DB
hsqldb
mongodb
MySQL 5.1參考手冊
mysql debugger
sqlitedeveloper
eclipse
eclipse官方網(wǎng)站
lomboz
myeclipse
中國eclipse社區(qū)
FreeMarker
FreeMarker中文文檔
freemarker官方
hibernate
Complete Hibernate 3.0 Tutorial
hibernate官方網(wǎng)站
html5
phonegap
ibatis
ibatis官方網(wǎng)站
mybatis
mybatis
ibatis --> mybatis
java
ajava
ansj 中文分詞
中文分詞
apache官方網(wǎng)站
tomcat....java很多第三方包在這里能找到!
captcha
java
java sun公司
java的創(chuàng)始者sun
javamail官方下載
jcifs
CIFS/SMB networking protocol in 100% Java
jdo
jikes
JUEL
POI quick-guide
quartz
jquery
annotator
jQuery的文本注解插件
jcanvas
jqgrid
jqgrid
jqgrid
jqmobi
jquery
jQuery autosave plug-in:rikrikrik
jQuery Cycle Plugin
是一個圖片翻轉(zhuǎn)顯示的 jQuery 插件。致力于添加影像的平穩(wěn)過渡。它支持6個不同的過渡類型而且很容易使用。
jQuery Easing Plugin
jQuery Easing Plugin 是一個簡單的為對象擴(kuò)展高級屬性和選項(xiàng)的jQuery插件。
jQuery Plugins (by malsup)
malsup 的 jquery插件。
jQuery UI.Layout
jQuery.sheet
jquery_cookie
jqueryvalidation
markitup
textarea plugin
operamasks
wijmo
ztree
js
aptana
aptana官方網(wǎng)站
Aptana是一個非常強(qiáng)大,開源,專注于JavaScript的Ajax開發(fā)IDE。它的特性包括: *JavaScript,JavaScript函數(shù),HTML,CSS語言的Code Assist功能。 *Outliner(大綱):顯示JavaScript,HTML和CSS的代碼結(jié)構(gòu)。 *支持JavaScript,HTML,CSS代碼提示,包括JavaScript 自定函數(shù) *代碼語法錯誤提示。 *支持Aptana UI自定義和擴(kuò)展。 *支持跨平臺。 *支持FTP/SFTP *調(diào)試JavaScript *支持流行AJAX框架的Code Assist功能:AFLAX,Dojo,JQuery,MochiKit,Prototype,Rico,script.aculo.us,Yahoo UI,Ext。 *Adobe AIR與iPhone開發(fā)工具 其主頁上還提供如何使用該開發(fā)工具的視頻。
boarsoft
This site has JQuery, Ext/Sencha Plugins, such as: Grid Combobox Tree
Bootstrap
Bootstrap學(xué)習(xí)筆記
box2dflash
chatroulette
國際視頻網(wǎng)站
chrome webstore
cnodejs
colorschemer
配色
Comet:基于 HTTP 長連接的“服務(wù)器推”技術(shù)
Companion.JS/debugbar
IE js調(diào)試
css3-html5
developer.mozilla docs
dhtmlx
dojo框架
Douglas Crockford's Javascript
DWR官方網(wǎng)站
http://getahead.org/dwr ;http://getahead.ltd.uk 也是指向同一個地址的
essential-js-design-patterns
extjs中文官網(wǎng)
gruntjs
hammer
htm5學(xué)習(xí)
html5
HTML5論壇
httpwatch
ietestcenter
ie官方
javascript-design-patterns
javascriptweekly
JavaScript大牛:Douglas Crockford
Josh Gertzen's blog
jquery easyui中文社區(qū)
jquery-portlets
js,adax調(diào)試?yán)鱢irebug
針對firefox的js調(diào)試器.
jsdraw2d
jshint-eclipse
jstree
jquery plugin
jsunit
kcfinder
knockoutjs
modernizr
nodejs
object-oriented-super-class-method-calling-with-javascript
processingjs
prototype
prototype API
prototype框架
pushlets
Pushlet - 開源 Comet 框架
quirksmode
peter-Paul Koch創(chuàng)建很權(quán)威很有參考價值的資源
qunitjs
qwikioffice
extjs 桌面
raphaeljs
Rapha?l ['r?fe??l] uses the SVG W3C Recommendation and VML as a base for creating graphics.
rhino
robcee
Scratchpad
script.aculo.us框架
基于prototype的ajax開發(fā)框架
selenium doc
web應(yīng)用測試工具
sproutcore
sproutcore demo
sublime_packages
sublimetext
technet.microsoft.com
technet.microsoft.com
thinwire
tortoisesvn
一個版本控制工具 可以使用SVN下載dojo,prototype等框架的源代碼(開發(fā)過程中的整個個項(xiàng)目)
yui
在線 JavaScript 挑戰(zhàn)平臺
json
FastJSON
fastjson
gjson
jackson
json
jsonlib
json-lib
json-lib
Linux
chinaunix
Fedora-8-i386-DVD.iso
Log
logback
mail server
james
mobile
appmobi
Winwap
小米手機(jī)官網(wǎng)
小米手機(jī)論壇
mysql
mysql官方網(wǎng)站
oauth
oauth
oauth
Oauth_sina_weibo
spring-security-oauth
國內(nèi)四大微博統(tǒng)一OAuth認(rèn)證、調(diào)用接口
openID
google-openid
openid.yahoo
other
editplus官方
EditPlus注冊碼在線生成
vs.net下載地址
PHP
wampserver
portal
AjaxJQueryPortlet
Hello World Portlet using Spring 3.0 Portlet MVC—Part I Submitted by Lyndsey Clevesy
infoscoop
jetspeed-1
jetspeed-2
jqportal
JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介紹
JSR 286 Portlet 的新特性,第 2 部分: 資源服務(wù)、事件與共享呈現(xiàn)參數(shù)
jsr286
liferay
liferay download
liferay-portal additional-files
orion
portal_demo
Portlet Bridge project
portlets in action downloads
report
finereport
ireport
itext
itext download
jasperforge
jasperreports api
jfreechart
jfreechart api
用友華表
Scheduler
quartz
schema
schema官網(wǎng)
Security
appscan
cas
SOA
Introduction to AquaLogic ESB Development
AquaLogic Service Bus Architecture
spring
mossle(原familly168)
Spring API 2.0
Spring Framework API 2.0
spring api 2.5.x
Spring Framework API 2.0
SpringFramework中文論壇
spring官方網(wǎng)站
spring官方論壇
使用 Spring 2.5 注釋驅(qū)動的 IoC 功能
struts
displaytag
Struts Framework-
struts2-examples
UI原型設(shè)計(jì)
axure
w3c
Document Object Model (DOM) Level 2 Events Specification
SVG
w3school
w3schools
Wap
webservice
cxf
hessian
JAX-RPC 與 JAX-WS 的比較...(IBM)
xfire
關(guān)于 JAX-RPC 的介紹..(IBM)
用JAX-RPC開發(fā)Web服務(wù)..(IBM)
xml
xstream
xstream api
使用 XStream 把 Java 對象序列化為 XML
用 JDOM 簡化 XML 編程
供應(yīng)鏈管理
china56scm
博客鏈接
infon
lyyb2001
張新杰的blog
米米1211 的個人圖書館
血戰(zhàn)八方
閔毓
好網(wǎng)站
dzone
infoq
java2s
javaeye
工作流
activiti
Activiti5基于jBPM4
fireflow
jbpm doc
jbpm web designer
jbpm官網(wǎng)
oryx
oryx-editor research
signavio
開源網(wǎng)
open-open
oschina
開源吧
招聘
中國人才熱線
大街網(wǎng)
插件下載
fckeditor
操作系統(tǒng)
Acronis Disk Director 11 硬盤分區(qū)視頻教程
構(gòu)建可伸縮的系統(tǒng)
memcached
terracotta
構(gòu)建工具
ant
graphviz
畫圖
JarAnalyzer
maven repository
Maven+Jetty+Plugin
mavenhub
mojo
mvnrepository
sonatype
maven
xmind
思維導(dǎo)圖
測試
IETest
IE官網(wǎng)
OpenSTA
Siege
Siege是一個壓力測試和評測工具,設(shè)計(jì)用于WEB開發(fā)這評估應(yīng)用在壓力下的承受能力
游戲
box2d
box2d web doc
源碼托管
github
google code
經(jīng)營
稻盛和夫官網(wǎng)
資源
Adobe Labs
在這下過開源的jseclipse插件
freemarker
freemarker
j2eewiki
jboss csdn
jboss portal
JBoss Portal提供了一個開源符合標(biāo)準(zhǔn)的門戶平臺
openid
sourceforge.net
sun down
金融/財(cái)務(wù)
quickfixj
ta-lib
搜索
最新評論
1.?re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
受教了
--zxw
2.?re: 表單form的enctype="multipart/form-data"使用體會
asdf
--asdfsd
3.?re: 表單form的enctype="multipart/form-data"使用體會
sadf
--asdfsd
4.?re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
1111
--111
5.?re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
dd
--s
Copyright ©2025 xyz Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
亚洲w码欧洲s码免费
|
eeuss影院ss奇兵免费com
|
日韩精品免费视频
|
国产成人免费片在线视频观看
|
亚洲一二成人精品区
|
一级a性色生活片久久无少妇一级婬片免费放
|
无码囯产精品一区二区免费
|
国产aa免费视频
|
亚洲人成在久久综合网站
|
国产一区二区三区免费观看在线
|
国产jizzjizz免费看jizz
|
亚洲人成7777影视在线观看
|
免费一区二区无码东京热
|
亚洲AV无码乱码在线观看性色扶
|
最新国产成人亚洲精品影院
|
一区二区三区四区免费视频
|
国产亚洲精品成人a v小说
|
色窝窝亚洲AV网在线观看
|
成人午夜免费福利视频
|
亚洲av伊人久久综合密臀性色
|
成人免费网站久久久
|
国产免费av一区二区三区
|
77777亚洲午夜久久多喷
|
51精品视频免费国产专区
|
亚洲乱码中文字幕综合
|
日日躁狠狠躁狠狠爱免费视频
|
免费黄色小视频网站
|
亚洲中文无码av永久
|
91精品导航在线网址免费
|
久久亚洲精品中文字幕三区
|
亚洲免费在线观看
|
永久黄网站色视频免费直播
|
亚洲sss综合天堂久久久
|
五月亭亭免费高清在线
|
亚洲影视一区二区
|
1000部羞羞禁止免费观看视频
|
日韩精品一区二区亚洲AV观看
|
国产va精品免费观看
|
亚洲成A∨人片在线观看无码
|
日韩免费人妻AV无码专区蜜桃
|
国产aⅴ无码专区亚洲av
|