Part01 ☀️

YangeIT大约 23 分钟JDKIdeaSwingGui

Part01 ☀️

课程内容

  • 编程环境安装
    • JDK安装Java运行环境
    • Idea工具安装编码工具
    • Idea编程插件提高编码速度!
  • 项目搭建
    • 项目说明和创建项目
    • 面向对象语法回顾
    • Swing介绍和常用组件介绍
    • 登录页面实现
    • 登录逻辑实现
    • 注册逻辑实现

1. 实训编码的环境1

实训编码的环境

image
image

链接:https://pan.baidu.com/s/1kFAWQcom7la9rZTXpl3fVg?pwd=5vqjopen in new window 提取码:5vqj

复制这段内容后打开百度网盘手机App,操作更方便哦

代码操作

🎯1. JDK

  1. JDK是 java 运行环境配置的工具包,能够是 java 程序运行更加方便顺畅,帮助用户进行编程开发时代码数据库调用,

  2. 安装 JDK 是学习 java 程序语言的第一步

  3. JDK 是整个 java 程序的核心,包含 java 运行环境、java 工具和 java 基础类库等,是 java 语言开发工作者必备的工具,让编程更加高效和简单。

  4. 安装和教程如下:

image
image

jdk-11.0.20_windows-x64_bin是JDK11的版本

jdk-8u162-windows-x64.exe是JDK8的版本

  1. 说明:
    • 安装 JDK 后,配置环境变量 JAVA_HOME,并且在cmd窗口中,输入java -version 提示如下图

      验证是否安装JDK,并且配置好环境变量
      验证是否安装JDK,并且配置好环境变量
Java版本列表
Java版本列表
  • Java 现在发布的版本很快,有很多版本,但是真正会被大规模使用的是 3 年一个的 LTS 版本。每 3 年发布一个 LTS(Long-Term Support),长期维护版本。意味着只有Java 8 ,Java 11, Java 17,Java 21 才可能被大规模使用。
  • 企业开发中主流都是使用 jdk8或者JDK11,JDK8的版本是 2014 年发布的,JDK11的版本是 2018 年发布的,JDK17的版本是 2021 年发布的
  • 本项目会使用AI大模型,因此需要安装JDK17以上的版本

🎯 2. Idea

  1. IDEA 全称 IntelliJ IDEA,是 java 编程语言的集成开发环境
  2. IntelliJ 在业界被公认为最好的 Java 开发工具,尤其在AI代码助手、代码自动提示、重构、JavaEE 支持、各类版本工具(git、svn 等)、JUnit(单元测试)、代码分析、 创新UI设计等方面的功能非常好用。
  3. IDEAJetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版还支持 HTML,CSS,PHP,MySQL,Python
image
image
image
image
  1. 安装和教程如下:
2023版本
2023版本

😃 安装任何一个版本都可以,编码都是一样的哦,无非就是新版本的支持的插件稍微多一些,皮肤跟好看一点

  1. 安装注意事项:
  • 安装 idea 后,会提示是否试用,可以选择试用(30 天)
  • 也可以使用免费版(社区版),但是免费版的功能有限

🎯 3. Maven

image
image

Maven 是专门用于管理和构建 Java 项目的工具Java开发几乎必用

官网:https://maven.apache.org/open in new window

安装教程:看焱哥在U盘或者网盘中对应的截图(只有三步哦)

Maven是什么,有什么用?后面再讲,现在先把软件安装好 👈

🎯 4. MySQL

mysql的创始人Monty

Monty,是MySQL的CTO和联合创始人,撰写了MySQL95%的服务器端代码。在MySQL以10亿美元的价格被卖给SUN,SUN又被Oracle收购后,MySQL的所有权也落入Oracle的手中。为了保持MySQL的开源使用不受影响,Monty又在2009年创立了MariaDB。

MySQL 是一个关系型数据库管理系统open in new window,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。

  1. MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

  2. 项目使用 MySQL5.7或Mysql8.0版本已经安装了,不需要重装

4.1 Mysql安装包

跳转到 顶部的环境、软件安装中下载资料中下载 image

mysql安装后验证
mysql安装后验证

注意: 如果不清楚已经是否安装了Mysql,可以查看任务管理器中的服务,是否有mysql的服务

任务管理器中的mysql服务
任务管理器中的mysql服务

🎯 5. 截图贴图软件

Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、贴图、标注等功能。

