前言
在本篇博客中,我使用Java编写了一个游戏管理系统,采用了MVC(Model-View-Controller)架构。MVC架构将应用程序分为三个主要组件,这种分层架构使得代码更加模块化、可维护性更高,并且能更好地应对需求变化。
本篇博客仅供参考,更多的是自己的学习笔记,希望可以帮助到其他人。
一、运行环境
-
IDE - IDEA
:IDEA
是一种集成开发环境,用于编写、调试和运行Java
代码。
-Spring Boot 3+
:Spring Boot
是一个用于简化Spring
应用程序开发的框架。版本3+
表示使用Spring Boot
的最新版本。
-Spring Framework 6+
:Spring Framework
是一个用于构建企业级Java
应用程序的框架。版本6+
表示使用Spring Framework
的最新版本。
-Maven
:Maven
是一个用于构建和管理Java
项目的工具。它可以自动下载所需的依赖项,并提供一种标准的项目结构和构建过程。
-Java 20
:Java
是一种通用的编程语言,版本20
表示使用Java
的最新版本。
-Spring Data JPA(Hibernate)
:Spring Data JPA
是Spring Framework
的一部分,它提供了一种简化数据库访问的方式。Hibernate
是一个流行的Java
持久化框架,用于将Java
对象映射到关系数据库。
-Thymeleaf
:Thymeleaf
是一个用于构建Web应用程序的模板引擎。它可以将动态数据渲染到HTML
页面中。
二、创建项目
2.1 创建新模块
2.2 选择依赖
-
Lombok
:Lombok
是一个Java
库,用于通过注解自动化生成Java
代码。它可以减少冗余的样板代码,例如getter
和setter
方法、构造函数等。
-Spring Web
:Spring Web
是Spring Framework
的一部分,用于构建Web
应用程序。它提供了处理HTTP
请求和响应功能,包括路由、控制器、视图解析等。
-Thymeleaf
:Thymeleaf
是一个用于构建Web
应用程序的模板引擎。它可以将动态数据渲染到HTML
页面中,使开发人员可以更轻松地生成动态内容。
-Spring Data JPA
:Spring Data JPA
是Spring Framework
的一部分,它提供了一种简化数据库访问的方式。它使用JPA(Java Persistence API)
标准来操作数据库,可以减少编写重复的CRUD(创建、读取、更新、删除)代码。
-MySQL Driver
:MySQL Driver
是用于连接和操作MySQL
数据库的Java
驱动程序。它提供了与MySQL
数据库进行通信的功能,包括建立连接、渲染动态内容和操作数据库。
2.3 对应的Maven依赖如下(pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
</dependencies>
三、项目架构
3.1 项目结构
3.2 连接数据库
注意:因为我已经选择过
MySQL
了,所以它会出现在最前面,如果是第一次连需要到Complete Support
中找。
3.3 配置数据库(application.properties):
# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url=jdbc:mysql://localhost:3306/lirj?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
spring.datasource.username=root
spring.datasource.password=password
# Hibernate
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQLDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type=TRACE
-
lirj
:这里换上自己的数据库名称。
-spring.datasource.password=password
:password
为自己数据库的密码
四、Model层
模型层负责处理数据和业务逻辑。在我的游戏管理系统中,我使用了Java类来表示游戏对象,并实现了与游戏相关的各种功能,如添加游戏、删除游戏、更新游戏信息等。
package com.example.lirj.model;
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "game")
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name")
private String name;
@Column(name = "type")
private String type;
@Column(name = "price")
private String price;
@Column(name = "difficulty")
private String difficulty;
}
这段代码是一个
Java
类,名为Game
。它使用了Lombok
库的@Data
注解,自动生成了getter
和setter
方法等常见代码。该类使用了JPA
注解,表示它是一个实体类,并映射到数拥库中的game
表。
-@ld
:注解表示id
字段是该实体类的主键,并使用自增策略生成唯一标识符。
-@Column
:注解用于指定字段在数据库表中的列名。
-id
:表示游戏的唯一标识符。
-name
:表示游戏的名称。
-type
:表示游戏的类型。
-price
:表示游戏的价格。
-difficulty
:表示游戏的难度。
这些字段都是私有的,并通过getter
和setter
方法进行访问。
五、Repository层
Repository层负责数据的持久化和访问。它提供了与数据库或其他数据存储系统的交互接口,用于执行数据的增删改查操作。Repository层的主要职责是将数据访问逻辑与其他层(如控制器层和模型层)进行解耦,以提高代码的可维护性和可测试性。
package com.example.lirj.repository;
import com.example.lirj.model.Game;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GameRepository extends JpaRepository<Game, Long> {
@Query("select b from Game b where b.name like %:name%")
List<Game> findAllByGame(@Param("name") String name);
}
这段代码是一个
Java
接口,名为GameRepository
。它是一个Spring Data JPA
的仓库接口,用于对Game
实体进行数据库操作。
-@Repository
:注解表示该接口是一个仓库组件,用于持久化操作。
这个接口继承了JpaRepository
接口,通过继承可以获得—些常用的数据库操作方法。
-@Query
:注解用于定义自定义的查询方法。这个查询方法使用了JPQL
语句,通过name
参数进行模糊查询,返回符合条件的Game
对象列表。
这个接口定义了一个findAllByGame
方法,用于根据游戏名称进行查询。
六、Service层
接口层负责处理用户的输入和与模型层的交互。它充当了控制器(Controller)和视图(View)之间的桥梁