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容器中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix