我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

基于SpringBoot项目,苏南大叔描述一下关于EntityModel的区别联系。在一些情况下,两者是可以互换的。但是,两者也是有区别的。在SpringBoot项目中,两者的位置都建议放在和controller平级的model文件夹下。

苏南大叔:SpringBoot开发,实体Entity和模型Model有何区别? - springboot-model
SpringBoot开发,实体Entity和模型Model有何区别?(图4-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10openjdk@23.0.2IntelliJ IDEA 2024.3.4.1maven@3.3.2spring boot@2.5.4java@17

龙套角色

本文的配套例子,基于下面这篇文章修改:

原代码结果中的mvc结果,已经有了controllerview(template)。本文增加它的model层。文本中model文件和entity文件,都放同一个文件夹src/main/java/com/example/demo/model/内。

苏南大叔:SpringBoot开发,实体Entity和模型Model有何区别? - 代码结构
SpringBoot开发,实体Entity和模型Model有何区别?(图4-2)

Model

Model是一个更广泛的概念,用于表示应用程序中的业务逻辑或数据模型。它可以是与数据库无关的类,用于在不同层之间传递数据(如ControllerService层之间)。Model类可以包含业务逻辑和数据验证,用于封装业务数据,不一定与数据库直接相关‌。它可以在服务层、控制器层等使用,用于封装业务数据,可能包含业务逻辑和数据处理‌。

在本文的语境下,主要突出一点:model不一定和数据库中的表进行关联的。例如:
model/User.java:

package com.example.demo.model;
public class User {
    private String name;
    private String password;
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private static final User[] validUsers = {
        new User("user1", "password1"),
        new User("user2", "password2")
    };
    public static User findByName(String name) {
        for (User user : validUsers) {
            if (user.name.equals(name)) {
                return user;
            }
        }
        return null;
    }
}
Java

Entity(待续)

Entity通常指代与数据库表直接映射的Java类,使用JPAPersistence API)注解(如@Entity、@Table、@Id等)来定义。它直接对应数据库中的表结构,每个实例代表表中的一行数据。例如,User类可能对应数据库中的User表‌。Entity主要用于数据持久化层(DAO/Repository层),与数据库交互,直接映射数据库表‌。

和数据库紧密绑定的model,就是entity了。一般来说,entity文件和数据库中的表是一一对应的关系。这个关系还涉及到了springboot中的jpa的概念。

由于篇幅限制,本文还并未涉及springboot通过jpa进行数据库连接相关的概念。所以,下面的entity代码并不能独立运行使用。配套代码在后续文章中提供。

model/User2.java:

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "user")
public class User2 {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String password;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
Java

苏南大叔:SpringBoot开发,实体Entity和模型Model有何区别? - 文件对比
SpringBoot开发,实体Entity和模型Model有何区别?(图4-3)

配套调用

controller对上述user模型文件(user2.java实体文件需要更多文件配合)进行调用。范例如下:

controller/PageController.java:

package com.example.demo.controller;

import com.example.demo.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class PageController {
    @GetMapping("/login")
    public String showLoginPage() {
        return "login";
    }

    @PostMapping("/login")
    public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model) {
        User user = User.findByName(username);
        if (user != null && user.getPassword().equals(password)) {
            model.addAttribute("message", "Login successful");
        } else {
            model.addAttribute("message", "Invalid username or password");
        }
        return "login";
    }
}
Java

苏南大叔:SpringBoot开发,实体Entity和模型Model有何区别? - 登陆界面
SpringBoot开发,实体Entity和模型Model有何区别?(图4-4)

templates/login.html

<form action="#" th:action="@{/login}" method="post">
    <div>
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
    </div>
    <div>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>
    </div>
    <div>
        <button type="submit">Login</button>
    </div>
</form>
<p th:text="${message}">Message will be displayed here</p>
HTML

结语

MVC的框架设定下,entitymodel都可以理解为模型。当与数据库深度绑定的时候,就称之为entity实体了。更多苏南大叔的java精彩文章,请点击下面的连接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   java