你可以将代码的主要思路和语法,截图贴在屏幕的右上角上,方便你随时查看,提高编码效率

  • 安装方式:压缩包解压缩后,点击启动程序即可使用(右下角会出现图标),不需要安装。
image
image
  • 快捷键:
    • 截屏 :默认为 F1
    • 贴图 :默认为 F3

总结

课堂作业

  1. 参考上述讲义,完成软件和插件的安装!🎤

如果不清楚自己是否装了,可以举手问焱哥

2. 常用插件

常用插件

安装插件前,关闭电脑所有的防火墙

image
image

🎯 MavenHelper

Maven Helperimage 可以帮助我们在 IDEA 中更好地开发 maven 项目,主要功能包括:

  • 更方便地执行 maven 命令;
  • 分析和排除 Maven 冲突;
  • 自定义 Maven goals;
  • 在当前 Module 所在的路径中打开 Terminal;

很方便的调用maven的命令,而不需要点击右侧的栏目

点击查看MavenHelper安装图解open in new window 👈 👈

🎯 MybatisX

image
image

MybatisX 插件可以让我们更方便地使用 Mybatis, 主要功能包括:

  • 关联 Mapper 文件和 xml 文件,并且支持快速跳转;
  • 代码提示;

imageimage

点击查看MybatisX安装图解open in new window

🎯 Lombok

合理地使用 Lombokimage 可以极大程度地简化代码,让代码的可读性更强。 Lombok 插件让 IDEA 拥有兼容 Lombok 的能力。

  • @Slf4j酸辣粉日志注解:方便输出日志
  • @Data注解: 可以免除set和get方法 需要导入依赖:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>

点击查看lombok安装图解open in new window

🎯 TongYi

通义灵码,你的智能编码助手。你可以问我关于编码相关的问题,我们一起更高效率、更高质量地完成编码工作

安装界面
安装界面
使用界面
使用界面
使用场景
使用场景

用过的,都说好!👍

🎯 自动导包的设置

导包场景
导包场景

可以这样设置👇

自动导包的设置图图解
自动导包的设置图图解

3. 项目说明

3.1 PMS医药管理系统的数据库设计

前言

1.1 系统定位

PMS医药管理系统(Pharmacy Management System)是面向医药企业的轻量化库存与业务管理平台,核心覆盖用户权限、药品分类、药品档案、入库管理、出库管理、库存监控六大模块,支持药品全生命周期追溯与库存精准管控。

1.2 设计原则

  • 简化业务:去除明细表,单张入库/出库单仅支持一种药品,降低操作复杂度;
  • 扁平分类:分类表采用平铺结构(无层级),通过“分类类型”区分业务场景;
  • 字段对齐实体:数据库字段与Java实体类严格映射(如用户表nicknametelphone);
  • 可追溯性:记录操作时间、批次、操作人,支持库存变动溯源;
  • 性能优先:库存表冗余存储当前库存量,避免高频联表计算。

1.3 实体关系图(E-R图)

image
image
  • 用户:1:N关联入库单/出库单(操作关系);
  • 分类:1:N关联药品(分类包含药品);
  • 药品:1:N关联库存(药品可有多批次库存);
  • 入库单/出库单:N:1关联药品(单据对应一种药品)。

1.4 表清单与核心字段说明

表名功能描述核心字段(中文)
t_user(用户表)存储系统用户信息用户ID、登录账号、昵称、加密密码、角色、联系电话、创建时间、更新时间
t_category(分类表)存储药品分类(平铺结构)分类ID、分类编码、分类名称、分类类型、状态、排序序号、描述、创建时间、更新时间
t_drug(药品表)存储药品基础档案药品ID、药品编码、药品名称、规格、生产厂家、批准文号、参考零售价、所属分类ID、状态、创建时间
t_stock_in(入库单表)存储药品入库记录入库单ID、入库单号、供应商、药品ID、批次号、生产日期、效期、入库数量、入库单价、总金额、操作人ID、入库时间、备注
t_stock_out(出库单表)存储药品出库记录出库单ID、出库单号、客户名称、药品ID、批次号、出库数量、出库单价、总金额、操作人ID、出库时间、备注
t_inventory(库存表)存储药品实时库存(含批次)库存ID、药品ID、批次号、当前库存量、最后更新时间

1.5 详细表结构(关键字段约束)

