植物知识分享论坛毕设

后端文件包分析

后端文件间的联系

1.数据库

2.Entity实体类

在软件开发中,Entity(实体类)是面向对象编程中的一个重要概念,尤其是在基于 ORM(对象关系映射,Object-Relational Mapping)框架(如 Hibernate、MyBatis 等)的项目中。以下是 Entity 实体类的主要作用和特点:

主要作用

  • 数据模型表示:实体类用于表示数据库中的表结构,每个实体类通常对应数据库中的一张表。
  • 字段映射:实体类的属性(字段)对应数据库表中的列。
  • 封装业务逻辑:可以为实体类添加 getter 和 setter 方法,以及一些简单的业务逻辑方法。
  1. 基本特点
    (1) 与数据库表的映射

    • 每个实体类通常通过注解或配置文件与数据库表进行映射。

    • 示例:

      @Entity
      @Table(name = "user")
      public class User {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Integer id;
      
          @Column(name = "name")
          private String name;
      
          @Column(name = "age")
          private Integer age;
      
          // Getter 和 Setter 方法
      }
      
    • 在上述示例中:

      • @Entity 表示这是一个实体类。
      • @Table(name = "user") 表示该实体类对应数据库中的 user 表。
      • @Id 和 @GeneratedValue 表示主键及其生成策略。
      • @Column 表示字段与表中列的映射关系。

(2) 封装数据

  • 实体类封装了数据库表中的数据,便于在程序中操作。
  • 示例:
    User user = new User();
    user.setName("张三");
    user.setAge(25);
    

(3) 支持 ORM 操作

  • 实体类可以通过 ORM 框架直接进行增删改查操作,而无需手动编写 SQL 语句。
  • 示例:
    entityManager.persist(user);  // 插入数据
    entityManager.remove(user);   // 删除数据
    
  1. 优点

    • 简化开发:通过 ORM 框架,开发者可以直接操作实体类,而不需要编写复杂的 SQL 语句。
    • 提高可读性:将数据库表结构以对象的形式表示,代码更易于理解和维护。
    • 增强灵活性:可以在实体类中添加业务逻辑,增强代码的复用性和扩展性。

适用场景

  • 数据库驱动的应用程序开发。
  • 需要频繁与数据库交互的场景。
  • 使用 ORM 框架(如 Hibernate、MyBatis-Plus)进行持久层开发。

注意事项

  • 字段命名规范:实体类的字段名应尽量与数据库表的列名保持一致,或者通过注解明确指定映射关系。
  • 避免过多逻辑:实体类应专注于数据封装,复杂的业务逻辑应放在服务层或其他组件中。
  • 懒加载问题:在使用 ORM 框架时,注意懒加载可能导致的 N+1 查询问题。

总结
Entity 实体类是连接数据库表与应用程序的重要桥梁,它通过 ORM 框架实现了对象与关系型数据库之间的映射,简化了数据库操作,提高了开发效率。在实际开发中,实体类的设计应遵循简洁、清晰的原则,专注于数据封装和映射功能

3.controller控制层

在软件开发中,尤其是基于 MVC(Model - View - Controller)或 MVVM(Model - View - ViewModel)架构的项目中,Controller 是一个非常重要的组件。

  1. 什么是 Controller?
    Controller 是 MVC 或类似架构中的控制层组件,它充当了用户请求和业务逻辑处理之间的桥梁。
  • 位置:位于前端和后端服务之间。
  • 职责:接收用户请求,调用业务逻辑(Service 层),并将结果返回给前端。
  1. Controller 的主要作用
    (1) 接收用户请求
    • 处理来自客户端(如浏览器、移动端应用)的 HTTP 请求。
    • 示例:
      @RestController
      @RequestMapping("/users")
      public class UserController {
          @GetMapping("/{id}")
          public ResponseEntity<User> getUserById(@PathVariable Integer id) {
              // 调用 Service 层获取用户信息
              User user = userService.getUserById(id);
              return ResponseEntity.ok(user);
          }
      }
      

