1. springboot各层介绍
一个具体的web项目:
controller层—>service层(serviceImpl实现service接口)—>mapper层—>mapper.xml文件
解释:controller层调用了service层的具体功能和方法,service层由service对应的接口和实现类组成,serviceImpl实现service的相关接口同时完成相关的业务逻辑处理。service层(serviceImpl)再调用mapper层的接口进行业务逻辑应用的处理。mapper层的接口在对应的xml配置文件中进行配置、实现以及关联,故mapper层的任务就是向数据库发送sql语句,完成数据的处理任务!
pojo层映射数据库,pojo层的一个实体类映射数据库中的一张表
model(entity)
model是模型的意思,与entity、domain、pojo类似,是存放实体的类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个model类。
主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
dao(mapper)
又被成为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。
dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中
service
业务逻辑层,完成功能的设计
和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。
service的impl是把mapper和service进行整合的文件
封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
controller
控制层,控制业务逻辑service,控制请求和响应,负责前后端交互
controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行
2. 对注解的提前说明
2.1 @MapperScan
在启动类里面做mapper扫描注解
例如:
@MapperScan(“com.code.*.mapper”)
描述:@MapperScan是MyBatis框架中的一个注解,它的作用是扫描指定包下的Mapper接口,并将这些Mapper接口注册成为Spring容器中的Bean。这样,在其他组件中可以直接通过@Autowired注解来注入Mapper接口的实例,从而在代码中方便地调用数据库操作。
通常情况下,MyBatis的Mapper接口是定义了数据库表的CRUD操作,而Mapper接口的实现由MyBatis框架动态生成。通过@MapperScan注解,可以将这些Mapper接口的实例纳入Spring容器的管理,使得在业务层或服务层可以直接注入Mapper,而不需要手动实例化。
2.2 @Controller和@RestController注解的区别
@Controller适用于传统的Spring MVC应用,返回的是视图(View)。
@RestController适用于构建RESTful风格的Web服务,返回的是数据,通常以JSON或XML格式交互。
本项目应该用@RestController注解,注解错误会报404(找不到资源)错误
2.3 对@Override的说明
@Override是Java中的一个注解(Annotation),它用于标记方法是覆盖(Override)父类或接口中的方法。
2.4 @Autowired和@Resource
在Spring Boot中,@Autowired和@Resource都是用于实现依赖注入(Dependency Injection),但它们有一些区别:
来源:
@Autowired是Spring框架提供的注解,用于实现Spring容器中Bean的自动装配。
@Resource是Java EE标准中的注解,也可以实现Bean的自动装配。
配置方式:
@Autowired可以标记在字段、构造函数、setter方法或者方法参数上,可以通过@Qualifier注解来指定具体的Bean名称或者使用@Primary注解标记首选的Bean。
@Resource可以标记在字段或者setter方法上,它默认通过名称匹配来注入Bean,如果需要指定Bean名称,可以使用name属性。
依赖查找方式:
@Autowired按照类型进行依赖查找,它会根据被注入字段或者方法参数的类型在容器中查找匹配的Bean进行注入。
@Resource也可以按照类型进行依赖查找,但它也支持按照名称进行查找。
容器兼容性:
@Autowired通常用于与Spring容器集成,它是Spring框架特有的注解。
@Resource是Java EE标准的注解,可以在Java EE容器中使用,也可以在Spring容器中使用。
应当注意的是,需要注入例如adminMapper此类接口,应当使用@Resource注解,使用@Autowired注解会使的无法识别为bean。
对bean的说明:
l 在Java中,Bean通常用于表示业务实体、配置信息、数据传输对象(DTO)等,也可以用于封装服务、组件、控制器等可重用的代码。
l Spring框架在依赖注入和控制反转(IoC)的实现中广泛使用Bean的概念,通过在配置文件或类中声明Bean,Spring容器会自动管理这些Bean的生命周期,从而实现了解耦和灵活的应用开发。
2.5 @RequestBody和@RequestParam的作用
@RequestBody和@RequestParam是Spring框架中用于接收HTTP请求参数的注解,它们的作用有所不同:
-
@RequestBody的作用:
@RequestBody注解用于接收HTTP请求体中的数据,通常用于POST、PUT等需要在请求体中携带数据的请求方法。
它可以将请求体中的数据解析成Java对象,常用于接收JSON、XML等格式的数据,并将其转换为相应的Java对象。
-
@RequestParam的作用:
@RequestParam注解用于接收HTTP请求的URL参数或查询参数(Query Parameter)。
它通常用于GET请求或POST请求中使用URL编码的参数,在URL中拼接在问号后面,例如:/api/user?id=123&name=John。
示例代码:
@RestController
public class MyController {
@PostMapping("/api/user")
public ResponseEntity<User> createUser(@RequestBody User user) {
// 通过@RequestBody接收请求体中的数据并转换为User对象
// 执行创建用户的逻辑
// 返回创建后的用户对象
return ResponseEntity.ok(user);
}
@GetMapping("/api/user")
public ResponseEntity<User> getUserById(@RequestParam Long id) {
// 通过@RequestParam接收URL参数中的id值
// 根据id查询用户信息
// 返回用户对象
User user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
}
在上述示例中,createUser方法使用了@RequestBody注解来接收POST请求中的请求体数据,并将其转换为User对象。而getUserById方法则使用了@RequestParam注解来接收GET请求中的URL参数id,用于查询用户信息。
2.6 @RequestMapping
@RequestMapping是Spring框架中用于映射HTTP请求到特定方法或控制器的注解。它可以标记在方法或类级别上,并用于指定请求的URL路径、请求方法以及其他相关属性。
在Spring MVC框架中,@RequestMapping是一个非常常用的注解,用于处理HTTP请求,并将请求分发到相应的处理方法。它的作用是将请求映射到控制器方法上,以便进行处理和响应。