这次我们来看一个基于SpringBoot的药店管理系统这是一个典型的Java计算机毕业设计项目。对于正在寻找毕设选题、需要完整可运行源码、或者希望学习SpringBoot实战开发的同学来说这类项目非常实用。它不是一个概念演示而是一个包含了前后端、数据库、业务逻辑的完整系统核心价值在于“开箱即用”和“代码可学”。这个项目的重点不是技术多前沿而是能否在你的电脑上快速跑起来代码结构是否清晰业务模块是否完整以及能否根据你的毕设要求进行二次开发。本文将围绕“源码获取、环境搭建、系统启动、功能验证、代码导读”这条主线带你从零开始把这个药店管理系统部署起来并理解其核心实现。无论你是想直接用作毕设还是作为SpringBootMyBatisThymeleaf的技术学习案例这篇文章都能提供直接的帮助。1. 核心能力速览在深入细节之前我们先通过一个表格快速了解这个药店管理系统项目的基本情况让你判断它是否符合你的需求。能力项说明项目类型Java Web 应用B/S架构适合作为计算机专业毕业设计技术栈后端SpringBoot, MyBatis, MySQL前端Thymeleaf, HTML, CSS, JavaScript, Bootstrap主要功能药品信息管理、库存管理、会员管理、销售管理、采购管理、报表统计等药店核心业务流程部署方式本地部署需配置Java、Maven、MySQL环境启动方式通过IDE如IDEA运行SpringBoot主类或使用Maven命令打包后运行Jar包接口能力提供RESTful API接口供前端页面调用业务逻辑封装在Controller层数据库使用MySQL需提前执行提供的SQL脚本创建数据库和表结构适合场景1. 计算机专业毕业设计/课程设计2. SpringBoot初学者实战练习3. 小型药店管理原型系统参考2. 适用场景与使用边界适合谁计算机相关专业毕业生正在为毕设选题发愁需要一个功能完整、技术栈主流、有源码和文档的现成项目。Java/SpringBoot学习者已经学完基础想通过一个完整的项目来串联SpringBoot、MyBatis、Thymeleaf等技术理解MVC架构和业务开发流程。需要快速原型演示者例如需要向客户展示一个药店管理系统的初步概念和界面。能解决什么问题毕设选题与实现提供一个可直接使用的、符合要求的毕设项目基础节省从零搭建框架的时间。技术学习与整合展示如何将SpringBoot、MyBatis、数据库连接池、日志、事务管理等技术整合到一个实际业务系统中。业务流程理解通过药品的进、销、存、会员管理等模块理解传统零售行业软件的基本业务逻辑。不适合什么场景高并发生产环境该项目作为教学和毕设用途未经过大规模并发、分布式、高可用性设计不适合直接用于线上真实药店。复杂业务定制如果药店有非常特殊的业务流程如处方药严格管理、医保对接等需要在此源码基础上进行大量二次开发。无Java基础者虽然可以按照步骤运行但若完全不懂Java和SpringBoot理解和修改代码会非常困难。版权与合规提醒本项目源码应仅用于个人学习、毕业设计及学术研究。若需用于任何商业用途或公开发布请务必确认源码的授权协议尊重原作者的劳动成果必要时进行重构或购买授权。系统中管理的“药品信息”等数据均为模拟数据不可作为真实用药依据。3. 环境准备与前置条件要让这个SpringBoot项目跑起来你的电脑需要满足以下基础环境。请务必在开始前完成检查和安装。1. 操作系统Windows 10/11, macOS, 或 Linux (如Ubuntu)均可。本文演示以Windows环境为主。2. Java开发环境 (JDK)版本要求JDK 8 或 JDK 11推荐。SpringBoot 2.x 对这两个版本支持最好。如何检查打开命令行输入java -version。安装指引若未安装请前往Oracle官网或AdoptOpenJDK等开源站点下载安装包并配置JAVA_HOME环境变量。3. 项目管理与构建工具 (Maven)版本要求Maven 3.6.x 及以上。如何检查命令行输入mvn -v。安装指引从Apache官网下载解压并配置MAVEN_HOME及Path环境变量。IDEA等IDE通常也内置了Maven。4. 数据库 (MySQL)版本要求MySQL 5.7 或 MySQL 8.0。如何检查命令行输入mysql --version或通过MySQL客户端工具连接。安装指引从MySQL官网下载社区版安装包。安装过程中请记住设置的root用户密码。额外工具推荐安装Navicat、DBeaver或MySQL Workbench等图形化数据库管理工具方便执行SQL脚本和查看数据。5. 集成开发环境 (IDE) - 强烈推荐IntelliJ IDEA Ultimate/Community版对SpringBoot支持极佳能自动识别Maven项目并下载依赖。Eclipse with STS插件也可用于SpringBoot开发。使用IDE能极大简化项目导入、依赖下载和启动过程。6. 浏览器任何现代浏览器均可如Chrome, Firefox, Edge用于访问系统Web界面。环境自查清单[ ] JDK已安装且版本正确[ ] Maven已安装且能正常执行mvn命令[ ] MySQL服务已启动并能用root账号登录[ ] IDE如IDEA已安装[ ] 网络通畅能连接Maven中央仓库下载依赖4. 安装部署与启动方式假设你已经从提供的渠道获得了“药店管理系统”的源码压缩包。接下来我们分步完成部署。4.1 获取与解压源码将下载的源码压缩包例如pharmacy-management-system.zip解压到一个没有中文和空格的目录下例如D:\Projects\。解压后目录结构应类似于pharmacy-management-system/ ├── src/ # 源代码目录 ├── pom.xml # Maven项目配置文件 ├── sql/ # 数据库脚本目录通常在这里 └── README.md # 项目说明文件4.2 导入项目到IDE (以IntelliJ IDEA为例)打开IntelliJ IDEA选择File-Open...。浏览并选中解压后的项目根目录包含pom.xml的文件夹点击OK。IDEA会自动识别为Maven项目并开始下载依赖包。这个过程取决于网速请耐心等待右下角的进度条完成。首次导入可能会花费几分钟。4.3 初始化数据库这是关键一步系统运行依赖数据库中的数据表。打开MySQL客户端命令行或图形化工具使用root用户登录。创建一个新的数据库专门用于本项目例如CREATE DATABASE pharmacy_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE pharmacy_db;在项目源码的sql/目录下或根据README提示找到数据库初始化脚本通常名为init.sql或schema.sql。在MySQL客户端中执行这个SQL脚本。在图形化工具中通常有“执行SQL文件”的选项在命令行中可以使用source命令。# 命令行示例 (在MySQL命令行内) mysql source D:\Projects\pharmacy-management-system\sql\init.sql;执行成功后查看数据库应能看到创建好的表如drug药品表、member会员表、sale_order销售订单表等。4.4 配置数据库连接SpringBoot的数据库配置通常在src/main/resources/application.properties或application.yml文件中。在IDEA的项目中找到这个配置文件。修改其中的数据库连接信息确保与你在上一步创建的数据库匹配。# application.properties 示例 spring.datasource.urljdbc:mysql://localhost:3306/pharmacy_db?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai spring.datasource.usernameroot spring.datasource.passwordyour_password_here # 替换为你的MySQL root密码 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver注意your_password_here必须替换为你安装MySQL时设置的root密码。如果端口不是默认的3306也需相应修改。4.5 启动项目配置完成后就可以启动SpringBoot应用了。方式一通过IDEA直接运行推荐用于开发调试在IDEA中找到SpringBoot的主启动类。它通常位于src/main/java/com/xxx/pharmacy/目录下类名类似PharmacyApplication或Application并且类上带有SpringBootApplication注解。右键点击这个类选择Run ‘PharmacyApplication‘。观察IDEA下方的Run或Console窗口如果看到类似以下的日志说明启动成功Started PharmacyApplication in 5.832 seconds (JVM running for 6.521) Tomcat started on port(s): 8080 (http) with context path 这表示内嵌的Tomcat服务器已在8080端口启动。方式二通过Maven命令打包后运行更接近部署在项目根目录有pom.xml的目录打开命令行。执行打包命令mvn clean package -DskipTests打包成功后在target/目录下会生成一个pharmacy-management-system-0.0.1-SNAPSHOT.jar文件名称可能略有不同。在命令行中运行这个Jar包java -jar target/pharmacy-management-system-0.0.1-SNAPSHOT.jar同样观察控制台输出确认启动成功。4.6 访问系统启动成功后打开你的浏览器访问以下地址http://localhost:8080或者http://127.0.0.1:8080如果一切正常你应该能看到系统的登录页面。默认的登录账号和密码通常在项目的README.md文件或数据库初始化脚本中提供常见组合如admin/admin或admin/123456。5. 功能测试与效果验证成功登录系统后我们需要对核心功能进行测试以验证项目运行正常并理解其业务模块。5.1 药品信息管理测试测试目的验证系统对药品基础信息增、删、改、查的支持。进入模块在系统菜单中找到“药品管理”或类似入口。查询药品页面加载后应显示药品列表。尝试使用搜索框按药品名称、编号或类别进行查询。新增药品点击“新增”按钮填写表单信息如药品编号、名称、规格、生产厂家、进价、售价、库存预警值等然后提交。预期结果页面刷新新药品出现在列表中。验证方法在数据库drug表中也应能找到这条新记录。修改药品在药品列表中找到一条记录点击“编辑”修改某个字段如售价然后保存。预期结果列表中和数据库中的对应字段被更新。删除药品尝试删除一条测试用的药品记录注意不要删除关键数据。预期结果该记录从列表和数据库中消失。5.2 库存管理测试测试目的验证库存数量的变动逻辑通常与采购入库和销售出库联动。查看库存进入“库存管理”或“库存查询”页面查看所有药品的当前库存量。模拟采购入库进入“采购管理” - “新建采购单”。选择供应商可能需要先在“供应商管理”中添加添加药品输入采购数量和单价。提交采购单并完成“入库”操作。验证返回“库存管理”页面查看对应药品的库存量是否增加。模拟销售出库进入“销售管理” - “新建销售单”。选择会员或非会员添加药品输入销售数量。提交销售单并完成“出库”或“收款”操作。验证对应药品的库存量应减少。同时检查库存量是否低于预设的“库存预警值”系统是否有预警提示如列表高亮显示。5.3 会员管理测试测试目的验证会员体系的完整性。新增会员在“会员管理”中添加一个新会员填写手机号、姓名、积分等信息。会员消费使用该会员账号进行上述的销售操作。积分变动验证销售完成后查看该会员的积分是否根据规则如消费金额按比例增加。会员查询尝试根据手机号或姓名搜索该会员确认信息可查。5.4 销售与报表统计测试测试目的验证核心业务流程闭环和数据统计功能。完成一笔完整销售从新建销售单、选择会员/药品、出库、收款完成整个流程。查看销售记录在“销售查询”或“订单管理”中应能查到刚创建的销售单包括明细。报表统计进入“销售统计”或“报表中心”。尝试按“今日”、“本周”、“本月”查看销售总额、毛利。尝试查看“药品销售排行”报表。验证报表数据应与实际发生的销售记录吻合。测试成功标准所有页面加载正常无404或500错误。数据库的增删改查操作能正确反映到页面上。业务逻辑正确如库存扣减、积分增加。报表数据计算准确。6. 接口API与代码结构导读对于毕业设计答辩和学习而言理解代码结构和关键API比仅仅运行系统更重要。本系统采用经典的三层架构。6.1 项目代码结构分析在IDEA中展开src/main/java目录典型的包结构如下com.xxx.pharmacy ├── PharmacyApplication.java # SpringBoot主启动类 ├── config/ # 配置类如WebMvc配置 ├── controller/ # 控制层接收请求调用Service │ ├── DrugController.java # 药品相关请求处理 │ ├── SaleController.java # 销售相关请求处理 │ └── ... ├── service/ # 业务逻辑层接口 │ ├── DrugService.java │ └── ... ├── service/impl/ # 业务逻辑层实现 │ ├── DrugServiceImpl.java │ └── ... ├── mapper/ # 数据持久层接口 (MyBatis Mapper) │ ├── DrugMapper.java │ └── ... ├── entity/ # 实体类与数据库表对应 │ ├── Drug.java │ └── ... └── dto/ 或 vo/ # 数据传输对象或视图对象 └── ...src/main/resources/下mapper/存放MyBatis的XML映射文件如果使用XML方式。static/存放静态资源CSS, JS, 图片。templates/存放Thymeleaf模板页面.html。6.2 核心API接口示例以“根据ID查询药品”这个功能为例跟踪其API调用链前端请求浏览器访问http://localhost:8080/drug/detail?id1。Controller层 (DrugController.java)Controller RequestMapping(/drug) public class DrugController { Autowired private DrugService drugService; GetMapping(/detail) public String getDrugDetail(RequestParam(id) Integer id, Model model) { Drug drug drugService.getDrugById(id); model.addAttribute(drug, drug); return drug/detail; // 返回视图名称对应 templates/drug/detail.html } }Service层 (DrugServiceImpl.java)Service public class DrugServiceImpl implements DrugService { Autowired private DrugMapper drugMapper; Override public Drug getDrugById(Integer id) { // 这里可以加入业务逻辑如权限校验、日志记录等 return drugMapper.selectByPrimaryKey(id); } }Mapper层 (DrugMapper.java)Mapper // MyBatis注解 public interface DrugMapper { Drug selectByPrimaryKey(Integer id); }SQL映射 (DrugMapper.xml)在resources/mapper/下找到对应的XML文件里面定义了具体的SQL。select idselectByPrimaryKey resultTypecom.xxx.pharmacy.entity.Drug SELECT * FROM drug WHERE id #{id} /select实体类 (Drug.java)字段与drug表列对应。视图层 (detail.html)Thymeleaf模板接收model传来的drug对象渲染页面。RESTful API示例部分现代项目可能采用前后端分离Controller会返回JSON。RestController // 注意是RestController不是Controller RequestMapping(/api/drug) public class DrugApiController { Autowired private DrugService drugService; GetMapping(/{id}) public ResultDrug getDrug(PathVariable Integer id) { Drug drug drugService.getDrugById(id); return Result.success(drug); // Result是自定义的统一响应封装类 } }访问GET http://localhost:8080/api/drug/1将返回JSON数据。6.3 如何基于此项目进行二次开发修改页面在templates/下找到对应的.html文件使用HTML/Thymeleaf语法修改。增加字段在数据库表中添加列。在对应的Entity类中添加属性及Getter/Setter。在Mapper.xml的SQL中增加该字段。在Service和Controller中处理该字段的逻辑。在前端表单和展示页面中增加该字段。增加新模块在entity/下创建新实体类。在mapper/下创建Mapper接口和XML文件。在service/和service/impl/下创建业务接口和实现。在controller/下创建控制器。在templates/下创建视图页面。在菜单配置处可能是一个HTML片段或数据库配置添加新菜单项。7. 资源占用与性能观察作为一个SpringBoot单体应用其资源消耗主要取决于访问量和数据量在本地开发和学习阶段通常不是问题。内存占用启动后在任务管理器Windows或活动监视器Mac中查看Java进程java.exe或javaw。典型的内存占用在300MB - 800MB之间具体取决于JVM堆内存设置在pom.xml或启动命令中通过-Xmx参数配置。观察方法启动时可以在IDEA的Run/Debug Configurations的VM options中添加-Xmx512m来限制最大堆内存为512MB。CPU占用在无用户访问的空闲状态下CPU占用率极低接近0%。在执行复杂查询、报表统计或批量导入数据时CPU占用会有一个短暂的峰值。数据库连接SpringBoot默认使用HikariCP连接池。连接数配置在application.properties中如spring.datasource.hikari.maximum-pool-size10。在低并发下活跃连接数通常为1-2个。可以通过MySQL命令SHOW PROCESSLIST;查看。启动时间在开发机SSD硬盘上首次冷启动依赖已下载通常在5-15秒内。热启动代码改动后通过Spring Boot DevTools可以实现秒级重启。性能优化提示针对毕设答辩或深入学习慢SQL监控在application.properties中开启MyBatis SQL日志观察哪些查询耗时较长。logging.level.com.xxx.pharmacy.mapperDEBUG接口响应时间使用浏览器开发者工具的Network面板查看每个页面或API请求的响应时间。JVM监控可以使用JDK自带的jconsole或VisualVM工具连接到本地Java进程监控堆内存、线程、CPU使用情况。8. 常见问题与排查方法在部署和运行过程中你可能会遇到以下问题。这里提供排查思路。问题现象可能原因排查方式解决方案启动时报错Failed to configure a DataSource数据库连接配置错误或数据库服务未启动。1. 检查application.properties中的url,username,password。2. 检查MySQL服务是否运行services.msc或systemctl status mysql。3. 检查数据库名pharmacy_db是否存在。1. 修正配置信息。2. 启动MySQL服务。3. 执行SQL脚本创建数据库。启动时报错java.net.ConnectException: Connection refused数据库地址或端口错误。确认spring.datasource.url中的localhost:3306是否是你的MySQL实际地址和端口。修改为正确的地址和端口。启动时报错Access denied for user ‘root‘‘localhost‘数据库用户名或密码错误。确认配置的密码与MySQL的root密码一致。使用正确的密码或创建一个新的数据库用户专门用于本项目。页面访问localhost:8080报 4041. 项目未成功启动。2. 上下文路径(server.servlet.context-path)配置了其他路径。1. 查看控制台日志确认Tomcat是否在8080端口启动成功。2. 检查application.properties是否有server.servlet.context-path/xxx配置。1. 解决启动错误。2. 访问localhost:8080/xxx或删除该配置。页面能打开但样式(CSS/JS)丢失静态资源路径错误或被拦截。1. 检查浏览器开发者工具Console和Network标签看CSS/JS文件是否404。2. 检查static目录下的文件路径是否正确。1. 确保Thymeleaf模板中引用静态资源的路径正确如{/css/style.css}。2. 检查Spring Security等安全配置是否放行了静态资源。新增/修改数据后页面没变化1. 事务未提交。2. 浏览器缓存。3. 代码逻辑错误未真正操作数据库。1. 直接查询数据库看数据是否已存入。2. 使用浏览器无痕模式测试。3. 在Service方法中打日志或调试看SQL是否执行。1. 确保Service方法添加了Transactional注解如果需要。2. 清除浏览器缓存。3. 检查Mapper的SQL和参数绑定是否正确。打包成Jar后运行找不到模板页面Thymeleaf模板文件未正确打包进Jar。使用jar tf target/xxx.jar查看Jar包内部结构确认templates/和static/目录是否存在。检查pom.xml中maven-resources-plugin的配置确保src/main/resources下的资源文件被包含。端口8080被占用本机有其他程序如另一个Tomcat、Skype等占用了8080端口。命令行运行 netstat -anofindstr :8080(Windows) 或lsof -i:8080 (Mac/Linux) 查找占用进程。9. 最佳实践与使用建议为了让你更好地利用这个项目完成毕设或学习这里有一些实践建议。代码阅读与理解优先在运行系统后不要停留在点击页面上。对照第6节的代码导读选择一个核心模块如“药品管理”从Controller到Mapper完整地跟踪一遍代码执行流程。这是理解SpringBoot项目架构最快的方式。数据库设计文档化打开数据库仔细查看每张表的字段、类型、主键、外键。尝试画出简单的ER图。理解表关系如销售单sale_order和销售明细sale_item的一对多关系对答辩和后续修改至关重要。创建你自己的测试数据不要一直用初始化的数据。通过系统界面或直接执行SQL创建一套属于你自己的测试数据药品、会员、销售记录等。这能帮你更深入地测试功能并在答辩时展示你对数据的掌控力。进行简单的二次开发这是毕设获得高分的关键。不要只满足于运行原项目。尝试增加一个字段在药品表中增加“保质期”字段并在所有相关页面新增、编辑、列表、详情中实现其展示和编辑功能。增加一个简单模块例如“供应商管理”包含供应商的增删改查。修改一个业务逻辑例如修改会员积分规则消费1元积2分。增加一个报表例如“月度利润统计报表”。版本管理使用Git进行版本控制。在开始二次开发前先建立一个初始的提交。每完成一个功能或修复一个Bug都做一次提交并写好注释。这不仅是好习惯也能在答辩时展示你的工程能力。准备部署演示学习如何将项目打包成可独立运行的Jar文件并在一个干净的机器上或使用Docker部署。这能体现项目的可交付性。撰写项目文档即使源码提供了README你也应该为自己写一份文档内容包括项目简介、技术栈、部署步骤、模块说明、你的二次开发内容、遇到的问题及解决方案。这份文档将是毕设论文和答辩PPT的重要素材。合规与安全思考在毕设论文中可以讨论此系统的局限性例如密码是否明文存储应使用BCrypt加密是否有权限控制通常教学项目只有登录控制可讨论增加基于角色的访问控制RBAC数据备份机制如何这些思考能提升论文深度。这个基于SpringBoot的药店管理系统项目其最大价值在于提供了一个真实、完整、可运行的Java Web开发范本。它帮你跳过了最枯燥的基础框架搭建让你能直接聚焦于业务逻辑、代码组织和功能实现。对于毕业设计它是一个优秀的起点对于技能学习它是一个绝佳的沙箱。建议你按照“部署运行 - 功能验证 - 代码精读 - 动手修改”的路径深入下去把里面的技术点真正转化为自己的开发能力。如果在操作中遇到本文未覆盖的问题多查看控制台日志、善用搜索引擎、并仔细检查每一步的配置大部分问题都能迎刃而解。