关于Spring MVC中jdbcTemplate注入问题

楼主是个新人,最近做的一个项目用到了spring mvc,所以楼主开始研究,自己写了个小的程序,其中jdbcTemplate是在配置文件中配置的,但是在程序运行的时候,获得的jdbcTemplate一直为空,经过查阅资料,终于找到原因了。

applicationContext.xml配置文件

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"
            value="oracle.jdbc.driver.OracleDriver">
        </property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
        <property name="username" value="scott"></property>
        <property name="password" value="123"></property>
    </bean>


    <bean id="jdbcTemplate"
        class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
    </bean>

这个是配置文件,经过观察,发现问题不是出在配置文件中,然后查看dao层

UserInfoDaoImpl.java

import java.util.HashMap;
import java.util.Map;


import javax.annotation.Resource;
import javax.sql.DataSource;






import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;


import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.model.UserInfo;
import org.springframework.stereotype.Service;
@Service
public class UserInfoDaoImpl extends NamedParameterJdbcDaoSupport implements UserInfoDao{


    
    @Resource
    public void setSuperJdbcTemplate(JdbcTemplate jdbcTemplate)
    {
        super.setJdbcTemplate(jdbcTemplate);
    }
    
    @Resource(name="dataSource")
    public void setSuperDataSource(DataSource dataSource){
        setDataSource(dataSource);
    }
    
    public void addUser(UserInfo user) {
// TODO Auto-generated method stub


}
    
    public int checkUser(String username, String password) {
        int count = 0;
        String sql = "select count(1) from user where username=? and password=?";
try
{
   Map<String, Object> paramMap = new HashMap<String, Object>();
   paramMap.put("username", username);
   paramMap.put("password", password);
       count = getJdbcTemplate().queryForInt(sql, paramMap);
            System.out.println(count); 
}
catch (Exception e) {
            e.printStackTrace();
        }

return count;
}


}


发现dao层的注入也是没有问题的,向上看service层和action层发现问题

UserServiceImpl.java

import org.springframework.stereotype.Service;


import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;


@Service
public class UserServiceImpl implements UserService {


    
private UserInfoDao userInfoDao = new UserInfoDaoImpl();

public UserInfoDao getUserInfoDao() {
        return userInfoDao;
    }


    public void setUserInfoDao(UserInfoDao userInfoDao) {
        this.userInfoDao = userInfoDao;
    }


    public int checkUser(String username, String password) {

int count = userInfoDao.checkUser(username, password);

return count;
}


}


在service层我new了一个dao的实例,同时给了get和set方法,但是我没有在配置文件中定义这个Bean,导致程序执行的时候并不是通过配置文件去加载这些实例,同样,给dao层注入的jdbcTemplate就为空了,action层同样new了一个service的实例,这里就不展示代码了,把改过后的代码展示一下

UserServiceImpl.java

import javax.annotation.Resource;


import org.springframework.stereotype.Service;


import com.xwtec.springmvc.user.dao.UserInfoDao;
import com.xwtec.springmvc.user.dao.impl.UserInfoDaoImpl;
import com.xwtec.springmvc.user.service.UserService;


@Service
public class UserServiceImpl implements UserService {


    @Resource
private UserInfoDao userInfoDao = new UserInfoDaoImpl();

public int checkUser(String username, String password) {

int count = userInfoDao.checkUser(username, password);

return count;
}


}


UserAction.java

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


import com.xwtec.springmvc.user.service.UserService;


@Controller
public class UserAction 
{
    @Resource
private UserService userService;

@Autowired
private HttpServletRequest request;

@RequestMapping("/user/userLogin.do")
public String userLogin()
{
String username = request.getParameter("username");
String password = request.getParameter("password");

int n = userService.checkUser(username, password);

request.setAttribute("username",username);

if(1==n)
{
return "welcome";
}
else
{
return "error";
}
}
}

改成下面这种方式之后,spring会通过@Resource注解根据name去获取对应的Bean。

楼主新人一个,有什么不对的地方欢迎指正。把问题发在这里,只是想给自己一个提醒。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值