(2) 调用业务逻辑

  • 将接收到的请求参数传递给 Service 层,由 Service 层完成具体的业务逻辑处理。
  • 示例:
    @PostMapping
    public ResponseEntity<Void> createUser(@RequestBody User user) {
        userService.createUser(user);  // 调用 Service 层创建用户
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
    

(3) 返回响应结果

  • 根据 Service 层的处理结果,生成并返回响应数据(如 JSON、XML 等格式)。
  • 示例:
    @PutMapping("/{id}")
    public ResponseEntity<Void> updateUser(@PathVariable Integer id, @RequestBody User user) {
        userService.updateUser(id, user);  // 更新用户信息
        return ResponseEntity.noContent().build();
    }
    

Controller 的特点
(1) 解耦前端与后端

  • 前端只需与 Controller 交互,无需直接调用复杂的业务逻辑。
  • Controller 将请求转发给 Service 层,实现了前后端分离。

(2) 支持多种请求方式

  • 支持常见的 HTTP 方法(如 GET、POST、PUT、DELETE 等)。
  • 示例:
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Integer id) {
        userService.deleteUser(id);  // 删除用户
        return ResponseEntity.noContent().build();
    }
    

(3) 参数校验

  • 可以对请求参数进行校验,确保输入数据的合法性。
  • 示例:
    @PostMapping
    public ResponseEntity<Void> createUser(@Valid @RequestBody User user) {
        userService.createUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
    

(4) 异常处理

  • 提供统一的异常处理机制,捕获并返回友好的错误信息。
  • 示例:
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
    

Controller 的典型应用场景
(1) RESTful API 开发

  • 在 Spring Boot 中,@RestController 注解的类通常用于开发 RESTful 风格的接口。
  • 示例:

    java

    @RestController
    @RequestMapping("/api/v1/users")
    public class UserController {
        @GetMapping
        public List<User> getAllUsers() {
            return userService.getAllUsers();
        }
    }
    

(2) Web 页面渲染

在传统的 MVC 框架中,Controller 还可以用于渲染视图(如 JSP、Thymeleaf 模板)。

  • 示例:
    @Controller
    public class HomeController {
        @GetMapping("/")
        public String home(Model model) {
            model.addAttribute("message", "欢迎访问首页!");
            return "home";  // 返回 home.html 或 home.jsp
        }
    }
    

  1. Controller 的优点

  • 职责单一:专注于处理请求和返回响应,不涉及复杂业务逻辑。
  • 易于扩展:通过添加新的方法或类,可以快速支持新的功能。
  • 便于测试:可以通过单元测试验证 Controller 的行为是否符合预期。

总结
Controller 是应用程序中连接前端请求和后端业务逻辑的核心组件,主要负责接收请求、调用业务逻辑以及返回响应结果。它是实现前后端分离、提高代码可维护性和扩展性的重要部分。

4.Service 业务逻辑层(Business Logic Layer,也常称为服务层 Service Layer)

在软件开发中,尤其是基于 MVC(Model - View - Controller)或分层架构的项目中,Service 是一个非常重要的概念。它是业务逻辑的核心层,负责处理与具体业务相关的操作。以下是 Service 的定义、作用以及具体用途:

  1. 什么是 Service?
    Service 是分层架构中的业务逻辑层,位于 Controller 和 DAO(数据访问对象)之间。它的主要职责是实现具体的业务逻辑,并将结果返回给上层(如 Controller)。
  • 位置:介于控制层(Controller)和持久层(DAO/Repository)之间。
  • 职责:封装业务逻辑,协调多个 DAO 操作,确保业务规则的正确性。
  1. Service 的主要作用
    (1) 封装业务逻辑
    • 将复杂的业务逻辑从 Controller 中抽离出来,集中到 Service 层进行处理。
    • 示例:
      @Service
      public class UserService {
          @Autowired
          private UserRepository userRepository;
      
          public User createUser(User user) {
              // 校验用户信息是否合法
              if (user.getName() == null || user.getAge() == null) {
                  throw new IllegalArgumentException("用户信息不完整!");
              }
              // 调用 DAO 层保存用户
              return userRepository.save(user);
          }
      
          public void deleteUser(Integer id) {
              // 确保用户存在后再删除
              if (!userRepository.existsById(id)) {
                  throw new UserNotFoundException("用户不存在!");
              }
              userRepository.deleteById(id);
          }
      }
      

(2) 协调多个 DAO 操作

  • 当一个业务逻辑需要调用多个 DAO 方法时,Service 层可以协调这些操作。
  • 示例:
    @Service
    public class OrderService {
        @Autowired
        private OrderRepository orderRepository;
    
        @Autowired
        private UserRepository userRepository;
    
        public void placeOrder(Order order, Integer userId) {
            // 检查用户是否存在
            User user = userRepository.findById(userId)
                .orElseThrow(() -> new UserNotFoundException("用户不存在!"));
    
            // 创建订单并关联用户
            order.setUserId(userId);
            orderRepository.save(order);
        }
    }
    

(3) 事务管理

  • Service 层通常是事务的边界,通过声明式事务管理(如 Spring 的 @Transactional 注解),确保一组操作的原子性。
  • 示例:
    @Service
    public class TransferService {
        @Autowired
        private AccountRepository accountRepository;
    
        @Transactional
        public void transferMoney(Integer fromAccountId, Integer toAccountId, BigDecimal amount) {
            // 扣除转出账户金额
            Account fromAccount = accountRepository.findById(fromAccountId)
                .orElseThrow(() -> new AccountNotFoundException("转出账户不存在!"));
            fromAccount.setBalance(fromAccount.getBalance().subtract(amount));
            accountRepository.save(fromAccount);
    
            // 增加转入账户金额
            Account toAccount = accountRepository.findById(toAccountId)
                .orElseThrow(() -> new AccountNotFoundException("转入账户不存在!"));
            toAccount.setBalance(toAccount.getBalance().add(amount));
            accountRepository.save(toAccount);
        }
    }
    

Service 的特点
(1) 业务逻辑集中化

  • 将业务逻辑集中在 Service 层,便于维护和扩展。
  • Controller 只负责接收请求和返回响应,不涉及复杂逻辑。

(2) 支持事务管理

  • 通过声明式事务(如 @Transactional),确保业务操作的完整性。

(3) 可复用性高

  • Service 层的方法可以被多个 Controller 调用,避免重复代码。

(4) 易于测试

  • Service 层可以通过单元测试验证业务逻辑的正确性,而不依赖前端或数据库。
  1. Service 的典型应用场景
    (1) 用户注册与登录
    • 在用户注册时,Service 层可以校验用户名是否唯一,并生成 Token。
    • 示例:
      @Service
      public class AuthService {
          @Autowired
          private UserRepository userRepository;
      
          public String login(String username, String password) {
              // 校验用户名和密码
              User user = userRepository.findByUsername(username)
                  .orElseThrow(() -> new AuthenticationException("用户名或密码错误!"));
      
              if (!password.equals(user.getPassword())) {
                  throw new AuthenticationException("用户名或密码错误!");
              }
      
              // 生成 Token
              return TokenUtils.createToken(user.getId(), user.getRole());
          }
      }
      

(2) 订单处理

  • 在创建订单时,Service 层可以校验库存、计算总价并更新状态。
  • 示例:
    @Service
    public class OrderService {
        @Autowired
        private ProductService productService;
    
        public void createOrder(Order order) {
            // 校验商品库存
            Product product = productService.findById(order.getProductId())
                .orElseThrow(() -> new ProductNotFoundException("商品不存在!"));
    
            if (product.getStock() < order.getQuantity()) {
                throw new StockInsufficientException("库存不足!");
            }
    
            // 扣减库存并创建订单
            product.setStock(product.getStock() - order.getQuantity());
            productService.save(product);
    
            order.setStatus("已创建");
            orderRepository.save(order);
        }
    }
    

Service 的优点

  • 职责清晰:专注于业务逻辑处理,不涉及请求解析或数据库操作。
  • 易于扩展:新增业务逻辑时只需修改或添加 Service 方法。
  • 便于测试:可以通过 Mock 数据库或其他依赖,单独测试 Service 层的功能。
  • 事务管理:支持声明式事务,简化复杂业务操作的实现。

总结
Service 是应用程序中实现业务逻辑的核心层,它封装了具体的业务规则,协调多个 DAO 操作,并提供了事务管理功能。通过将业务逻辑集中到 Service 层,可以提高代码的可维护性和扩展性,同时便于测试和复用。

5.Mapper

软件开发中,Mapper 通常指的是一个用于数据映射的组件或类,具体作用取决于上下文环境。以下是 Mapper 在不同场景下的常见用途:

  1. 数据库操作(MyBatis 框架中的 Mapper)

    • 定义:在 MyBatis 或 MyBatis-Plus 等持久层框架中,Mapper 是一个接口,用于定义对数据库的操作方法。

    • 功能

      • 提供对数据库表的增删改查(CRUD)操作。
      • 将 Java 对象与数据库表进行映射。
    • 实现方式

      • 使用注解(如 @Select@Insert@Update@Delete)定义 SQL 语句。
      • 或通过 XML 文件配置 SQL 语句。
    • 示例

      @Mapper
      public interface UserMapper {
          @Select("SELECT * FROM user WHERE id = #{id}")
          User findById(int id);
      
          @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
          void insert(User user);
      }
      
    • 用途

      • 数据库交互的核心组件,负责将业务逻辑与数据库操作解耦。
  2. 对象映射(Object Mapping)

    • 定义:用于将一种类型的对象转换为另一种类型的对象。

    • 功能

      • 实现数据结构之间的转换,例如 DTO(数据传输对象)与实体类之间的映射。
    • 实现方式

      • 手动编写转换逻辑。
      • 使用工具库(如 MapStruct、ModelMapper)自动生成映射代码。
    • 示例

      @Mapper
      public interface UserMapper {
          UserDto userToUserDto(User user);
      }
      
    • 用途

      • 简化复杂对象之间的转换逻辑,减少手动编码的工作量。
  3. Hadoop 中的 Mapper

    • 定义:在 Hadoop 的 MapReduce 编程模型中,Mapper 是一个阶段性的处理单元。

    • 功能

      • 接收输入数据并将其转换为键值对形式。
      • 进行初步的数据处理和过滤。
    • 实现方式

      • 定义 map 方法,处理每一条输入记录。
    • 示例

      public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
          private final static IntWritable one = new IntWritable(1);
          private Text word = new Text();
      
          public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
              for (String token : value.toString().split("\\s+")) {
                  word.set(token);
                  context.write(word, one);
              }
          }
      }
      
    • 用途

      • 大数据分析中的数据预处理阶段。

总结
Mapper 的具体作用取决于其所在的上下文:

  • 在 MyBatis 中,Mapper 是数据库操作的接口。
    - 在对象映射中,Mapper 是不同类型对象之间的转换工具。
    - 在 Hadoop 中,Mapper 是分布式计算中的数据处理单元。

#Mapper和Mapper.xml区别是什么?

在使用 MyBatis 等框架进行开发时,Mapper 和 Mapper.xml 主要有以下区别:

定义与作用

  • Mapper:是一个 Java 接口,定义了对数据库操作的方法签名。它是 MyBatis 中数据库操作的抽象层,通过接口方法来声明需要执行的数据库操作,例如查询、插入、更新和删除等。
  • Mapper.xml:是一个 XML 配置文件,用于具体实现 Mapper 接口中定义的方法。它包含了与数据库交互的 SQL 语句以及相关的配置信息,将 Java 方法与实际执行的 SQL 语句进行了绑定。

编写方式

  • Mapper:使用 Java 编程语言编写,遵循 Java 接口的定义规范,方法签名明确指定了输入参数和返回值类型。
  • Mapper.xml:使用 XML 格式编写,在文件中通过特定的标签来定义 SQL 语句、参数映射、结果映射等信息。例如,<select> 标签用于定义查询语句,<insert> 标签用于定义插入语句等。

功能实现

  • Mapper:只负责定义方法,不包含具体的业务逻辑实现。它只是声明了可以对数据库执行哪些操作,但并不关心这些操作如何执行。
  • Mapper.xml:负责具体的 SQL 语句编写和执行逻辑。在 Mapper.xml 中,可以通过编写复杂的 SQL 语句来满足各种业务需求,包括多表关联查询、动态 SQL 生成等。

依赖关系

  • Mapper 接口的实现依赖于 Mapper.xml 中定义的 SQL 语句。当 MyBatis 框架在运行时,会根据 Mapper 接口的方法调用,在对应的 Mapper.xml 文件中找到并执行相应的 SQL 语句。
  • Mapper.xml 需要与 Mapper 接口进行关联,通常通过在 Mapper.xml 文件中指定 namespace 属性,其值为 Mapper 接口的全限定名,来建立两者之间的联系。

代码位置与组织

  • Mapper 接口通常位于 Java 的源代码目录中,按照 Java 的包名结构进行组织,与其他 Java 代码一起进行版本控制和管理。
  • Mapper.xml 文件一般位于资源目录下,通常与 Mapper 接口所在的包名相对应,以便于框架能够正确地找到对应的配置文件。在一些项目中,也可能会将 Mapper.xml 文件与 Mapper 接口放在同一个目录下,方便管理和维护。