1.5.1 用户表(t_user)
字段名(英文)字段名(中文)类型约束条件说明
id用户IDBIGINTPRIMARY KEY, AUTO_INCREMENT用户唯一标识(Java Long)
username登录账号VARCHAR(50)UNIQUE, NOT NULL登录用户名(唯一)
nickname昵称VARCHAR(50)-显示用昵称(可为空)
password加密密码VARCHAR(255)NOT NULLBCrypt加密存储
role角色VARCHAR(20)NOT NULL枚举值:admin/purchaser/warehouse/sales
telphone联系电话VARCHAR(20)-手机号或固话(可为空)
create_time创建时间DATETIMENOT NULL, DEFAULT CURRENT_TIMESTAMP记录创建时间
update_time更新时间DATETIMENOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP记录最后更新时间
1.5.2 分类表(t_category)
字段名(英文)字段名(中文)类型约束条件说明
id分类IDINTPRIMARY KEY, AUTO_INCREMENT分类唯一标识
category_code分类编码VARCHAR(50)UNIQUE, NOT NULL唯一编码(如"A001")
name分类名称VARCHAR(100)NOT NULL分类显示名称
type分类类型VARCHAR(50)NOT NULL业务类型(如"西药"/"中药"/"耗材")
status状态TINYINTNOT NULL, DEFAULT 10-停用/1-启用
sort_order排序序号INTDEFAULT 0界面排序依据(升序)
description描述VARCHAR(500)-备注说明(可为空)
create_time创建时间DATETIMENOT NULL, DEFAULT CURRENT_TIMESTAMP记录创建时间
update_time更新时间DATETIMENOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP记录最后更新时间
1.5.3 药品表(t_drug)
字段名(英文)字段名(中文)类型约束条件说明
id药品IDINTPRIMARY KEY, AUTO_INCREMENT药品唯一标识
drug_code药品编码VARCHAR(50)UNIQUE, NOT NULL唯一编码(如"YP2023001")
drug_name药品名称VARCHAR(200)NOT NULL药品通用名称
specification规格VARCHAR(100)-规格(如"0.25g*24片")
manufacturer生产厂家VARCHAR(200)-生产企业名称
approval_number批准文号VARCHAR(100)UNIQUE国家药监局批准文号
reference_price参考零售价DECIMAL(10,2)-参考售价(元)
category_id所属分类IDINTFOREIGN KEY (category_id) REFERENCES t_category(id) ON DELETE RESTRICT关联分类表
status状态TINYINTDEFAULT 10-停用/1-在用
create_time创建时间DATETIMEDEFAULT CURRENT_TIMESTAMP记录创建时间
1.5.4 入库单表(t_stock_in)
字段名(英文)字段名(中文)类型约束条件说明
id入库单IDINTPRIMARY KEY, AUTO_INCREMENT入库单唯一标识
in_no入库单号VARCHAR(50)UNIQUE, NOT NULL规则:"RK+年月日+3位序号"(如RK20231001001)
supplier供应商VARCHAR(200)NOT NULL供应商名称
drug_id药品IDINTFOREIGN KEY (drug_id) REFERENCES t_drug(id) ON DELETE RESTRICT关联药品表
batch_no批次号VARCHAR(50)NOT NULL厂家生产批次号
production_date生产日期DATENOT NULL药品生产日期
expiry_date效期DATENOT NULL有效期至(需>当前日期)
quantity入库数量INTNOT NULL, CHECK (quantity > 0)入库件数
unit_price入库单价DECIMAL(10,2)NOT NULL单价(元)
total_amount总金额DECIMAL(12,2)GENERATED ALWAYS AS (quantity * unit_price) STORED自动计算(数量×单价)
operator_id操作人IDINTFOREIGN KEY (operator_id) REFERENCES t_user(id) ON DELETE RESTRICT关联用户表(操作人)
in_time入库时间DATETIMEDEFAULT CURRENT_TIMESTAMP入库操作时间
remark备注VARCHAR(500)-补充说明(可为空)
1.5.5 出库单表(t_stock_out)
字段名(英文)字段名(中文)类型约束条件说明
id出库单IDINTPRIMARY KEY, AUTO_INCREMENT出库单唯一标识
out_no出库单号VARCHAR(50)UNIQUE, NOT NULL规则:"CK+年月日+3位序号"(如CK20231001001)
customer客户名称VARCHAR(200)NOT NULL客户(医院/药店/个人)
drug_id药品IDINTFOREIGN KEY (drug_id) REFERENCES t_drug(id) ON DELETE RESTRICT关联药品表
batch_no批次号VARCHAR(50)NOT NULL出库批次号(需校验库存)
quantity出库数量INTNOT NULL, CHECK (quantity > 0)出库件数(≤批次库存)
unit_price出库单价DECIMAL(10,2)NOT NULL单价(元)
total_amount总金额DECIMAL(12,2)GENERATED ALWAYS AS (quantity * unit_price) STORED自动计算(数量×单价)
operator_id操作人IDINTFOREIGN KEY (operator_id) REFERENCES t_user(id) ON DELETE RESTRICT关联用户表(操作人)
out_time出库时间DATETIMEDEFAULT CURRENT_TIMESTAMP出库操作时间
remark备注VARCHAR(500)-补充说明(可为空)
1.5.6 库存表(t_inventory)
字段名(英文)字段名(中文)类型约束条件说明
id库存IDINTPRIMARY KEY, AUTO_INCREMENT库存记录唯一标识
drug_id药品IDINTFOREIGN KEY (drug_id) REFERENCES t_drug(id) ON DELETE CASCADE关联药品表
batch_no批次号VARCHAR(50)NOT NULL药品批次号
current_quantity当前库存量INTDEFAULT 0, CHECK (current_quantity >= 0)实时库存(≥0)
last_update_time最后更新时间DATETIMEDEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP库存变动时间(自动更新)

