beans.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <context:annotation-config/>
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8"></property>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
     <!-- 连接池启动时的初始值 -->
 <property name="initialSize" value="1"/>
 <!-- 连接池的最大值 -->
 <property name="maxActive" value="500"/>
 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
 <property name="maxIdle" value="2"/>
 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
 <property name="minIdle" value="1"/>
  </bean>
  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     <property name="dataSource" ref="dataSource"/>
 <property name="mappingResources">
    <list>
      <value>cn/itcast/bean/Person.hbm.xml</value>
    </list>
 </property>
     <property name="hibernateProperties">
    <value>
        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
        hibernate.hbm2ddl.auto=update
        hibernate.show_sql=false
        hibernate.format_sql=false
        hibernate.cache.use_second_level_cache=true
                hibernate.cache.use_query_cache=false
             hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
      </value>
     </property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"/>
</beans>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
这是测试类:package junit.test;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.bean.Person;
import cn.itcast.service.PersonService;public class PersonServiceTest {
private static PersonService personService;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {//实例化spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
personService = (PersonService)applicationContext.getBean("personService");
} catch (RuntimeException e) {
e.printStackTrace();
}
} @Test
public void testSave() {
personService.save(new Person("小张"));
} @Test
public void testUpdate() {
Person person = personService.getPerson(1);
//....
person.setName("小丽");
personService.update(person);
} @Test
public void testGetPerson() {
Person person = personService.getPerson(1);
System.out.println(person.getName());
} @Test
public void testDelete() {
personService.delete(1);
} @Test
public void testGetPersons() {
List<Person> persons = personService.getPersons();
for(Person person : persons){
System.out.println(person.getName());
}
}}

