??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
1. 对于getҎQ?/span>hibernate会确认一下该id对应的数据是否存在,首先?/span>session~存中查找,然后在二U缓存中查找Q还没有查询数据库Q数据库中没有就q回null。这个相Ҏ较简单,也没有太大的争议。主要要说明的一点就是在q个版本?/span>getҎ也会查找二~存Q?/span>
2. loadҎ加蝲实体对象的时候,Ҏ映射文g上类U别?/span>lazy属性的配置(默认?/span>true)Q分情况讨论Q?/span>
(1)若ؓtrue,则首先在Session~存中查找,看看?/span>id对应的对象是否存在,不存在则使用延迟加蝲Q返回实体的代理cd?/span>(该代理类为实体类的子c,?/span>CGLIB动态生?/span>)。等到具体用该对象(除获?/span>OID以外)的时候,再查询二U缓存和数据库,若仍没发现符合条件的记录Q则会抛Z?/span>ObjectNotFoundException?/span>
(2)若ؓfalse,pgetҎ查找序一P只是最l若没发现符合条件的记录Q则会抛Z?/span>ObjectNotFoundException?/span>
q里get?/span>load有两个重要区?/span>:
M对于get?/span>load的根本区别,一句话Q?/span>hibernate对于loadҎ认ؓ该数据在数据库中一定存在,可以攑ֿ的用代理来延迟加蝲Q如果在使用q程中发C问题Q只能抛异常Q而对?/span>getҎQ?/span>hibernate一定要获取到真实的数据Q否则返?/span>null?/span>
最后,我们分析下ؓ什么网路上那么多关于二者区别的文章不太准确Q首先可能是版本问题Q?/span>Hibernate? 本不同,q行机制不太一P其次是很多朋友只是把自q验所得与人分享,q没有经q全方位代码的检;最后就是有些技术牛人,表达比较随意。所以我希望 大家以后学习知识的时候不要盲从他信权威,一定要l合多方资料Q比较和整理Q再l过自己实践验,q样得到的知识才是真实有效的?/span>
5、ȝQ?br />
native2ascii是一个非常的好{码工Pq且转码是可逆的Q而其真正的含义ƈ非本地编码—?gt;转码为ASCII码,而是一个通用的文本文件编码{换工兗在做编码{换的时候有两类指定~码的情形,分别指输出文件编码和输入文g~码Q?font size="2">具体可以看看最佛_践部?/font>?/font>
1,看看project -- Build Automatically有没有勾?如果没有,勾上以后,clean一?重启eclipse
2,看看你的lib里面有没有不用的jar?看你?classpath文g中有没有错误的\?
3,q是最重要的一?有problems视图中查看有没有关于本项目的错误信息,一般都会有q样的话: The project cannot be built until build path errors are resolved 然后下面提示unbound classpath, 一般在.classpath中删除这些path可以了
4. 安装Tomcat?保{tomcat_home}/common/lib文g夹下有jasper-runtime.jar、jsp-api.jar、servlet-api.jar、jndi.jar几个文g。启动Eclipse,W一ơ启动会有一个配|过E,选择菜单上的window/preferencesQ选java/classpath variablesQNewd一个名为JDK_TOOLSq指向你的{jdk_home}/lib/tools.jar的环境变量?/p>
For example, we can use Regular Expression to check whether the user input is a valid Social Security number, a valid phone number or a valid email number, etc.
Regular Expressions are supported by many languages. Sun added support for regualer expression in Java 1.4 by introducing java.util.regex package. This package provides the necessary classes for using Regular Expressions in a java application. It consists of following three main classes ,
The java.util.regex package has several other features for appending, text replacement, and greedy/non-greedy pattern matching. See the JDK Documentation on java.util.regex to learn more about using regular expressions in Java.
Using this package I created a utility class to validate some commonly used data elements. My FieldsValidation class has following methods:
Validate email address using Java regex
/**
isEmailValid: Validate email address using Java reg ex.
* This method checks
if the input string is a valid email address.
* @param email String. Email
address to validate
* @return boolean: true if email address is valid, false
otherwise.
*/
public static boolean
isEmailValid(String email){
boolean isValid = false;
/*
Email format: A valid email address will have
following format:
Examples: Following email addresses will pass validation
abc@xyz.net;
ab.c@tx.gov
*/
//Initialize reg ex for email.
String expression =
“^[""w"".-]+@([""w""-]+"".)+[A-Z]{2,4}$”;
CharSequence inputStr =
email;
//Make the comparison
case-insensitive.
Pattern pattern =
Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
Matcher matcher =
pattern.matcher(inputStr);
if(matcher.matches()){
isValid =
true;
}
return isValid;
}
Update:
Read this post for a more thorough Java
regular expression to validate email address.
Validate phone number using Java reg ex.
/**
isPhoneNumberValid: Validate phone number using Java reg ex.
* This method
checks if the input string is a valid phone number.
* @param email String.
Phone number to validate
* @return boolean: true if phone number is valid,
false otherwise.
*/
public static boolean
isPhoneNumberValid(String phoneNumber){
boolean isValid =
false;
/* Phone Number format: (nnn)nnn-nnnn; nnnnnnnnnn; nnn-nnn-nnnn
Examples: Matches following phone numbers:
(123)456-7890, 123-456-7890,
1234567890, (123)-456-7890
//Initialize reg ex for phone number.
String expression =
“^""(?(""d{3})"")?[- ]?(""d{3})[- ]?(""d{4})$”;
CharSequence inputStr =
phoneNumber;
Pattern pattern = Pattern.compile(expression);
Matcher
matcher = pattern.matcher(inputStr);
if(matcher.matches()){
isValid =
true;
}
return isValid;
}
Validate Social Security Number (SSN) using Java reg
ex.
/** isSSNValid: Validate Social Security number (SSN)
using Java reg ex.
* This method checks if the input string is a valid
SSN.
* @param email String. Social Security number to validate
* @return
boolean: true if social security number is valid, false
otherwise.
*/
public static boolean
isSSNValid(String ssn){
boolean isValid = false;
/*SSN format xxx-xx-xxxx, xxxxxxxxx, xxx-xxxxxx; xxxxx-xxxx:
Examples: 879-89-8989; 869878789 etc.
*/
//Initialize reg ex for SSN.
String expression = “^""d{3}[- ]?""d{2}[-
]?""d{4}$”;
CharSequence inputStr = ssn;
Pattern pattern =
Pattern.compile(expression);
Matcher matcher =
pattern.matcher(inputStr);
if(matcher.matches()){
isValid =
true;
}
return isValid;
}
Validate a number using Java
regex.
/**isNumeric: Validate a number using Java
regex.
* This method checks if the input string contains all numeric
characters.
* @param email String. Number to validate
* @return boolean:
true if the input is all numeric, false
otherwise.
*/
public static boolean
isNumeric(String number){
boolean isValid = false;
/*Number: A numeric value will have following format:
*/
//Initialize reg ex for numeric data.
String expression =
“^[-+]?[0-9]*"".?[0-9]+$”;
CharSequence inputStr = number;
Pattern pattern
= Pattern.compile(expression);
Matcher matcher =
pattern.matcher(inputStr);
if(matcher.matches()){
isValid =
true;
}
return isValid;
}
This example demonstrates how easy it is to validate email address, ssn, phone number in Java using regular expressions. You can read more about regular expression format here .
You can download complete Java code for this class here .
Feel free to modify and use this class in your projects. Let me know if you have any questions or comments.
Enjoy.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Related posts:
Jan 10, 2008
Filed under: Java
Tags: Java, Phone number, RegEx, Regular Expression, SSN, utility, Validate email
haro:
This explanation is very helpful. Very.
One minor question: It seems that
the email validation accepts an underscore (”_”). I would have expected the
validation to reject the character, because it is not specified in
expression.
Posted on January 23rd, 2008 at 12:29 pm
Haro, the regular expression for email validation has a ‘"w’. "w stands for
“word character” and that includes [A-Z], [a-z], [0-9] and the “underscore (_)”
character. That is why if you have an “_” in your email address it will pass
this validation.
Hope that clears it a bit.
Posted on January 24th, 2008 at 2:41 pm
GDD:
Really nice article
Posted on January 27th, 2008 at 1:06 am
Regular expressions in Java…
Confused by regular expressions in Java? This brief tutorial by zparacha may help shed some light on them……
Posted on January 31st, 2008 at 2:43 am
Deliggit.com | The social sites' most interesting urls:
How To essentials - Regular expressions in Java | Deliggit.com…
zparacha.com
How to validate email, SSN, phone number in Java using Regular expressions.
This…
<!-- 资源文gl定?--> <bean id="messageSource" class="org.springframework.cont> <property name="basename" value="message-info" /> <property name="useCodeAsDefaultMessage" value="true" /> </bean> |
<!-- 国际化操?拦截?必需配置Q可以和其它国际化方式通用 --> <bean id="localeChangeInterceptor" class="org.springframework.web. /> |
<bean id="defaultUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="interceptors" ref="localeChangeInterceptor" /> <property name="order"> <value>1</value> </property> </bean> |
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"> </bean> |
<a href="?locale=zh_CN">体中?lt;/a> |
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> </bean> |
SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME |
q样Q当你的Session不过期,那么语言U类始终保持正确的说。我一直是q样子用的,我觉得还是Session的好Q老外们用了很满意?
3、基于Cookie的国际化配置
q个我就不说了,反正用的不多Q至我做的目能不用Cookie׃用CookieQ所以,ZCookie的国际化配置我就不细说了Q如果想知道怎么配置Q那?span onclick="tagshow(event)" >下蝲一个SpringQ其中的例子E序是用Cookie配置的,你自p代码OK了?
三、注意事?/font>
如果不用默认的浏览器语言国际化方式,那么拦截器一定要配置Q如果你有多个UrlMappingQ那么就每个都配上拦截器?
至于配置的LocaleResolver的名字,一定要用上面的配置中的名字localeResolver当然了,q个是默认的名字来的Q自p|成别的也可以,但是是ȝQ反正我用默认的感觉不?
在Spring中,两个最基本最重要的包?org.springframework.beans ?org.springframework.context. q两个包中的代码为Spring?em>反向控制 Ҏ(也叫?em>依赖注射Q提供了基础?BeanFactory提供了一U先q的配置机制来管理Q何种cbean(对象)Q这U配|机制考虑CQ何一U可能的存储方式?ApplicationContext建立在BeanFactory之上Qƈ增加了其他的功能,比如更容易同Spring AOPҎ整合, 消息资源处理Q用于国际化Q,事g传递,以声明的方式创徏ApplicationContextQ?可选的父上下文和与应用层相关的上下文(比如WebApplicationContextQ,以及其他斚w的增强?
而言之,BeanFactory提供了配|框架和基本的功能, ?ApplicationContext? 它增加了更强的功能,q些功能中的一些或许更加接qJ2EEq且围绕企业U应用。一般来_ApplicationContext? BeanFactory的完全超集, MBeanFactory功能和行为的描述也同栯认ؓ适用于ApplicationContext
用户有时不能定BeanFactory和ApplicationContext中哪一个在特定场合下更适合?通常大部分在J2EE环境的应用中Q?em>最好选择使用ApplicationContextQ? 因ؓ它不仅提供了BeanFactory所有的Ҏ以及它自己附加的特性,而且q提供以声明的方式用一些功能, q通常是o人满意的。BeanFactory主要是在非常x内存使用的情况下 Q比如在一个每kb都要计算的applet中)使用Q而且你也不需要用到ApplicationContext的所有特性?
q一章粗略地分ؓ两部分,W一部分包括对BeanFactory和ApplicationContext都适用的一些基本原则。第二部分包括仅仅适用于ApplicationContext的一些特?/p>
生成BeanFactory的方?br />
Beans被定义ؓ两种部v模式中的一U:singleton或non-singleton?Q后一U也别叫作prototypeQ尽这个名词用的不_因ؓ它ƈ不是非常适合Q?如果一个bean是singleton形态的Q那么就只有一?em>׃n?/em>实例存在Q?所有和q个bean定义的idW合的beanh都会q回q个唯一的、特定的实例?
如果bean以non-singletonQprototype模式部v的话Q对q个bean的每ơ请求都?em>创徏一个新的bean实例。这对于例如每个user需要一个独立的user对象q样的情冉|非常理想的?
同时向你提供了一些解册些问题的技巧?
首先解释一些Java异常处理中必L清楚的定义和机制。Java语言规范自ErrorcLRuntimeExceptionc衍生出来的Mq例都称?#8220;不可?#8221;(Unchecked)异常Q其他所有异常则UC“可检?#8221;(Checked)异常?
所谓可查异常,是指我们应该自行处理的异常。至于处理的手段Q要么加以控?try catch)Q要么通告(throws)他们有可能生。通常Q应捕捉那些已知如何处理的异常,而通告那些不知如何处理的异常?
而对那些不可查异常来_他们要么在我们的控制之外(Error)Q要么是我们首先׃该允许的情况(RuntimeException)?
至于异常的指定,Java的规则非常简单:一个方法必通告自己可能产生的所有可 查异常。编写自qҎӞq不一定要通告出方法实际可能生的每一个异常对象,要想理解什么时候必要Ҏ的throws丛句来通告异常Q就必须知道 对一个异常来_他只有可能在下面四种情况下才会生:
1、调用了可能产生异常的方法。比如BufferedReadercȝreadLineҎ。该Ҏ通告java.io.IOException异常?/font>
2、侦到一个错误,q用throw语句产生异常?
3、出C个编E错误。比如a[-1] = 0?
4、Java产生内部错误?
如果出现头两U情况之一Q必d诉打用自己方法的人:假如使用q个ҎQ可能造成一个异常的产生(卛_Ҏ头上使用throws)Q一个简单的记忆ҎQ?
只要含有throwQ就要通告throws。如果一个方法必d时处理多个异常,必d头内指出所有异常。就像下例展C的那样Q用逗号对他们进行分Ԍ
1234567 class Animation { public Image loadImage(Strint s) throws EOFException,MalformedURLException{ ………… } }
然而,我们不需要通告内部java错误Q也不应该通告自RuntimeException衍生出来的异常?
好的异常处理
好异常处理提供了处理E序错误的统一机制。事实上QJava语言通过向调用者提? 异常警告的方式而显著地提升了Y件开发中的异常处理能力。这U方式把Java语言中的“ҎQmethodQ?#8221;q行了扩展和增强Q之包括了自n的错误条 件。下面就让我们看一个例子,q个例子说明了这U情c?
以下是FileInputStream构造器之一的原型:
public FileInputStream(String name) throws FileNotFoundException Java
的方法和构造器必须声明他们在被调用时可?#8220;扔出”的异常,采用的关键字是“throws”。这U在Ҏ原型中出现的异常提示增加了编E的可靠性?
显而易见,q种方式是向Ҏ的调用者提CZ可能出现的异常条Ӟq样调用者就可以对这些异怽出适当的相应处理。以下代码示意我们是如何捕获q且处理FileNotFoundException q一异常的:
1234567891011 try { FileInputStream
fis = new FileInputStream(args[0]); // other code here ... }
catch (FileNotFoundException fnfe) { System.out.println("File: " +
args[0] + " not found. Aborting."); System.exit(1); }
Java异常处理q有其他一些优U的特性,q就是可查异常、用户定义异常和在JDK
1.4中推出的新型Java记录APIQJava Logging
APIQ。java.lang.Exception的所有子c都属于可检查异常。可查异常(checked
exceptionQ是扔出该异常的Ҏ所必须提示的异常,q种异常必须被捕h者向调用者提C。用户定义异常(User-defined
exceptionsQ是定制的异常类Q这U异常类扩展了java.lang.ExceptioncR优良的JavaE序规定定制异常装、报告和处理?
们自q有的情况。最新的Java记录APIQlogging APIQ则可以集中记录异常?/font>
不好的Java异常处理
不好的一面包括两U情况:滥用不可查异常(unchecked exceptionsQ和滥用catchall构造器{。这两种方式都得问题变得复杂v来?
有一U类别的异常属于RuntimeException的子c,q种异常不会受到 ~译器的查。比如,NullPointerException? ArrayStoreException是q种cd异常的实例。程序员可以对RuntimeExceptionq行子类化以回避查异常的限制Q从而便 于生这些异常的Ҏ为其调用者所使用?
专业的开发团队应当只允许在很的情况下才可以q样做?
W二U异常处理的陋习是catchall构造器。所谓的“catchall 构造器”是一U异常捕获代码模块,它可以处理所有扔l它的可能异常?
以下是catchall处理器的实例Q?
123456789 try { // code here with checked exceptions } catch (Throwable t) { t.printStackTrace(); }
我得承认Q我自己在编写一般程序的时候就曄用过q种技术;但是Q在~写关键E序的时候这U类型的构造器一定要避免使用Q除非他们被授权可以和中央错误处理器联合使用才可以这样做?
除此之外Qcatchall构造器不过只是一U通过避免错误处理而加快编E进度的机制?
异常处理的一个不之处是难以采用优良的错误处理策略。从低容内存状态恢复、写入错误和法错误{异常情况都不是L能得到解决的。你可以试一下@环、垃圾收集和提醒用户{常用技术来应付以上的局面?
恶劣的处理方?/strong>
和许多JavaҎ及其APIcMQJava的异常处理机制也?#8220;霸王上?#8221;cȝ滑稽错误。比方说Qؓ了扔出某个异常竟然毫不犹豫地?#8220;new”关键词ؓ其分配内存就是这L例子?
我自׃知道有多次因为犯了这U错误而在严肃的编译器面前屡屡壁。在q种情况下,我们其实都是在伺候语a而不是让语言为我们所用。还有我们碰到的OutOfMemoryErrors是异常处理的缺陗这一处理q程是:
使用finally模块关闭文gQ解析异总得到出现问题的方法和代码行。在q一 q程之内最大的~陷是需要捕获OutOfMemoryErrorQ而这一异常却ƈ不是可检查异常!x看,内存耗尽是相当常见的情况。Q何与内存使用状? 紧密相关的程序都应当捕获和处理这一错误?
使用异常时的一些徏?/strong>
1、异常控制的设计宗旨q不是用来代替一些简单的试。只有在异常情况下才使用异常Q?
2、不要过分细化异常。不要在每个语句上都加上异常处理Q最好将整个d都放在try块内。如果其中有一Ҏ作失败,可以随即攑ּd?
3、不?#8220;压制”异常。对于需要通告异常的方法,我们可以改用捕捉的方法来异常强行关闭,如果真的出现异常Q那个异怼?#8220;静悄?#8221;的忽略。如果觉得生的异常会非帔R要,必d费些功夫Q对其进行正的控制?
4、不要介意异常的传递。如果调用的Ҏ会生异常,比如readLineҎQ他们天生就能捕捉自己可能生的异常Q在q种情况下,一U更好地做法是将q些异常传递出去,而不是自己动手来捕捉它?/font>
本文 “??/a>” 博客
|
有序?/font>
|
允许元素重复?/font>
|
|
Collection
|
?/font>
|
?/font>
|
|
List
|
?/font>
|
?/font>
|
|
Set
|
AbstractSet
|
?/font>
|
?/font>
|
HashSet
|
|||
TreeSet
|
是(用二叉树排序Q?/font>
|
||
Map
|
AbstractMap
|
?/font>
|
使用key-value来映和存储数据QKey必须惟一Qvalue可以重复
|
HashMap
|
|||
TreeMap
|
是(用二叉树排序Q?/font>
|