1.6 入库流程(库存增加)

  1. 创建入库单:操作人(采购员/库管员)填写供应商、药品、批次、数量、单价等信息,系统生成唯一入库单号;
  2. 校验与保存:校验效期>当前日期、数量>0,保存入库单;
  3. 更新库存:根据药品ID+批次号查找或创建库存记录,current_quantity += 入库数量,更新last_update_time
  4. 事务保障:入库单保存与库存更新在同一事务中,确保数据一致性。

1.7 出库流程(库存减少)

  1. 创建出库单:操作人(库管员/销售员)填写客户、药品、批次、数量、单价等信息,系统生成唯一出库单号;
  2. 校验库存:根据药品ID+批次号查询库存,current_quantity ≥ 出库数量则允许出库;
  3. 保存与扣减:保存出库单,current_quantity -= 出库数量,更新last_update_time
  4. 事务保障:出库单保存与库存扣减在同一事务中,避免超卖。

1.8 库存查询流程

  • 单药品批次库存:直接查询t_inventoryWHERE drug_id=? AND batch_no=?
  • 药品总库存SELECT SUM(current_quantity) FROM t_inventory WHERE drug_id=?
  • 低库存预警:定时任务扫描t_inventorycurrent_quantity < 阈值的记录,触发告警。

1.9 注意事项

  1. 一次多药品入库/出库:需拆分为多张单据(因无明细表);
  2. 分类编码唯一性category_code需全局唯一,避免重复;
  3. 密码安全password字段需BCrypt加密存储,禁止明文;
  4. 效期校验:入库时expiry_date必须>当前日期,避免无效库存;
  5. 并发控制:库存更新需通过事务+行锁(SELECT ... FOR UPDATE)避免超卖。

3.2 Maven入门 ✏️

Maven入门

在创建项目之前,先要熟悉一下Maven的作用

Maven是一个项目管理工具,可以对Java项目进行构建、依赖管理。

Maven幻灯片

  1. Maven解决了什么问题?
  2. Maven的本地仓库中存的是什么?
  3. Maven中央仓库中有世界上所有的代码吗?

3.3 PMS医药管理系统的项目结构

前言

一、工程整体定位

技术栈:Java SE + MySQL(数据存储)+Mybatis(持久层) swing/JFreeChart(界面+图表)

核心目标:用“模块化”思维组织代码,让每个功能对应明确的文件夹,方便分工协作

二、标准Java工程结构

Maven是Java最常用的构建工具,能自动管理依赖(如JFreeChart的jar包),结构规范。

最终效果图