解决方案 »

  1.   

    出现空指针异常  加断点调试
    在debug as application时Debug框上会有一些按扭,例如:
    suspend,step into ,step over,step return,drop to frame,use step filters/step debug
    他们是干什么用的,怎样使用?
    本地调试
    Java 调试器具有客户机/服务器设计,因此,它可以用来调试以本地方式(在调试器所在的工作站上)或以远程方式(在网络中的另一台计算机上)运行的程序。
    本地调试是最简单并且最常用的一种调试。完成编辑和构建 Java 程序后,可以使用工作台上的运行 > 调试...菜单项来在工作站上启动程序。以此方式启动程序将在调试器客户机与正在启动的 Java 程序之间建立连接。然后,可以使用断点、单步执行或表达式求值来调试程序。 准备调试
    可通过遵循下列准则使程序更容易调试:
    尽可能不要将多个语句放在同一行上,因为某些调试器功能部件是以行为基础来运行的。例如,不能在同一行上的多个语句上单步跳过或设置行断点。 
    如果您有源代码,则将源代码连接至 JAR 文件。 以调试方式启动 Java 程序 
    以调试方式启动程序允许您使用调试器来暂挂和继续执行程序、检查变量和对表达式进行求值。 
    要以调试方式启动 Java 程序, 
    在“包资源管理器”中,选择想要启动的 Java 编译单元或类文件。 
    选择运行 > 调试方式 > Java 应用程序。 
    或者选择调试工具栏按钮上的下拉菜单中的调试方式 > Java 应用程序。 
    现在就启动了程序,并且已启动的进程显示在“调试”视图中。 
    如果想要程序在 main 方法中停止以便您可以单步遍历它的整个执行,则创建 Java 应用程序启动配置,并选择主选项卡上的在 main 中停止复选框。 
    还可以通过选择项目而不是编译单元或类文件来调试 Java 程序。将提示您从定义 main 方法的那些类中选择一个类。(如果在项目中只找到了一个具有 main 方法的类,则会象选择了该类一样启动该类。)暂挂线程
    要暂挂正在执行的线程: 
    在“调试”视图中选择该线程。 
    单击“调试”视图工具栏中的暂挂按钮。该线程就会暂挂它的执行。将显示该线程的当前调用堆栈,并且在“调试”透视图中的编辑器中突出显示执行的当前行。 
    线程暂挂时,会自动选择该线程的顶部堆栈帧。“变量”视图显示堆栈帧的变量以及它们的值。可通过展开复杂变量以显示它们的成员的值来进一步检查复杂变量。 
    当暂挂了线程并且将光标悬浮在 Java 编辑器中的一个变量上时,就会显示该变量的值。继续执行暂挂的线程
    要继续执行暂挂的线程: 
    在“调试”视图中选择该线程或者它的堆栈帧。 
    单击“调试”视图工具栏中的继续按钮(或者按 F8 键)。线程将继续执行,但是将不再对该线程显示堆栈帧。这就清除了“变量”视图。 
    单步遍历 Java 程序的执行
    暂挂线程时,可以使用单步控制来逐行单步完成程序的执行。如果在执行单步操作时遇到了断点,则在该断点处将暂挂执行,并且该单步操作将结束。 
    单步跳过
    在“调试”视图中选择堆栈帧。该堆栈帧中的执行的当前行在“调试”透视图的编辑器中突出显示。 
    单击“调试”视图工具栏中的单步跳过按钮,或者按 F6 键。执行当前所选的行,但会在下一个可执行行上暂挂。 
    单步跳入
    在“调试”视图中选择堆栈帧。所选帧中的执行的当前行在“调试”透视图的编辑器中突出显示。 
    单击“调试”视图工具栏中的单步跳入按钮,或者按 F5 键。调用在要执行的当前所选行上的下一个表达式,而执行会在调用的方法中的下一个可执行行上暂挂。 
    单步跳入选择
    在“调试”视图中选择堆栈帧。所选帧中的执行的当前行在“调试”透视图的编辑器中突出显示。 
    在 Java 编辑器中,在执行的当前行中,将光标放置在想要单步跳入的方法的名称上。 
    单击“运行”菜单或 Java 编辑器上下文菜单中的单步跳入选择操作,或者按 Ctrl-F5 键。将继续执行,直到调用了所选择的方法为止。 
    使用过滤器单步执行 
    切换“调试”视图工具栏中的使用单步执行过滤器按钮,或者使用 Shift+F5。当将此操作切换为打开时,每个单步执行操作(单步跳过、单步跳入和单步返回)都将应用在用户首选项中定义的那组单步执行过滤器(请参阅窗口 > 首选项 > Java > 调试 > 单步执行过滤)。当调用单步执行操作时,在到达未过滤的位置或遇到断点之前,单步执行将继续。 
    运行至返回
    在“调试”视图中选择堆栈帧。所选帧中的执行的当前行在“调试”透视图的编辑器中突出显示。 
    单击“调试”视图工具栏中的运行至返回按钮,或者按 F7 键。将继续执行,直到执行当前方法中的下一个返回语句,且执行会在下一个可执行行上暂挂。 
    运行至行
    暂挂线程时,可以继续执行,直到执行指定的行为止。这是在某行暂挂执行而不用设置断点的简便方法。 
    将光标放在想要程序运行的行上。 
    从弹出菜单中选择运行至行,或者使用 Ctrl+R。程序将继续执行,而刚好在要执行的指定行之前暂挂。 
    有可能某行从来不会遇到,并且程序将不会暂挂。 
    断点和异常可导致线程在到达指定行之前被暂挂。
    检查值
    当选择了堆栈帧时,可以在“变量”视图的该堆栈帧中看到可视变量。 
    “变量”视图显示基本类型的值。可通过展开复杂变量以显示它们的成员来检查复杂变量。 对表达式求值
    当 VM 暂挂线程(由于遇到断点或单步执行代码)时,可以在堆栈帧的上下文中对表达式进行求值。 
    选择要在其中执行求值的堆栈帧。对于变量和表达式视图的详细信息窗格,求值上下文将是所选择的变量。如果未选择任何变量,则所选择的堆栈帧将为上下文。 
    可以在下列区域中输入表达式和对表达式求值: 
    显示视图 
    表达式视图的详细信息窗格 
    变量视图的详细信息窗格 
    Java 编辑器(当它正在显示源并且不是只读的时候) 
    选择要求值的表达式,并从上下文弹出菜单中选择显示、检查或执行。显示或检查求值的结果将显示在一个弹出窗口中。注意,执行不显示结果 - 只执行表达式。 
    可以通过单击弹出窗口的外部或按 Esc 来离开结果弹出窗口。通过按弹出窗口底部显示的键序列,可以将结果移至“显示”视图(如果选择了显示)或“表达式”视图(如果选择了检查)。例如,要将检查求值的结果移至“表达式”视图,按 CTRL-Shift-I。注意,当从“显示”视图使用显示操作时,结果将会写入“显示”视图而不是弹出窗口中 
    注意:在已经手工暂挂的线程中不能执行求值。远程调试
    Java 调试器的客户机/服务器设计允许您从网络中的计算机启动 Java 程序并从运行平台的工作站调试该程序。当为不能主管开发平台的设备开发程序时,这一点尤其有用。当在专用机器(如 web 服务器)上调试程序时,这一点也很有用。 
    注意:要使用远程调试,必须使用支持此功能的 Java VM。
    要以远程方式调试程序,必须能够在远程机器上以调试方式启动程序,以便它将等待来自调试器的连接。用于启动程序和连接调试器的特定技术是特定于 VM 的。基本步骤如下:
    确保正在以可用的调试信息构建 Java 程序。(可以从窗口 > 首选项 > Java > 编译器控制这些属性)。 
    构建 Java 程序后,将其安装到目标计算机。这涉及将 .CLASS 文件或 .JAR 文件复制到远程计算机上的适当的位置。 
    在远程计算机上调用 Java 程序,并使用适当的 VM 自变量来指定调试方式和调试器的通信端口。 
    使用远程启动配置来启动调试器并指定远程计算机的地址和端口。 
    应该从 VM 供应商那里获取用来设置用于进行远程调试的启动配置的更特定指示信息。
    使用远程 Java 应用程序启动配置 
    远程 Java 应用程序启动配置应在调试正在远程 VM 上运行的应用程序时使用。因为应用程序是在远程系统上启动的,所以启动配置不会指定有关 JRE、程序自变量或 VM 自变量的普通信息。然而,提供了有关连接至应用程序的信息。 
    要创建远程 Java 应用程序启动配置,执行下列操作:
    从工作台菜单栏中选择运行 > 调试...(或者从调试工具栏按钮的下拉菜单中选择调试...)来显示“启动配置”对话框。 
    在左边的配置类型列表中选择远程 Java 应用程序。 
    单击新建按钮。于是就创建了新的远程启动配置,并显示三个选项卡:连接、源和公共。 
    在连接选项卡的项目字段中,输入或进行浏览来选择用作启动的参考的项目(用于源查找)。不需要指定项目。 
    在连接选项卡的主机字段中,输入 Java 程序正在其中运行的主机的 IP 地址或域名。
    如果程序与工作台在同一台机器上运行,则输入 localhost。 
    在连接选项卡的端口字段中,输入远程 VM 正在其中接受连接的端口。通常,启动远程 VM 时就要指定此端口。 
    允许终止远程 VM 标志是一个切换开关,它确定是否在调试器中启用终止命令。如果想要能够终止正连接至的 VM,则选择此选项。 
    单击调试。启动将尝试连接至位于指定地址和端口的 VM,而结果显示在“调试”视图中。如果启动程序无法连接至位于指定地址的 VM,则会出现错误消息。 
    指定应当从 VM 供应商处获取的用于设置远程 VM 的指示信息。 
    与 VM 断开连接
    要与使用“远程 Java 应用程序”启动配置所连接至的 VM 断开连接:
    在“调试”视图中,选择启动。 
    单击视图的工具栏中的断开连接按钮。与 VM 的通信终止,而远程 VM 中的所有线程仍继续进行。尽管远程 VM 继续执行,但调试会话现在终止了。 
      

  2.   

    lZ帖这个类PersonServiceBean的代码 ,貌似LZ的hibernate配置有问题