JAVA后端工作笔记,有讲述不合理或者理解不正确的地方欢迎指教
目录
JAVA后端工作笔记,有讲述不合理或者理解不正确的地方欢迎指教
service layer 服务层/业务逻辑层(Business Logic Layer, BLL)
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
基于接口的编程:通过继承JpaRepository
或CrudRepository
,可以自动获得许多基本的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数据传输层
定义用于数据传输的对象,用于在各层之间传递数据。一般不使用特殊注解