例如,有一个 UserMapper 接口定义了获取用户信息的方法,那么在 UserMapper.xml 中就会有对应的 <select> 标签来编写查询用户信息的 SQL 语句,通过 id 属性与 UserMapper 接口中的方法进行对应。

mapper

// UserMapper接口
public interface UserMapper {
    User getUserById(int id);
}

XML

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" resultMap="UserResultMap">
        SELECT id, username, password
        FROM users
        WHERE id = #{id}
    </select>
</mapper>

6.Mapper.xml

Mapper.xml 文件是 MyBatis 框架中用于定义 SQL 语句的配置文件,它与 Mapper 接口配合使用,实现了 Java 方法与数据库操作之间的映射。以下是 Mapper.xml 的主要作用和特点:

  1. 主要作用

    • 定义 SQL 语句:将 SQL 查询、插入、更新、删除等操作封装在 XML 文件中。
    • 映射关系:将 Java 方法与具体的 SQL 语句进行绑定。
    • 参数处理:支持动态 SQL 和参数占位符,便于灵活处理查询条件。
    • 结果映射:定义查询结果如何映射到 Java 对象或集合。
  2. 基本结构
    一个典型的 Mapper.xml 文件包含以下部分:

(1) 命名空间(namespace)

  • 定义该 XML 文件对应的 Mapper 接口。
  • 示例:

    xml

    <mapper namespace="com.example.mapper.UserMapper">
    

(2) SQL 语句定义

  • 使用 <select><insert><update><delete> 等标签定义不同的 SQL 操作。
  • 示例:
    <!-- 查询用户信息 -->
    <select id="findUserById" resultType="com.example.entity.User">
        SELECT id, name, age FROM user WHERE id = #{id}
    </select>
    
    <!-- 插入用户信息 -->
    <insert id="insertUser">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>
    

(3) 参数传递

  • 使用 #{} 占位符接收 Java 方法中的参数。
  • 示例:
    <select id="findUserByName" resultType="com.example.entity.User">
        SELECT * FROM user WHERE name = #{name}
    </select>
    

(4) 结果映射

  • 定义查询结果如何映射到 Java 对象。
  • 示例:
    <resultMap id="userResultMap" type="com.example.entity.User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
    </resultMap>
    
    <select id="findUserById" resultMap="userResultMap">
        SELECT * FROM user WHERE id = #{id}
    </select>
    

(5) 动态 SQL

  • 支持根据条件动态生成 SQL 语句。
  • 示例:
    <select id="findUsers" resultType="com.example.entity.User">
        SELECT * FROM user
        <where>
            <if test="name != null">AND name = #{name}</if>
            <if test="age != null">AND age = #{age}</if>
        </where>
    </select>
    

优点

    • 分离 SQL 逻辑:将 SQL 语句从 Java 代码中分离出来,便于维护和管理。
    • 支持复杂查询:通过动态 SQL 和结果映射,可以处理复杂的查询需求。
    • 灵活性高:支持多种数据库方言,适配不同的数据库系统。
  1. 缺点

    • 维护成本高:当项目规模较大时,XML 文件数量可能较多,维护难度增加。
    • 调试困难:相比注解方式,XML 中的 SQL 错误不易发现。
  2. 适用场景

    • 需要定义复杂 SQL 查询的场景。
    • 需要对 SQL 进行动态拼接的场景。
    • 数据库表结构复杂,无法通过简单注解完成映射的场景。

总结
Mapper.xml 是 MyBatis 中用于定义 SQL 语句的核心配置文件,它将 Java 方法与数据库操作进行了映射,支持参数传递、结果映射和动态 SQL 等功能。它是 MyBatis 框架中实现持久层操作的重要组成部分。

#分层架构

分层架构,我们可以将项目按照特定的目录名(包名)来组织代码,比如:

controller:控制层
service:业务逻辑层
mapper:数据访问层
model:数据模型

还可以按照业务或文件的类型来划分目录,比如:

constant:常量
annotation:注解类
common:公共类
config:配置类
job:任务
exception:异常处理相关
utils:工具类

#每个层都有什么文件?

