小明:嘿,李老师,我最近在做一个关于校园资产管理的项目,想了解一下怎么用技术手段来实现这个系统。

李老师:哦,这是一个很有意义的课题。校园里的固定资产种类繁多,比如教室设备、实验室仪器、办公用品等,如果能有一个系统来管理这些资产,可以大大提高效率。
小明:那您觉得用什么技术来做呢?我之前学过Java,可能可以用Java来开发。
李老师:很好,Java是一个很好的选择。它具有跨平台性,适合开发企业级应用。你可以使用Spring Boot框架来搭建后端服务,这样开发起来会更高效。
小明:那前端呢?是不是也需要做网页界面?
李老师:是的,前端可以用HTML、CSS和JavaScript来实现,或者也可以用Vue.js或React这样的现代框架。不过如果你只是做简单的系统,HTML+JSP可能就足够了。
小明:明白了。那数据库方面应该怎么做呢?
李老师:你需要设计一个合适的数据库结构。比如,可以有资产表、部门表、管理员表等。每个资产需要记录名称、型号、购买日期、存放位置、状态等信息。
小明:那我可以先画个数据库ER图吗?
李老师:对,这是个好习惯。你可以用工具如MySQL Workbench来设计表结构,然后生成SQL语句。
小明:那我现在应该怎么开始编写代码呢?有没有具体的例子?
李老师:当然有。我们可以从创建数据库开始,然后写一些基本的CRUD操作(增删改查)。
小明:好的,那我先建一个数据库,叫“campus_asset”。里面有几个表,比如assets、departments、users等。
李老师:没错。下面我给你一段创建数据库和表的SQL代码:
CREATE DATABASE campus_asset;
USE campus_asset;
CREATE TABLE departments (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL
);
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
CREATE TABLE assets (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
model VARCHAR(100),
purchase_date DATE,
location VARCHAR(200),
status ENUM('Available', 'In Use', 'Maintenance') DEFAULT 'Available',
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
);

小明:谢谢,这对我很有帮助。接下来我需要用Java来连接数据库,对吧?
李老师:对的。你可以使用JDBC来连接MySQL数据库。或者更简单一点,使用Spring Boot的JPA来操作数据库。
小明:那Spring Boot的项目结构是怎样的?
李老师:Spring Boot项目通常包括一个主类,用于启动应用,以及几个配置类和实体类。你可以使用Spring Initializr来生成项目骨架。
小明:那我应该怎么编写实体类呢?比如资产实体类。
李老师:你可以在src/main/java目录下创建一个包,比如com.example.assetmanagement.entity,然后定义一个Asset类,如下所示:
package com.example.assetmanagement.entity;
import jakarta.persistence.*;
import java.util.Date;
@Entity
@Table(name = "assets")
public class Asset {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String model;
private Date purchaseDate;
private String location;
private String status;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
// getters and setters
}
小明:明白了。那Department类也应该是一个实体类,对吧?

李老师:没错。Department类的结构如下:
package com.example.assetmanagement.entity;
import jakarta.persistence.*;
import java.util.List;
@Entity
@Table(name = "departments")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List assets;
// getters and setters
}
小明:那现在我需要一个Repository接口来操作数据库。
李老师:是的,你可以创建一个AssetRepository接口,继承JpaRepository,这样就可以直接使用Spring Data JPA提供的方法。
小明:那我应该怎么做呢?
李老师:代码如下:
package com.example.assetmanagement.repository; import com.example.assetmanagement.entity.Asset; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface AssetRepository extends JpaRepository{ }
小明:那Controller层该怎么写呢?比如处理HTTP请求。
李老师:你可以创建一个AssetController类,使用@RestController注解,然后注入AssetRepository,实现增删改查功能。
小明:那我可以写一个添加资产的接口吗?
李老师:当然可以,以下是一个示例代码:
package com.example.assetmanagement.controller;
import com.example.assetmanagement.entity.Asset;
import com.example.assetmanagement.repository.AssetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/assets")
public class AssetController {
@Autowired
private AssetRepository assetRepository;
@GetMapping
public List getAllAssets() {
return assetRepository.findAll();
}
@PostMapping
public Asset createAsset(@RequestBody Asset asset) {
return assetRepository.save(asset);
}
@GetMapping("/{id}")
public Asset getAssetById(@PathVariable Long id) {
return assetRepository.findById(id).orElse(null);
}
@PutMapping("/{id}")
public Asset updateAsset(@PathVariable Long id, @RequestBody Asset updatedAsset) {
Asset asset = assetRepository.findById(id).orElse(null);
if (asset != null) {
asset.setName(updatedAsset.getName());
asset.setModel(updatedAsset.getModel());
asset.setPurchaseDate(updatedAsset.getPurchaseDate());
asset.setLocation(updatedAsset.getLocation());
asset.setStatus(updatedAsset.getStatus());
asset.setDepartment(updatedAsset.getDepartment());
return assetRepository.save(asset);
}
return null;
}
@DeleteMapping("/{id}")
public void deleteAsset(@PathVariable Long id) {
assetRepository.deleteById(id);
}
}
小明:太好了!这样就能实现基本的资产管理功能了。
李老师:是的,这只是基础功能。你可以继续扩展,比如添加用户权限管理、资产借用流程、库存预警等功能。
小明:那前端部分呢?我是不是要写一个网页来展示这些数据?
李老师:是的。你可以使用Thymeleaf模板引擎来渲染页面,或者使用Vue.js等前端框架。这里我给你一个简单的JSP页面示例,用来展示资产列表:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
资产列表
校园固定资产列表
| ID | 名称 | 型号 | 购买日期 | 位置 | 状态 |
|---|---|---|---|---|---|
| ${asset.id} | ${asset.name} | ${asset.model} | ${asset.purchaseDate} | ${asset.location} | ${asset.status} |
小明:看起来挺直观的。那我应该怎么把后端的数据传到前端呢?
李老师:你可以创建一个Controller来处理前端请求,比如获取资产列表的GET请求,然后将数据传递给JSP页面。
小明:那我可以写一个HomeController吗?
李老师:当然可以。例如:
package com.example.assetmanagement.controller;
import com.example.assetmanagement.entity.Asset;
import com.example.assetmanagement.repository.AssetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@Autowired
private AssetRepository assetRepository;
@GetMapping("/")
public String home(Model model) {
model.addAttribute("assets", assetRepository.findAll());
return "index";
}
}
小明:这样前端就可以通过访问根路径来显示资产列表了。
李老师:没错。这就是一个完整的校园固定资产管理系统的基本架构。
小明:非常感谢您的指导,我现在对这个系统有了更清晰的认识。
李老师:不客气,希望你能顺利完成项目,如果有问题随时来找我。