三、核心目录/文件说明:

  1. entity/:实体类(POJO)——数据库的“镜像”

    • 作用:把数据库表的每一行数据,映射成一个Java对象(如Drug类对应drug_info表),避免直接操作数据库的ResultSet(难维护)。

    • 示例:Drug.java(药品实体)

  2. dao/:数据访问层——直接操作数据库

    • 作用 :封装所有数据库操作(如“查询所有药品”“插入入库记录”),上层(service)只需调用方法,不用关心SQL怎么写。
    • 示例 :DrugDao.java(药品数据访问层)
  3. service/:业务逻辑层——处理核心规则

    • 作用 :调用dao层获取数据,处理业务逻辑(如“入库后更新库存”“计算当前库存=入库-出库”),是“数据”和“界面”之间的桥梁。
    • 示例 :StockService.java(库存业务逻辑)
  4. ui/:界面层——用户交互的窗口

    • 作用 :用Swing写窗口(如登录窗口、药品管理窗口),调用service层的方法获取数据,展示给用户或接收用户输入。
    • 示例 :LoginFrame.java(登录窗口)
  5. resources/:资源文件——配置与脚本

    • 作用 :存放配置文件(如数据库连接信息)
    • 示例 :mybatis-config.xml(Mybatis配置文件)
  6. pom.xml:Maven依赖配置(关键!

    • 作用 :告诉Maven,这个项目需要哪些jar包(如JFreeChart、Mybatis等)
    • 示例 :pom.xml(Maven依赖配置文件)

先做“能用”再“完美”:先实现“药品录入→入库→库存查询”的核心流程,再补图表、预警等功能;

四、创建项目

熟悉了项目的结构,接下来,我们根据上面的结构,创建PMS医药管理系统的项目的架子吧!!! 👇 👇

  1. 打开IDEA,在欢迎页面,检查配置Maven仓库路径
  2. 创建空的Maven项目
  3. 根据上面的结构,创建项目的架子
  4. 在pom.xml文件中,添加Mybatis的起步依赖和MySQL驱动依赖
  5. Idea链接数据库(可选,也可以使用Navicat连接)
1. 打开IDEA,在欢迎页面,检查配置Maven仓库路径
image
image
2. 创建空的Maven项目
image
image
项目创建后
项目创建后
3. 根据上面的结构,创建项目的架子

在src-main-java下,先创建cn.yangeit包,然后在这个包下创建entity、dao、service、ui文件夹和Application.java文件启动类,如下:👇

image
image
image
image
4. 在pom.xml文件中,添加Mybatis的起步依赖和MySQL驱动依赖

项目用到了其他的jar包,需要在pom.xml文件中添加依赖,不需要直接使用jar包,而是使用Maven的依赖管理机制,自动下载jar包。

image
image
    <dependencies>
<!--小辣椒lombok依赖,可以免除getset方法,减少代码量-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
<!--mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
<!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
<!--hutool工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.37</version>
        </dependency>
<!--Java Swing外观组件库-->
        <dependency>
            <groupId>com.formdev</groupId>
            <artifactId>flatlaf</artifactId>
            <version>3.2</version>
        </dependency>
    </dependencies>

缺图

5. Idea链接数据库(可选,也可以使用Navicat连接)

5.1. 按照下图,连接数据库:👇

image
image

5.2. 创建pms数据库,设置编码为utf-8mb4,创建t_user表,并导入一下假数据

-- 创建数据库 mybatis
create database if not exists pms default character set utf8mb4 collate utf8mb4_general_ci;
-- 使用数据库
use pms;

-- 删除原有的user表
DROP TABLE IF EXISTS `t_user`;
-- 创建user表 有id,username,nickname,password,role,telphone,创建时间,更新时间
CREATE TABLE `t_user` (
                        `id` bigint(20) NOT NULL AUTO_INCREMENT,
                        `username` varchar(32) NOT NULL UNIQUE,
                        `nickname` varchar(32) NOT NULL,
                        `password` varchar(32) NOT NULL DEFAULT '12345678',
                        `role` varchar(32) NOT NULL DEFAULT 'user', -- user:普通用户,admin:管理员
                        `telphone` varchar(32) ,
                        `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
                        `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                         PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;


-- 插入数据
INSERT INTO `t_user` VALUES (1, 'admin', '管理员', '12345678', 'admin', '12345678901', '2024-06-25 16:00:00', '2024-06-25 16:00:00');
INSERT INTO `t_user` VALUES (2, 'zhangsan', '张三', '12345678', 'user', '12345678902', '2024-06-25 16:00:00', '2024-06-25 16:00:00');

image
image

如果在Idea中执行sQL,全选后,点击左上角的运行,会自动执行SQL语句,数据库和数据表会自动创建。

image
image

3.4 集成Mybatis

前言

根据上面的项目模块可知,我们的数据是存在数据库中的,我们需要从数据库中获取数据,所以我们需要一个工具来操作数据库,Mybatis就是一个工具,它可以帮助我们操作数据库。

image
image

接下来,我们就来集成Mybatis吧!!! 👇 👇

步骤如下:

  1. 在resources目录下,创建mybatis-config.xml文件,用于配置Mybatis,如数据库连接信息,Mybatis的映射文件路径等
  2. 在config目录下,创建MybatisConfig.java文件,用于配置Mybatis
  3. 在entity目录下,创建User.java实体类,用于存放数据库中的数据(字段和类型要和数据库中的字段和类型一致)
  4. 在dao目录下,创建UserDao.java文件和UserMapper.java接口,用于操作数据库
  5. 在resources目录下,创建mappers目录,用于存放Mybatis的映射文件
  6. 更新mybatis-config.xml文件,添加映射文件路径
  7. 在Application的main方法中,进行测试
完成后项目结构图
完成后项目结构图

提示:看上去很繁琐,其实一点也不简介,如果后期学习了SpringBoot,会发现SpringBoot已经帮我们做了这些步骤,只需要在配置文件中配置数据库连接信息,就可以直接使用了。

1. 在resources目录下,创建mybatis-config.xml文件,用于配置Mybatis,如数据库连接信息,Mybatis的映射文件路径等

image
image
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
    <!-- 驼峰命名规则 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 数据库连接信息 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/pms?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件路径 -->
    <mappers>

    </mappers>
</configuration>
image
image

2. 在config目录下,创建MybatisConfig.java文件,用于配置Mybatis

image
image
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

/**
 * @description: mybatis 配置类 加载mybatis-config.xml
 * 采用单例模式
 */
public class MybatisConfig {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private MybatisConfig() {

    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

3. 在entity目录下,创建User.java实体类,用于存放数据库中的数据(字段和类型要和数据库中的字段和类型一致)

图解
图解

User.java类

import lombok.Data;
import java.time.LocalDateTime;

/**
 * @Description 用户实体类(字段和类型要与数据库字段和类型一致)
 */
@Data
public class User {
    private Long id;
    private String username;
    private String nickname;
    private String password;
    private String role;
    private String telphone;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

}

4. 在dao目录下,创建UserDao.java文件和UserMapper.java接口,用于操作数据库

UserDao.java这个是一个类,主要对外提供一个方法,用于获取SqlSession对象,然后通过SqlSession对象,获取UserMapper对象,然后调用UserMapper对象的方法,来操作数据库。

package cn.yangeit.dao;


import cn.yangeit.config.MybatisConfig;
import cn.yangeit.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

/**
 * @description: 用户数据访问层 对外提供方法
 */
public class UserDao {
    private SqlSessionFactory sqlSessionFactory;

    // 构造方法,用于获取SqlSessionFactory对象
    public UserDao() {
        sqlSessionFactory = MybatisConfig.getSqlSessionFactory();
    }

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户
     */
    public User getUserByUsername(String username) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUserByUsername(username);
        sqlSession.close();
        return user;
    }

    /**
     * 添加用户
     *
     * @param user 用户
     * @return 添加结果
     */
    public int addUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int count = userMapper.addUser(user);
        sqlSession.commit();
        sqlSession.close();
        return count;
    }
}

UserMapper.java 这个是一个接口,主要定义了操作数据库的方法,如查询用户,添加用户等。

import cn.yangeit.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

// 用户映射接口,用于定义用户映射的方法
//此处为了方便演示,通过@Select注解和@Insert注解来定义方法

public interface UserMapper {
    @Select("select * from user where username = #{username}")
    User getUserByUsername(String username);

    int addUser(User user);
    
    //查询用户列表(不显示密码)
    @Select("select id, username, nickname, role, telphone, create_time, update_time from user")
    List<User> getAllUsersWithoutPassword();

    //删除用户
     @Delete("delete from user where id = #{id}")
    int deleteUser(Long id);

     //修改密码
    @Update("update user set password = #{password} where id = #{id}")
    int updatePassword(Long id, String password);
}

5. 在resources目录下,创建mappers目录,用于存放Mybatis的映射文件

UserMapper.xml 这个是映射文件,用于定义映射方法的SQL语句。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.yangeit.dao.UserMapper">

    <insert id="addUser">
        insert into user(username,nickname,password,role,telphone,create_time,update_time) 
                    values (#{username},#{nickname},#{password},#{role},#{telphone},#{createTime},#{updateTime})
        

    </insert>
</mapper>

注意: namespace的值要和UserMapper接口的全类名一致

整体效果图
整体效果图

6. 更新MybatisConfig.java文件,添加映射文件路径

image
image

7. 测试

在Application中创建一个testUserMapper方法,用于测试UserMapper接口的方法。👇

image
image

恭喜你,完成了项目搭建,接下来就可以完成其他模块了