在基于 MVC 或分层架构的软件开发项目中,不同层通常包含以下类型的文件:

控制层(Controller)

  • Java 类文件:以 Spring 框架为例,通常会有带有@Controller@RestController注解的 Java 类。这些类中的方法用于处理各种 HTTP 请求,比如接收用户提交的数据、调用 Service 层方法处理业务,并将结果返回给客户端。例如,UserController.java用于处理与用户相关的请求,OrderController.java用于处理订单相关的请求等。
  • 配置文件:在一些框架中,可能需要配置文件来映射请求路径到具体的 Controller 方法。例如,Spring MVC 中可以通过DispatcherServlet的配置来指定请求的映射规则。

业务逻辑层(Service)

  • Java 接口文件:定义了业务逻辑的接口,用于规范业务方法的签名。例如,UserService.java接口中可能定义了createUserdeleteUser等方法。
  • Java 实现类文件:使用@Service注解的 Java 类,实现了对应的 Service 接口,包含了具体的业务逻辑实现。如UserServiceImpl.java实现了UserService接口,并实现了接口中定义的方法,在方法内部调用 DAO 层方法来完成数据库操作等。
  • 配置文件:在某些情况下,可能需要配置文件来配置 Service 层的一些属性,如事务管理的配置等。在 Spring 框架中,可以通过@Transactional注解结合配置文件来实现事务管理。

持久层(DAO/Repository)

  • Java 接口文件:定义了对数据库进行操作的接口,例如UserRepository.java接口中可能定义了savefindByIddeleteById等方法用于对用户数据的持久化操作。
  • Java 实现类文件:在一些框架中,可能有具体的实现类来实现这些接口,完成与数据库的交互。例如,使用 MyBatis 框架时,会有UserDaoImpl.java类来实现UserDao接口,通过 SQL 语句操作数据库。不过在一些基于 Spring Data JPA 的项目中,通常不需要编写实现类,框架会自动生成实现。
  • 配置文件:用于配置数据库连接信息、SQL 语句映射等。如 MyBatis 中的mybatis-config.xml文件用于配置全局参数,还有 Mapper.xml 文件用于映射 SQL 语句到接口方法。在 Spring Data JPA 中,通过配置文件来配置数据库连接池、JPA 相关属性等。

表现层(View)

  • HTML 文件:用于展示页面结构,是用户与应用程序交互的界面。例如,登录页面login.html、用户列表页面userList.html等。
  • CSS 文件:用于定义页面的样式,包括字体、颜色、布局等。如styles.css文件可以对 HTML 页面中的元素进行样式设置。
  • JavaScript 文件:用于实现页面的动态效果和交互逻辑,如表单验证、数据提交、页面跳转等。例如,main.js文件可以包含处理用户登录提交事件、获取用户输入数据并进行验证等功能的代码。

7.这四个文件直接是什么关系?各自都是什么作用?他们之间是如何联系的?

关系与联系

UserController.java 负责接收外部请求,调用 UserService.java 里的方法来处理业务,
而 UserService.java 又会调用 UserMapper.java 中的方法,
UserMapper.java 最终通过读取 UserMapper.xml 里定义的 SQL 语句来操作数据库,
它们依次协作完成从接收请求、处理业务到数据库交互的整个流程 。

各自作用

  • UserController.java:可以把它看作是整个系统的 “大门接待员”。当外部(比如网页、APP)向系统发起请求,比如查询用户信息、创建新用户等,这个文件里的代码就会首先接到请求,然后根据请求的内容决定下一步该做什么。
  • UserService.java:如同系统里的 “业务小能手”。它从 UserController.java 那里拿到任务后,按照业务规则进行处理,比如对用户数据进行一些逻辑判断和计算等。它不直接和数据库打交道,而是调用 UserMapper.java 来操作数据。
  • UserMapper.java:类似 “数据库传令官”。它定义了一系列和数据库操作相关的方法,像查询、插入、更新、删除用户数据等。但它本身并不写具体的 SQL 语句,而是通过与 UserMapper.xml 配合来完成数据库操作。
  • UserMapper.xml:相当于 “SQL 语句仓库”。这里面存放了与数据库交互的具体 SQL 语句,UserMapper.java 里的方法会根据名称等对应关系找到这里面的 SQL 语句去执行,从而实现对数据库的增删改查操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值