springBoot项目搭建细节笔记1

 

1、在开发某个具体的功能时,应遵循开发顺序:持久层-业务层-控制器-前端页面。

 

2、idea对于JS代码的兼容性较差,编写了js代码但是有时候不能正常去加载,有以下方法解决:

1)idea缓存清理

2)clear - install

3)rebuild重新构建

4)重启idea和操作系统

 

3、@MapperScan注解指定当前项目中的mapper接口路径所在的位置,在项目启动的时候会自动加载所有的mapper接口相当于给每个mapper接口上加@Mapper注解   /  扫描mapper接口所在的包-->包下的所有mapper接口所动态生成的代理类交给IOC容器来管理   

 

16、@Repository     //将一个类或接口标识为一个持久层组件

 

17、在IOC容器中只能存在类所对应的bean,不能存在接口所对应的bean

 

18、@Service注解:将当前类的对象交给Spring来管理,自动创建对象以及对象的维护

 

4、xml映射文件与对应的接口进行关联。所有的映射文件需要放在resources目录下,映射文件遵循和接口的名称保持一致

 

5、在映射文件的insert标签中,useGeneratedKeys="true":设置当前标签中sql使用了自增的主键;keyProperty="id":将自增的主键的值赋给传输到映射文件中参数的某个属性(这里赋给了id),sql语句执行完成后,参数的赋值的属性就会变化 /id不再为null,而是为表中的主键id的值

 

6、MyBatis 获取参数值的两种方式:${}和 #{}

1)${} 本质字符串拼接     / 手动加单引号引入参数 引起sql注入问题

2)#{} 本质占位符赋值

 

7、编写sql语句时,注意获取传输过来的值(推荐两种常用方法)

1)参数是实体类类型的参数,以属性获取属性值

2)使用@Param注解,以注解里面的值作为键 或者使用 param1.param2为键 获取值

 

8、设置全局配置,将_自动映射为驼峰(实体类中属性命名规则是驼峰命名法,数据库中字段命名方法是_命名法):mapUnderscoreToCamelCase="true"

 

9、解决字段名和属性名不一致

a>为字段起别名,保证和属性名的一致

b>设置全局配置,将_自动映射为驼峰
       <setting name="mapUnderscoreToCamelCase" value="true"/>

c>通过resultMap设置自定义的映射关系

 

10、相关概念:ORM(Object Relationship Mapping)对象关系映射

* 对象:Java的实体类对象
* 关系:关系型数据库 / 二维数据表
* 映射:二者之间的对应关系
*
* Java概念       数据库概念
* 类                         表
* 属性                字段/列
* 对象                 记录/行

 

11、MyBatis 设置了默认的类型别名 /不区分大小写

* java.lang.Integer--> int,Integer
* int ---> _int,_Integer
* String --> string
* Map--> map

 

12、查询功能的标签必须设置 resultType 或 resultMap   //查询出来的数据所需要转化成的**实体类对象的类型/别名

resultType 设置默认的映射关系    (实体类属性与表中的字段名保持一致)
resultMap 设置自定义的映射关系 (实体类属性与表中的字段名不一致)

 

13、单元测试:每个独立的层编写完毕后需要编写单元测试方法,来测试当前的功能

 

14、 @SpringBootTest

1)替代了spring-test中的@ContextConfiguration注解,目的是加载ApplicationContext,启动 spring容器。 /  使用 IOC 容器中的组件

2)标识当前的类是一个测试类,不会随同项目一块打包

 

15、单元测试方法:可以单独独立运行,不用启动整个项目,可以做单元测试,提升了代码的测试效率

1)必须被@Test注解修饰
2)返回值必须是void
3)方法的参数列表不指定任何类型
4)方法的访问修饰符必须是public

 

19、@RestController==@Controller+@ResponseBody  //@ResponseBody表示方法的返回值作为响应体以json格式进行数据的响应给浏览器

 

20、instanceof 关键字的作用

java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。

如果是返回true,否则返回false。

使用instanceof关键字做判断时, instanceof 操作符的左右操作数必须有继承或实现关系。

21、 @ExceptionHandler(异常类型.class)

当前项目中产生的异常,被统一拦截到此注解标注的方法中,这个方法此时就充当的是请求处理方法,方法的返回值直接给前端/json数据

可以认为它是一个异常拦截器(处理器)。

 

22、session对象主要存在服务器端。可以用于保存服务器端的临时数据的对象,所保存的数据可以在整个项目中都可以通过访问来进行获取,把session中的数据看做一个共享的数据。首次登录的时候所获取的用户的数据,转移到session对象即可。/浏览器网页不关闭都有效。

 

23、拦截器(Interceptor):首先将所有的请求统一拦截到拦截器中,可以在拦截器中定义过滤的规则,如果不满足系统的设置的过滤规则,统一的处理是重新去打开login.html页面(重定向请求转发),推荐使用重定向。

 

24、在SpringBoot项目中拦截器的定义和使用。SpringBoot是依靠SpringMVC来完成的。SpringMVC提供了一个HandlerInterceptor接口,用于表示一个拦截器。首先自定义一个类,让这个类实现这个接口。

 

25、注册拦截器。

 

package com.cy.store.config;

import com.cy.store.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.List;

/**
 * 拦截器的注册及拦截路径的配置
 */
@Configuration
public class LoginInterceptorConfigure implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //配置白名单 / 不需要拦截的请求路径:存放在一个List集合中
        List<String> patterns=new ArrayList<>();
        patterns.add("/bootstrap3/**");
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        patterns.add("/web/login.html");
        patterns.add("/web/register.html");
        patterns.add("/web/product.html");
        patterns.add("/index.html");
        patterns.add("/users/reg");
        patterns.add("/users/login");

        //将自定义拦截器进行注册
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")  //  表示需要拦截的url  / 黑名单
                .excludePathPatterns(patterns);     //表示不需要拦截的url /白名单
    }
}

 

26、在配置文件中使用type-aliases-package中指定entity扫描包类让mybatis自定扫描到自定义的entity / 不区分大小写

 

27、@RequestParam注解使用

1)作用:

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

2)语法:

@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

value:参数名

required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

 

28、MultipartFile接口

MultipartFile接口是SpringMVC提供的一个接口,这个接口为我们包装了,获取文件类型的数据(任何类型的file都可以接收),

SpringBoot它又整合了SpringMVC,只需要在处理请求的方法参数列表上声明一个参数类型为 MultipartFile的参数,

然后SpringBoot自动将传递给服务器的文件数据赋值给这个参数。

 

29、mapper映射文件中的select标签中必须定义查询结果集中的数据类型是什么     resultType / resultMap

 

30、在配置文件中自定义某个变量值,方便后续修改维护

       在配置文件中定义:user.address.max-count=20

     Spring读取配置文件中数据方法之一,使用@Value注解 :@Value("${user.address.max-count}") 作用在某个变量上,此变量的值即为20

 

31、接30,配置文件属性赋值给实体类,进行属性绑定,可以直接根据指定前缀在配置文件中给实体类对象属性赋值或修改

使用注解

@ConfigurationProperties(prefix = "配置文件中的数据层级")   / 没有@EnableConfigurationProperties时,需加上@Component,表示加入到IOC容器中

@EnableConfigurationProperties({实体类.class})   /作用:1、开启属性绑定功能;2、将此类加入到IOC容器中

posted @ 2022-04-12 22:04  Lfollow  阅读(90)  评论(0编辑  收藏  举报