spring 分层式框架

JAVA后端工作笔记,有讲述不合理或者理解不正确的地方欢迎指教

目录

JAVA后端工作笔记,有讲述不合理或者理解不正确的地方欢迎指教

spring框架间逻辑

controller layer 控制层

service layer 服务层/业务逻辑层(Business Logic Layer, BLL)

data access layer数据访问层

@mapper:

@repository

通过方法命名规则:

@Query注解(适用于更复杂的查询)

data transfer layer数据传输层


spring框架间逻辑

Controller 接收 HTTP 请求,调用 Service 执行业务逻辑。
Service 处理业务逻辑,调用 Mapper 接口进行数据库操作。
Mapper 接口由 MyBatis 实现,执行具体的 SQL 语句。
Spring 管理所有组件的生命周期,将它们注册为 Bean,并自动注入依赖。
最终,Controller将结果返回给客户端作为 HTTP 响应


controller layer 控制层


用于接收用户请求和返回用户页面,和端口直接交互

可以理解为函数的接收参数和返回参数,定义了具体接收和返回的对象
常见注解:
 @Controller
 @RestController

service layer 服务层/业务逻辑层(Business Logic Layer, BLL)


@Service 表示这是一个service,定义了具体的业务逻辑如何运作

比如更新、删除用户信息,负责处理执行项目的核心功能

data access layer数据访问层


1.负责与数据库交互,执行CRUD操作(创建、读取、更新、删除)。
2.提供数据访问接口和实现


@mapper:


mapper中提供接口,mybatis会根据这些interface的定义自动生成对应的实现类,        
怎么让mybatis知道我的interface想要实现什么功能:
1.直接在接口内的调用旁边写上对应sql语句的注解eg:@Select("SELECT * FROM users WHERE id = #{id}")
2.在接口内只用写调用,在配置文件xml的<mapper></mapper>中写sql


<mapper namespace="com.example.WordMapper">
    <!-- 查询所有生词 -->
    <select id="listAllWord" resultType="com.example.Word">
        SELECT bid, name, del_flag AS delFlag
        FROM word
        WHERE del_flag = 0
    </select>
</mapper>


需要注意的是我想要实现的方法在这里用id来表示,比如这里就是id="listAllWord",返回的结果类型是resultType,下面的sql语句用来实现listAllWord
少量mapper时可以用注解标注@mapper,用来指定哪些是mapper需要处理
业务使用在main主类里@MapperScan(basePackages = {"com.example.mapper"})
@MapperScan会扫描指定这些包中的所有mapper接口
MyBatis会根据这些Mapper接口生成对应的实现类,这些实现类可以在Spring应用程序中作为Bean进行注入和使用,实现类变成Spring Bean

@repository

基于接口的编程:通过继承JpaRepositoryCrudRepository,可以自动获得许多基本的CRUD操作。因此大部分操作只需要定义方法,无需编写具体的SQL语句。

查询的方式有通过方法命名规则和@Query注解

通过方法命名规则:

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface PersonRepository extends JpaRepository<Person, Long> {
    // 根据名字查找
    List<Person> findByName(String name);

    // 根据年龄大于某个值查找
    List<Person> findByAgeGreaterThan(int age);

    // 根据名字和年龄查找
    List<Person> findByNameAndAge(String name, int age);

    // 根据名字包含某个字符串查找
    List<Person> findByNameContaining(String keyword);
}
 

@Query注解(适用于更复杂的查询)

public interface PersonRepository extends JpaRepository<Person, Long> {


    @Query(value = "SELECT * FROM person WHERE age > :age", nativeQuery = true)
    List<Person> findByAgeGreaterThanUsingNativeQuery(@Param("age") int age);
}
 

data transfer layer数据传输层


定义用于数据传输的对象,用于在各层之间传递数据。一般不使用特殊注解

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值