前言:
目前兄弟们对“springmvc连接mysql会遇到哪些问题”大约比较重视,同学们都想要了解一些“springmvc连接mysql会遇到哪些问题”的相关资讯。那么小编也在网上汇集了一些有关“springmvc连接mysql会遇到哪些问题””的相关文章,希望你们能喜欢,看官们快快来学习一下吧!看这篇文章前我先给大家澄清一点撒,昨天不是说下一篇文章发表用Nginx搭载高性能负载均衡项目集群嘛,But。头条不给我机会啊,写好了准备在2017-09-20发布的,(所以只能等到2017-09-21发布了)结果,审核不通过,说是以前有人发布过,是旧闻,这就尴尬了 !还有前天写的功能点,都说是重复了,我想吐槽了。每个人都每个人的想法和技术,别人发过的就不能再发了我觉得很鸡肋,怕的是前面先写的人写的不够完整。然后第二个人想补充都没办法呢!(如下图)
排版,码了半天,给我整一个旧闻,审核不通过。前功尽弃,好了发点牢骚,大家往下看吧!
有兴趣的朋友一起学习java 可以加群---《专注JavaWeb开发》 群号:162582394注意了,以下代码可能会让你感觉到不适,没错,当我看到这些代码的时候,我说了一句,草泥马比哦,写这个项目的程序员刚毕业吧!(处处是坑,我现在在公司就主要是解决以前辞职走的那个人写的代码)一、发生的场景:最近在家休假,无聊看公司以前做的项目的时候,发现,有些问题。然后自己写一个junit测试。就发生错误!二、环境springMVC+mybatis+mysql项目中用junit测试时,总是报下面的错
先看看测试类:
package com.aidongsports.backstagemanagement.test;
import com.aidongsports.backstagemanagement.dao.UserMapper;
import com.aidongsports.backstagemanagement.entity.Users;
import com.aidongsports.backstagemanagement.service.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/config/spring-mybatis.xml"})
public class TestMyBatis {
private static Logger logger = Logger.getLogger(TestMyBatis.class);
@Resource
private UserMapper usersDao;
@Resource
private UserService userService;
@Test
public void test1() {
Users users = usersDao.getUserById(1001);
System.err.println("第一个测试"+users);
List<Users> user = userService.getAllUser("小明","男");
System.err.println("第二个测试"+user);
List<Users> user1 = usersDao.selectAllUser("小强","男");
System.err.println("第三个测试"+user1.get(0));
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("file:src/main/webapp/WEB-INF/config/spring-mybatis.xml");
System.err.println(applicationContext.toString());
}
}
运行报错如下:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.aidongsports.backstagemanagement.dao.UserMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
意思好像是spring没有注入UserMapper这个类,找了一晚上,原因是:spring-mybatis.xml配置中加载了很多mapper文件。 如下图:
但是呢UserMapper.xml中有些查询语句resultType中返回的是一个User实体,我们这里用的是别名,所以直接在resultType中写的别名。 如下图:
再但是呢mybatis类别名是配置在mybatis-config.xml这个配置中,而我的测试类中没有加载这个mybatis-config.xml文件,导致报错。如下图:
第一种解决方法:将所有mapper.xml文件中返回实体的,全部改成类全路径,不使用类别名。如下图:
第二种解决方法:在测试类中加载mybatis-config.xml配置文件。如下图
第三种解决方法:在spring-mybatis.xml配置文件 加载 mybatis-config.xml,去mybatis-config.xml中读取到类别名,这样 UserMapper.xml就可以找到对应的类。(推荐这种解决)如下图
需要注意的是:1.spring-mybatis.xml配置中的<property name="configLocation" value="file:src/main/webapp/WEB-INF/config/mybatis-config.xml"></property>使用junit测试时写的路径和实际使用tomcat跑的时候写的路径是不相同的。注意区分,使用junit测试时:如下写法
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="file:src/main/resources/mybatis-config.xml"></property> //如果文件在resources下,使用这个
<property name="configLocation" value="file:src/main/webapp/WEB-INF/config/mybatis-config.xml"></property>//如果文件在WEB-INF下,使用这个
</bean>
使用tomcat跑的时候:如下写法
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="/WEB-INF/config/mybatis-config.xml"></property>
</bean>
解决以后:贴上配置文件
spring-mybatis.xml
mybatis-config.xml
spring-mvc.xml
贴上测试类。dao层和service层就不贴了,跟平常写的代码一样
junit测试类
packaport com.aidongsports.backstagemanagement.dao.UserMapper;
import com.aidongsports.backstagemanagement.entity.Users;
import com.aidge com.aidongsports.backstagemanagement.test;
imongsports.backstagemanagement.service.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类
//@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"}) //spring-mybatis.xml文件需要在class路径下,也就是在src/main/java下面
//@ContextConfiguration(locations = {"file:src/main/resources/spring-mybatis.xml"})//spring-mybatis.xml文件需要在resources路径下
//@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/config/spring-mybatis.xml"})//spring-mybatis.xml文件需要在WEB-INF/config路径下
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/config/mybatis-config.xml","file:src/main/webapp/WEB-INF/config/spring-mybatis.xml"})
public class TestMyBatis {
private static Logger logger = Logger.getLogger(TestMyBatis.class);
@Resource
private UserMapper usersDao;
@Resource
private UserService userService;
@Test
public void test1() {
Users users = usersDao.getUserById(1001);
System.err.println("第一个测试"+users);
List<Users> user = userService.getAllUser("小明","男");
System.err.println("第二个测试"+user);
List<Users> user1 = usersDao.selectAllUser("小强","男");
System.err.println("第三个测试"+user1.get(0));
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("file:src/main/webapp/WEB-INF/config/spring-mybatis.xml");
System.err.println(applicationContext.toString());
}
}
有兴趣的朋友一起学习java 可以加群---《专注JavaWeb开发》 群号:162582394
码农不容易,小编给大家分享写博客也不容易,请多多支持,喜欢请关注头条号,每天都有功能和bug分享给大家一起学习进步,我们的目标是 ----软件攻城狮