美文网首页
Spring test

Spring test

作者: 拼搏男孩 | 来源:发表于2020-03-18 23:16 被阅读0次

1、绝对路径、相对路径与根路径

这三个路径经常搞不清楚,今天我重新梳理一下这三个路径的区别

D:
——mycompany
     ├─ web
        ├─ page
           ├─ utils.html
     │  ├─ utils.html
     │  └─ www.html
     ├─ abc.html
     └─ utils.html

现在假设我的mycompany目录在D盘根目录下,同时这也是我的项目的根目录,在这个目录下有一个文件夹web还有两个html文件,在web目录下有两个html文件,y一个目录page,其中一个是utils.html,以web的直接目录下的utils.html为出发点来说明这三个路径的区别。

  • 绝对路径:d:/mycompany/web/utils.html这个路径就是utils.html的绝对路径,绝对路径从盘符开始。

  • 相对路径:如果我想在utils.html中增加一个指向d:/mycompany/utils.html的超链接,应该这样写

    <a href="../utils.html">utils.html</a>
    

    在这个超链接中,"../"表示上一级目录,web下的utils.html文件的上一级目录就是mycompany目录,另外"./"表示当前目录,比如www.html在utils.html文件中就可以这样写:"./www.html"或直接"www.html"。相对路径以当前文件为起点。

  • 根路径:根路径以当前项目为起点。"/web/utils.xml"。根路径实际上省去了d:/mycompany。

2、数据库防止乱码

有时候尽管我们在前端页面、请求头以及响应头中设置了UTF-8编码,返回到前台的中文字符依然是乱码,这可能与我们的数据库编码有关:

url=jdbc:mysql://localhost:3306/book?characterEncoding=utf-8

这样设置以后数据库就是utf-8编码传输数据了。

3、@Resource与@Autowired的对比

相同点:

  • @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。都可用于对对象进行装配

不同点:

  • 提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。
  • 注入方式:@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。@Resource默认按照ByName自动注入,@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource装配顺序

1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

4、spring单元测试

junit自带的单元测试不能加载spring的配置文件,所以我们需要配合spring的单元测试,我们之前已经添加过spring单元测试的依赖,所以这里直接写代码就行了。

UserDaoTest

package com.qianfeng.dao;

import com.qianfeng.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
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("classpath:spring-mybatis.xml")
public class UserDaoTest {
    @Resource
    private IUserDao userDao;
    @Test
    public void TestGetAllUsers() {
        List<User> users = userDao.getAllUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void deleteUser() {
    }

    @Test
    public void getUserById() {
        User user = userDao.getUserById(1);
        System.out.println(user);
    }

    @Test
    public void updateUser() {
    }

    @Test
    public void saveUser() {
    }
}

这个类是用来测试Dao层的,@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-mybatis.xml")这两个注解的作用是配置加载类和配置上下文。我们只配置了spring-mybatis.xml这个spring配置文件是因为不需要spring-mvc.xml这个文件,只测试dao层用不到spring-mvc.xml的配置。

  • 测试dao层只需要读取spring-mybatis.xml文件

  • 测试service层需要把service的组件扫描从spring-mvc.xml挪到spring-mybatis.xml中

  • 测试controller层使用浏览器或者postman,不使用组件测试

注意:一定要保持dao的接口名与对应的xml文件名一致,否则会出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)这种异常

5、正向工程与逆向工程

正向工程:pojo->数据库表
逆向工程:数据库表->pojo

相关文章

网友评论

      本文标题:Spring test

      本文链接:https://www.haomeiwen.com/subject/utvhyhtx.html