applicationContext.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:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:jdbc="http://www.springframework.org/schema/jdbc"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">   <!-- in-memory database and a datasource -->
   <context:property-placeholder location="classpath:init.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="${datasource.driverClass}"/>
     <property name="url" value="${datasource.url}"/>
     <property name="username" value="${datasource.username}"/>
     <property name="password" value="${datasource.password}"/>
    </bean>    <!-- transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="dataSource" ref="dataSource"/>
   </bean>
   
   <bean id="userMapDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="ssm.dao.UserDao"></property>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
   </bean>
   
   <bean id="userSrverTarget" class="ssm.bo.server.UserServerImp">
    <property name="idao" ref="userMapDao"/>
   </bean>
  <!-- 
   <bean id="userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target"><ref local="userSrverTarget"/></property>
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
 --> 
  <bean id="LoginAction" class="ssm.action.Login">
  <property name="service" ref="userSrverTarget"></property>
  </bean>
</beans>

解决方案 »

  1.   

    init.propertiesdatasource.driverClass  = com.mysql.jdbc.Driver
    datasource.url  = jdbc:mysql://localhost:3306/ddtest?characterEncoding=utf8
    datasource.username     = root
    datasource.password = 123456mybatis-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>
    <settings>
    <!-- changes from the defaults -->
    <setting name="lazyLoadingEnabled" value="false" />
    </settings>
    <typeAliases>
    <typeAlias alias="User" type="ssm.entity.User"/>
    </typeAliases>
    <mappers>
    <mapper resource="ssm/sqlmap/User.xml"/>
    </mappers>
    </configuration>
      

  2.   

    User.xml
    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC 
    "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="User">
    <resultMap type="User" id="userResultMap">
    <id property="id" column="ID"/>
    <result property="name" column="NAME"/>
    <result property="password" column="PASSWORD"/>
    </resultMap>
    <select id="selectUserByName" parameterType="java.long.String" resultType="User">
    <![CDATA[
    select * from user u where u.name = #{name}
    ]]>
    </select>
    </mapper>
      

  3.   

    UserService.java
    package ssm.bo;import java.util.List;public interface UserService {
    public List selectUserByName(String name);
    }
    UserServiceImp.java
    package ssm.bo.server;import java.util.List;import ssm.bo.UserService;
    import ssm.dao.UserDao;public class UserServerImp implements UserService {
    private UserDao idao = null;
    public List selectUserByName(String name) {
    return idao.selectUserByName(name);

    }
    public UserDao getIdao() {
    return idao;
    }
    public void setIdao(UserDao idao) {
    this.idao = idao;
    }}
      

  4.   

    UserDao.java
    package ssm.dao;import java.util.List;public interface UserDao {
    public List selectUserByName(String name);
    }
    UserDaoImp.java
    package ssm.dao.imp;import java.util.List;import org.apache.ibatis.mapping.SqlMapperException;
    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import ssm.dao.UserDao;public class UserDaoImp extends SqlMapClientDaoSupport implements UserDao {

    public List selectUserByName(String name) {

       List list = this.getSqlMapClientTemplate().queryForList("selectUserByName");
       return list;
       
    }}
      

  5.   

    Login.java
    package ssm.action;import java.util.List;import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import ssm.bo.UserService;
    import ssm.entity.User;import com.opensymphony.xwork2.ActionSupport;public class Login extends ActionSupport {
    private User user = new User();
    private UserService service;
    public String execute() throws Exception {
    ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
    //service = (UserService)context.getBean("userService");
    System.out.println("-->"+user.getName());
    System.out.println("-->"+service);
    List list = service.selectUserByName(user.getName());
    for(int i=0; i<list.size(); i++){
    System.out.println(((User)list.get(i)).getId());

    }

    return "success";
    } public User getUser() {
    return user;
    } public void setUser(User user) {
    System.out.println("--------");
    this.user = user;
    } public UserService getService() {
    return service;
    } public void setService(UserService s) {
    //System.out.println("service");
    this.service = s;
    // System.out.println(s);
    //System.out.println("server-->"+service);
    //List list = s.selectUserByName("abc");
    //System.out.println(list.size());
    }}
      

  6.   

    错误信息:
    java.lang.NullPointerException
    ssm.action.Login.execute(Login.java:21)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)我的UserService 应该是注入到Action里边的吧,
    但是System.out.println("-->"+service);打印出来是NULL
    List list = service.selectUserByName(user.getName());
    请高手看看这是什么原因啊
      

  7.   

    applicationContext.xml里
    <bean id="userSrverTarget" class="ssm.bo.server.UserServerImp">
    这句的class貌似写错了吧,应该是ssm.bo.server.UserServiceImp吧
      

  8.   

    哈哈,自己决解了
    User.xml
    <?xml version="1.0" encoding="UTF-8" ?>   
    <!DOCTYPE mapper PUBLIC  
    "-//mybatis.org//DTD Mapper 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="User">
    <resultMap type="User" id="userResultMap">
    <id property="id" column="ID"/>
    <result property="name" column="NAME"/>
    <result property="password" column="PASSWORD"/>
    </resultMap>
    <select id="selectUserByName" parameterType="java.long.String" resultType="User">
    <![CDATA[
    select * from user u where u.name = #{name}
    ]]>
    </select>
    </mapper>
    <mapper namespace="ssm.dao.UserDao">
    <select id="selectUserByName" parameterType="java.lang.String" resultMap="userResultMap">