spring+springmvc+mybatis环境搭建报错

# application.xml spring配置文件内容:

<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:config/jdbc.properties" />
<!-- 可通过注解控制事务 
<tx:annotation-driven />-->
<!-- 扫描注解类,否则找不到bean -->
<context:component-scan base-package="com.zj.service"></context:component-scan>

# springmvc-servlet.xml 文件内容:

<!-- 启用spring mvc 注解 
<context:annotation-config />-->

<!-- 设置使用注解的类所在的jar包 -->
<context:component-scan base-package="com.zj.controller"></context:component-scan>

<!--创建jdbc数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${uname}" />
    <property name="password" value="${pwd}" />
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 自动扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:com/zj/dao/*.xml"></property>
</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.zj.dao" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!-- 完成请求和注解POJO的映射 -->
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

# LoginController.java

package com.zj.controller;

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 org.springframework.web.servlet.ModelAndView;

import com.zj.entity.UserInfo;
import com.zj.service.LoginService;

@Controller
public class LoginController {

private LoginService loginService;


public LoginService getLoginService() {
    return loginService;
}

@Autowired
public void setLoginService(LoginService loginService) {
    this.loginService = loginService;
}

@RequestMapping("/login")
public ModelAndView  login(String username,String password, 
        HttpServletRequest request){

    return new ModelAndView("login");
}

 @RequestMapping("/login2") 
 public ModelAndView testLogin2(String username, String password){  
     UserInfo ui = new UserInfo();
     UserInfo result = this.loginService.find(ui);
     System.out.println("用户名:"+result.getUsername());
     // request和response不必非要出现在方法中,如果用不上的话可以去掉        
     // 参数的名称是与页面控件的name相匹配,参数类型会自动被转换     
     if (result==null) {            
         return new ModelAndView("loginError"); 
         // 手动实例化ModelAndView完成跳转页面(转发),效果等同于上面的方法返回字符串        
     }else{        
         return new ModelAndView("loginSuccess");
     }
     // 采用重定向方式跳转页面        // 重定向还有一种简单写法        
     // return new ModelAndView("redirect:../index.jsp");    }
 }

}

# LoginDao.java

package com.zj.dao;

import com.zj.entity.UserInfo;

public interface LoginDao {

public UserInfo getUserInfo(UserInfo UserInfo);

// public void addUserInfo(UserInfo UserInfo);
//
// public void updateUserInfo(UserInfo UserInfo);
//
// public void deleteUserInfo(int UserInfoId);

}

# LoginDao.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">


SELECT * FROM userinfo WHERE username=#{username} AND password=#{password}

业务实现类LoginServiceImpl.java

package com.zj.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.zj.dao.LoginDao;
import com.zj.entity.UserInfo;
import com.zj.service.LoginService;
@Service("loginService")
public class LoginServiceImpl implements LoginService{

private LoginDao loginDao; 


public LoginDao getUserDao() {
    return loginDao;
}


@Autowired
public void setUserDao(LoginDao userDao) {
    this.loginDao = userDao;
}


public UserInfo find(UserInfo userInfo) {
    return this.loginDao.getUserInfo(userInfo);
}

}

# web.xml

<?xml version="1.0" encoding="UTF-8"?>

pro
<!-- 不拦截静态文件 -->



default

/js/*

/css/*

/imgs/*

/fonts/*


<!-- Spring配置 -->


org.springframework.web.context.ContextLoaderListener




contextConfigLocation

classpath:config/applicationContext.xml

<!-- Spring MVC配置 -->

springmvc
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:config/springmvc-servlet.xml

1


springmvc
/

<!-- 配置字符集 -->



encodingFilter

org.springframework.web.filter.CharacterEncodingFilter



encoding

UTF-8





forceEncoding

true







encodingFilter

/*



30


index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

最后是错误信息:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.zj.dao.LoginDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

用测试类测试的时候没有问题,一启动tomcat就报错,求看看是哪里的问题,谢谢![![图片说明](https://img-ask.csdn.net/upload/201512/22/1450795020_467185.png)图片说明](https://img-ask.csdn.net/upload/201512/22/1450795014_103343.png)图片说明

3个回答

用mybatis的时候,Dao本来就是一个接口,,所以并不需要被实例化,,在
@Autowired
public void setUserDao(LoginDao userDao) {
this.loginDao = userDao;
}
去掉@Autowired即可

u010690143
不会写代码的程序员 再问一下,去掉之后,使用userDao调用查询方法的时候老是报空指针,是为什么
接近 4 年之前 回复
u010690143
不会写代码的程序员 不胜感激,谢谢
接近 4 年之前 回复

对应要注入的实现类没有 加注解,如dao层 @Repository 如service层 @Service

genglukuan
genglukuan 回复不会写代码的程序员: 抱歉,之前在另外的工程里面,dao层是需要注解的,不过用的是ibatis,我记错了,没有实际应用就回答你的问题,给你造成的困扰表示歉意,http://shaohan126448.iteye.com/blog/2033563个跟我之前的项目配置差不多
接近 4 年之前 回复
genglukuan
genglukuan 回复不会写代码的程序员: Dao层和service层都是需要的
接近 4 年之前 回复
genglukuan
genglukuan 回复不会写代码的程序员: Dao层没有吧。
接近 4 年之前 回复
u010690143
不会写代码的程序员 service 层加了的啊
接近 4 年之前 回复

业务层没看到service注解

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!