SpringMVC整合MyBatis测试,一直出错。。。调了好几天了!!!? 400 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

SpringMVC整合MyBatis测试,一直出错。。。调了好几天了!!!? 400 报错

优选2 2020-06-09 11:17:06 111

SpringMVC整合MyBatis测试,一直出错。。。调了好几天了!!!? 400 报错

这是整体的结构:

这是User类:

package com.baofan.ssmtest.model;

public class User {
    private Integer id;

    private String username;

    private String password;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

这是UserDao:

package com.baofan.ssmtest.dao;

import com.baofan.ssmtest.model.User;

public interface UserDao {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}



这是UserMapper.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="com.baofan.ssmtest.Dao.UserDao" >
  <resultMap id="BaseResultMap" type="com.baofan.ssmtest.model.User" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="password" property="password" jdbcType="VARCHAR" />
    <result column="age" property="age" jdbcType="INTEGER" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, username, password, age
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from user
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from user
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.baofan.ssmtest.model.User" >
    insert into user (id, username, password, 
      age)
    values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{age,jdbcType=INTEGER})
  </insert>
  <insert id="insertSelective" parameterType="com.baofan.ssmtest.model.User" >
    insert into user
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="username != null" >
        username,
      </if>
      <if test="password != null" >
        password,
      </if>
      <if test="age != null" >
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=INTEGER},
      </if>
      <if test="username != null" >
        #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null" >
        #{password,jdbcType=VARCHAR},
      </if>
      <if test="age != null" >
        #{age,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.baofan.ssmtest.model.User" >
    update user
    <set >
      <if test="username != null" >
        username = #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null" >
        password = #{password,jdbcType=VARCHAR},
      </if>
      <if test="age != null" >
        age = #{age,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.baofan.ssmtest.model.User" >
    update user
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      age = #{age,jdbcType=INTEGER}
    where id = #{id,jdbcType=INTEGER}
  </update>
</mapper>



其实上面三个都是自动生成的。

这是UserService类:

package com.baofan.ssmtest.service;

import com.baofan.ssmtest.model.User;

public interface UserService {
	public User getUserById(int id);
}



这是UserServiceImpl类:

package com.baofan.ssmtest.service.impl;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.baofan.ssmtest.dao.UserDao;
import com.baofan.ssmtest.model.User;
import com.baofan.ssmtest.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService {
	@Resource  
    private UserDao userDao;
	
	@Override
	public User getUserById(int id) {
		// TODO 自动生成的方法存根
		return this.userDao.selectByPrimaryKey(id);
	}

}



这是UserController中代码:

package com.baofan.ssmtest.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.baofan.ssmtest.service.UserService;

@Controller
public class UserController {
	@Resource
	private UserService userService;
	
	@RequestMapping("/show")
	public ModelAndView show() {
		ModelAndView mav = new ModelAndView("show");
		mav.addObject("user", userService.getUserById(1));
		return mav;
	}
}



这个是数据库和表。

然后已测试:

错误日志是(关键部分):


严重: Servlet.service() for servlet [spring] in context with path [/SSMTest] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.baofan.ssmtest.dao.UserDao.selectByPrimaryKey] with root cause
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.baofan.ssmtest.dao.UserDao.selectByPrimaryKey


这是Spring的bean配置文件:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">


	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/batis" />
		<property name="username" value="root" />
		<property name="password" value="" />
	</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/baofan/ssmtest/mapping/*.xml"></property>
	</bean>

	<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.baofan.ssmtest.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>
	
	
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

</beans>



这是SpringMVC的servlet配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 应用上下文配置  -->

	<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-->  
	<mvc:annotation-driven />

	<!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->  
	<context:component-scan base-package="com.baofan.ssmtest" />
	
	
	<!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/view/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>




不知道哪儿出错了!!!!调了好几天了。。。

XML 前端开发 Java 关系型数据库 MySQL 数据库连接 数据库 数据格式 Spring mybatis
分享到
取消 提交回答
全部回答(1)
  • 优选2
    2020-06-09 11:17:22

    mybaits的命名空间<mapper namespace="com.baofan.ssmtest .Dao.UserDao"  >

    与dao的接口 com.baofan.ssmtest .dao;不匹配

    ######

    mybaits的命名空间<mapper namespace="com.baofan.ssmtest.Dao.UserDao" >

    与dao的接口 com.baofan.ssmtest.dao;不匹配

    mapper的接口路径不对

    com.baofan.ssmtest.dao.UserDao.selectByPrimaryKey

    你把命名空间修改下看看

    ######谢谢######

    @Repository

    public interface UserDao 

    在接口上注解

    ######问题已经解决
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程