Java GUI,mybatis实现资产管理系统

news/2024/11/17 2:50:53/

Java GUI——资产管理系统

前言:为了做java课设,学了一手Java GUI。感觉蛮有意思的,写写文章,做个视频记录一下。欢迎大家友善指出我的不足

资产管理系统录制视频,从头敲到尾

模块划分

  • 资产信息管理
    • 资产信息查询 【各种条件查询】
    • 资产信息修改(不能对资产进行领用、归还、报废
    • 资产信息增加
    • 资产信息删除
  • 人员信息管理
    • 人员信息查询 【各种条件查询】
    • 人员信息修改
    • 人员信息增加
    • 人员信息删除
  • 资产设备领用、归还、报废
    • 资产设备操作(仅限于领用、归还、报废
    • 资产设备查询 【各种条件】

数据库创建

资产表

DROP TABLE IF EXISTS `asset_information`;
CREATE TABLE `asset_information`  (`asset_number` int NOT NULL AUTO_INCREMENT COMMENT '资产编号',`asset_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '资产名称',`price` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '价格',`purchase_date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '购买日期',`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '状态 0-默认 1-领用 2-归还 3-报废',`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`asset_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1007 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of asset_information
-- ----------------------------
INSERT INTO `asset_information` VALUES (1000, '潇洒哥', '1000', '', '1', '');
INSERT INTO `asset_information` VALUES (1004, '潇洒哥', '10000', '2020-09-07 14:52:54', '0', '是个蛋');

资产操作流水表

DROP TABLE IF EXISTS `asset_operation_log`;
CREATE TABLE `asset_operation_log`  (`operation_number` int NOT NULL AUTO_INCREMENT COMMENT '操作编号',`operation_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '操作类型 0-默认 1-领用 2-归还 3-报废',`asset_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '资产编号',`operation_time` datetime NULL DEFAULT NULL COMMENT '操作时间',`recipient` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '操作人',`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`operation_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of asset_operation_log
-- ----------------------------
INSERT INTO `asset_operation_log` VALUES (5, '1', '1000', NULL, '1', '无');

人员信息表

DROP TABLE IF EXISTS `personnel_information`;
CREATE TABLE `personnel_information`  (`personnel_number` int NOT NULL AUTO_INCREMENT COMMENT '人员编号',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '姓名',`gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '性别',`department` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '部门',`position` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '职位',`other` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci NULL DEFAULT NULL COMMENT '其他信息',PRIMARY KEY (`personnel_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_croatian_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of personnel_information
-- ----------------------------
INSERT INTO `personnel_information` VALUES (1, '潇洒哥', '男', '羊村', '大哥', '是个蛋,白色的蛋蛋');
INSERT INTO `personnel_information` VALUES (2, '飞鸽', '男', '鸽子部门', '二弟', '飞哥不鸽');
INSERT INTO `personnel_information` VALUES (3, '老王', '女', '军乐团', '团长', '牛逼啊');

业务流程

在这里插入图片描述

资产被人员操作后,操作记录写入资产记录表。同时根据人员的操作修改资产本身的信息。

代码编写

maven坐标

    <dependencies><!--Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency><!--MyBatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.2</version></dependency><!--MySQL--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!--fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.2.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version></plugin></plugins></build>

本项目采用模块划编写。不同模块划分为不同的包,每个包下维护若干类,每个类表示一个UI界面。

模块一:主界面

1.1)创建主界面UI

用代码构建如下界面, 但不具备界面跳转等操作
在这里插入图片描述

在这里插入图片描述

package com.xhf.keshe;import com.xhf.keshe.asset.AssetQuery;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Main extends JFrame {/*** 窗体宽*/public static final int width = 800;/*** 窗体高*/public static final int height = 600;/*** 基本字体*/public static final Font font = new Font("仿宋", Font.BOLD, 20);/*** 创建基本界面*/private JPanel workspace;public Main() {// 创建窗体setTitle("资产管理系统");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(width, height);// 创建基本界面initBasePanel();// 居中setLocationRelativeTo(null);// 初始化界面initUI();}/*** 创建基本界面*/private void initBasePanel() {this.workspace = new JPanel();workspace.setLayout(null);JLabel jLabel = new JLabel("欢迎使用资产管理系统", JLabel.CENTER);    //创建一个标签jLabel.setBounds(140, 100, 400, 60);jLabel.setFont(Main.font);workspace.add(jLabel, BorderLayout.NORTH);add(workspace);}/*** 初始化界面*/private void initUI() {// 添加菜单栏组件JMenuBar jMenuBar = new JMenuBar();// 在菜单栏(bar)中添加若干菜单(menu)String[] jMenuNameList = {"资产信息管理", "人员信息管理", "资产设备管理"};for (int i = 0; i < 3; ++i) {// jMenu的名称String jMenuName = jMenuNameList[i];JMenu jMenu = new JMenu(jMenuName);// 为menu添加itemaddItemForJMenu(jMenu, jMenuName);// 设置字体jMenu.setFont(font);// 将jMenu添加到bar中jMenuBar.add(jMenu);}// 添加jMenuBarsetJMenuBar(jMenuBar);}/*** 为不同名称的jMenu添加item* @param jMenu* @param jMenuName*/private void addItemForJMenu(JMenu jMenu, String jMenuName) {String[] item1NameList = {"资产信息查询", "资产信息修改", "资产信息增加", "资产信息删除"};String[] item2NameList = {"人员信息查询", "人员信息修改", "人员信息增加", "人员信息删除"};String[] item3NameList = {"资产设备查询", "资产设备操作"};// 判断jMenu名称, 然后添加itemswitch (jMenuName) {case "资产信息管理":for (String s : item1NameList) {addItem(s, jMenu);}break;case "人员信息管理":for (String s : item2NameList) {addItem(s, jMenu);}break;case "资产设备管理":for (String s : item3NameList) {addItem(s, jMenu);}break;}}/*** 创建jMenuItem, 同时取名name, 将item添加到menu中* @param name* @param jMenu*/private void addItem(String name, JMenu jMenu) {JMenuItem item = new JMenuItem(name);item.setFont(font);jMenu.add(item);}public static void main(String[] args) {Main main = new Main();main.setVisible(true);}
}

1.2)增加主界面的界面跳转逻辑

所有的界面跳转,都可以理解为以下几个操作

  1. 触发相应操作
  2. 清除当前界面
  3. 添加需要界面
  4. 界面重新渲染

分析可知,通过点击item,才触发界面跳转的操作。因此我们需要给不同的item上添加相应的监听器,用于执行界面跳转的逻辑

    /*** 创建jMenuItem, 同时取名name, 将item添加到menu中* @param name* @param jMenu*/private void addItem(String name, JMenu jMenu) {JMenuItem item = new JMenuItem(name);// 为不同的item添加监听操作item.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 为不同的item添加不同的界面switch (name) {case "资产信息查询":// 清空当前界面remove(workspace);// 添加想要的界面workspace = new AssetQuery();add(workspace);// 重新绘制界面validate();break;}}});item.setFont(font);jMenu.add(item);}

模块二: 资产界面

2.1)mybatis整合

学习资料

(44条消息) Mybatis基本使用教程(小白向)_敲代码它不香嘛的博客-CSDN博客

入门_MyBatis中文网

2.2.1) 编写mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><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/keshe1"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!--后续编写的mapper.xml都需要添加到这里--><mapper resource="mapper/assetInformationMapper.xml"/><mapper resource="mapper/personnelInformationMapper.xml"/><mapper resource="mapper/operateMapper.xml"/></mappers>
</configuration>

如下图,编写mybatis-config.xml【核心配置文件】文件,放置在resources根目录

image-20230710155452363
2.2.2) 获取SqlSession

sqlsession是mybatis中的核心工具,有了它才有后续操作。sqlsession封装jdbc的数据库连接操作

package com.xhf.keshe.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class GetSqlsession {private static InputStream inputStream;//这个方法生成一个生产Sqlsession的工厂,即SqlSessionFactorypublic static SqlSessionFactory createfactory() {{try {inputStream = Resources.getResourceAsStream("mybatis-config.xml");} catch (IOException e) {e.printStackTrace();}}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过把这个工厂return出来,以便后续通过这个工厂获得SqlSession对象return sqlSessionFactory;}//这个方法获得SqlSession对象public static SqlSession getsqlsession(){return createfactory().openSession();}
}
2.2.3)编写实体类
package com.xhf.keshe.asset.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssetInformation implements Serializable {private static final long serialVersionUID = 1L;/*** 资产编号*/private Integer assetNumber;/*** 资产名称*/private String assetName;/*** 价格*/private String price;/*** 购买日期*/private String purchaseDate;/*** 状态 0-默认 1-领用 2-归还 3-报废*/private String status;/*** 备注*/private String remarks;
}
2.2.5) 编写mapper接口
package com.xhf.keshe.asset.mapper;import com.xhf.keshe.asset.entity.AssetInformation;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface AssetInformationMapper {/*** 查询全部信息* @return*/List<AssetInformation> list();/*** 根据id查询数据*/AssetInformation listById(@Param("id") String id);/*** 修改*/void update(@Param("entity") AssetInformation entity);/*** 新增数据*/void insert(@Param("entity") AssetInformation entity);/*** 根据id删除数据*/void deleteById(@Param("id") Integer id);
}
2.2.6)编写mapper的xml文件
<?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="com.xhf.keshe.asset.mapper.AssetInformationMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.asset.entity.AssetInformation" ><result column="asset_number" property="assetNumber" /><result column="asset_name" property="assetName" /><result column="price" property="price" /><result column="purchase_date" property="purchaseDate" /><result column="status" property="status" /><result column="remarks" property="remarks" /></resultMap><insert id="insert" useGeneratedKeys="true" keyProperty="assetNumber">INSERT INTOasset_informationVALUES (null,#{entity.assetName},#{entity.price},#{entity.purchaseDate},#{entity.status},#{entity.remarks});</insert><update id="update">UPDATE asset_information<set><if test="entity.assetName != null"> asset_name = #{entity.assetName}, </if><if test="entity.price != null"> price = #{entity.price}, </if><if test="entity.purchaseDate != null"> purchase_date = #{entity.purchaseDate}, </if><if test="entity.status"> status = #{entity.status}, </if><if test="entity.remarks"> remarks = #{entity.remarks} </if></set>WHEREasset_information.asset_number = #{entity.assetNumber}</update><delete id="deleteById">DELETE FROM asset_information WHERE asset_information.asset_number = #{id};</delete><select id="list" resultMap="BaseResultMap">SELECT * FROM asset_information;</select><select id="listById" resultMap="BaseResultMap">SELECT * FROM asset_information WHERE asset_number = #{id};</select></mapper>

2.2)查询界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;/*** 维护资产信息查询界面*/
public class AssetQuery extends JPanel {// 表格列名public static final String[] columnNames = {"资产编号", "资产名称", "价格", "购买日期", "状态", "备注"};/*** sqlsession*/private SqlSession sqlSession;/*** mapper*/private AssetInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}public AssetQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("资产查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<AssetInformation> list = mapper.list();Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];AssetInformation assetInformation = list.get(i);res[0] = assetInformation.getAssetNumber();res[1] = assetInformation.getAssetName();res[2] = assetInformation.getPrice();res[3] = assetInformation.getPurchaseDate();res[4] = assetInformation.getStatus();res[5] = assetInformation.getRemarks();data[i] = res;}return data;}
}

2.3)添加界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class AssetAdd extends JPanel {/*** title宽度*/public static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/public static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/public static final int yTitle = Main.height / 10;/*** y轴间距*/public static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** 获取mapper*/private static AssetInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("添加");public AssetAdd() {setLayout(null);// 设置title坐标JLabel title = new JLabel("添加资产信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < AssetQuery.columnNames.length - 1; ++i) {// 创建JLabelJLabel jLabel = new JLabel(AssetQuery.columnNames[i + 1]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据save();}});add(title);add(jButton);}/*** 提交数据*/private void save() {System.out.println("保存数据");AssetInformation entity = new AssetInformation();entity.setAssetName(jTextFieldList.get(0).getText());entity.setPrice(jTextFieldList.get(1).getText());entity.setPurchaseDate(jTextFieldList.get(2).getText());entity.setStatus(jTextFieldList.get(3).getText());entity.setRemarks(jTextFieldList.get(4).getText());// 保存数据mapper.insert(entity);// 事务提交sqlSession.commit();JOptionPane.showMessageDialog(null, "添加成功");}
}

2.4)修改界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class AssetUpdate extends JPanel {/*** title宽度*/private static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/private static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/private static final int yTitle = Main.height / 10;/*** y轴间距*/private static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** sqlsession*/private SqlSession sqlSession;/*** 获取mapper*/private AssetInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(AssetInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("修改");public AssetUpdate() {setLayout(null);// 设置title坐标JLabel title = new JLabel("修改资产信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < AssetQuery.columnNames.length; ++i) {// 创建JLabelJLabel jLabel = new JLabel(AssetQuery.columnNames[i]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);if (i == 0) {System.out.println("添加button");// 添加查询按钮JButton jButton = new JButton("查询");jButton.setFont(Main.font);jButton.setBounds(xText + widthText + 10, yText, 80, heightText);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 查询数据getData();// 重置文本框读写状态setField();}});add(jButton);} else {// 设置所有的都无法修改jTextField.setEnabled(false);}// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setEnabled(false);jButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据upload();}});add(title);add(jButton);}/*** 重置textField的写状态*/private void setField() {// 除了状态, 其它都可修改for (int i1 = 0; i1 < jTextFieldList.size(); i1++) {if (i1 != 4) {jTextFieldList.get(i1).setEnabled(true);}}}/*** 根据id查询数据信息, 并进行回显*/private void getData() {// 根据jTextField中的id查询数据, 并进行数据回显String id = jTextFieldList.get(0).getText();AssetInformation assetInformation = mapper.listById(id);// 查不到if (assetInformation == null) {JOptionPane.showMessageDialog(null, "查询失败");return;}// 修改按钮功能重新开启jButton.setEnabled(true);// 数据回显jTextFieldList.get(0).setText(String.valueOf(assetInformation.getAssetNumber()));jTextFieldList.get(1).setText(assetInformation.getAssetName());jTextFieldList.get(2).setText(assetInformation.getPrice());jTextFieldList.get(3).setText(assetInformation.getPurchaseDate());jTextFieldList.get(4).setText(assetInformation.getStatus());jTextFieldList.get(5).setText(assetInformation.getRemarks());}/*** 提交数据*/private void upload() {AssetInformation entity = new AssetInformation();entity.setAssetNumber(Integer.valueOf(jTextFieldList.get(0).getText()));entity.setAssetName(jTextFieldList.get(1).getText());entity.setPrice(jTextFieldList.get(2).getText());entity.setPurchaseDate(jTextFieldList.get(3).getText());entity.setStatus(jTextFieldList.get(4).getText());entity.setRemarks(jTextFieldList.get(5).getText());// 保存数据mapper.update(entity);sqlSession.commit();JOptionPane.showMessageDialog(null, "修改成功");}
}

2.5)删除界面UI

package com.xhf.keshe.asset.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class AssetDelete extends JPanel {/*** sqlsession*/private static SqlSession sqlSession;/*** mapper*/private static AssetInformationMapper assetInformationMapper;{sqlSession = GetSqlsession.getsqlsession();assetInformationMapper = sqlSession.getMapper(AssetInformationMapper.class);}public AssetDelete() {setLayout(null);// 设置标题JLabel title = new JLabel("资产信息删除");title.setFont(Main.TitleFont);title.setBounds(AssetAdd.xTitle, AssetAdd.yTitle, AssetAdd.widthTitle, AssetAdd.heightTitle);add(title);// jLabel设置坐标int widthLabel = 100, heightLabel = 30, xLabel = AssetAdd.xTitle / 2, yLabel = AssetAdd.yTitle + AssetAdd.yGap + heightLabel, xGap = 80;JLabel jLabel = new JLabel("资产编号");jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 设置JComboxint xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;JComboBox jComboBox = new JComboBox();jComboBox.setFont(Main.font);jComboBox.setBounds(xText, yText, widthText, heightText);jComboBox.addItem("请选择");// 查询所有的id, 并添加到JComboBox中assetInformationMapper.list().forEach(e -> {jComboBox.addItem(e.getAssetNumber());});add(jLabel);add(jComboBox);// 删除按钮JButton jButton = new JButton("删除");jButton.setFont(Main.font);jButton.setBounds(AssetAdd.xTitle, AssetAdd.yTitle + 120, AssetAdd.widthTitle, AssetAdd.heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Object id = jComboBox.getSelectedItem();assetInformationMapper.deleteById((Integer) id);sqlSession.commit();JOptionPane.showMessageDialog(null, "删除成功");}});add(jButton);}
}

模块三:人员界面

3.1)mybatis整合

3.1.1)编写实体类
package com.xhf.keshe.person.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PersonnelInformation implements Serializable {private static final long serialVersionUID = 1L;/*** 人员编号*/private Integer personnelNumber;/*** 姓名*/private String name;/*** 性别*/private String gender;/*** 部门*/private String department;/*** 职位*/private String position;/*** 其他信息*/private String other;
}
3.1.2)编写mapper接口
package com.xhf.keshe.person.mapper;import com.xhf.keshe.person.entity.PersonnelInformation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface PersonnelInformationMapper {/*** 查询全部信息* @return*/List<PersonnelInformation> list();/*** 根据id查询数据*/PersonnelInformation listById(@Param("id") String id);/*** 修改*/void update(@Param("entity") PersonnelInformation entity);/*** 新增数据*/void insert(@Param("entity") PersonnelInformation entity);/*** 根据id删除数据*/void deleteById(@Param("id") Integer id);
}
3.1.3)编写mapper的xml文件
<?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="com.xhf.keshe.person.mapper.PersonnelInformationMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.person.entity.PersonnelInformation" ><result column="personnel_number" property="personnelNumber" /><result column="name" property="name" /><result column="gender" property="gender" /><result column="department" property="department" /><result column="position" property="position" /><result column="other" property="other" /></resultMap><insert id="insert">INSERT INTOpersonnel_informationVALUES (null,#{entity.name},#{entity.gender},#{entity.department},#{entity.position},#{entity.other})</insert><update id="update">UPDATE personnel_informationSET`name` = #{entity.name},gender = #{entity.gender},department = #{entity.department},`position` = #{entity.position},other = #{entity.other}WHEREpersonnel_number = #{entity.personnelNumber};</update><delete id="deleteById">DELETE FROM personnel_information WHERE personnel_number = #{id};</delete><select id="list" resultMap="BaseResultMap">SELECT * FROM personnel_information;</select><select id="listById" resultMap="BaseResultMap">SELECT * FROM personnel_information WHERE personnel_number = #{id};</select></mapper>

3.2)查询界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;/*** 维护资产信息查询界面*/
public class PersonQuery extends JPanel {/*** 获取mapper*/private static PersonnelInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}// 表格列名public static final String[] columnNames = {"人员编号", "姓名", "性别", "部门", "职位", "其它信息"};public PersonQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("人员查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<PersonnelInformation> list = mapper.list();System.out.println(list.toString());Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];PersonnelInformation personnelInformation = list.get(i);res[0] = personnelInformation.getPersonnelNumber();res[1] = personnelInformation.getName();res[2] = personnelInformation.getGender();res[3] = personnelInformation.getDepartment();res[4] = personnelInformation.getPosition();res[5] = personnelInformation.getOther();data[i] = res;}return data;}
}

3.3)添加界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class PersonAdd extends JPanel {/*** title宽度*/public static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/public static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/public static final int yTitle = Main.height / 10;/*** y轴间距*/public static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** 获取mapper*/private static PersonnelInformationMapper mapper;/*** 获取sqlSession*/private static SqlSession sqlSession;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("添加");public PersonAdd() {setLayout(null);// 设置title坐标JLabel title = new JLabel("添加人员信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < PersonQuery.columnNames.length - 1; ++i) {// 创建JLabelJLabel jLabel = new JLabel(PersonQuery.columnNames[i + 1]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据save();}});add(title);add(jButton);}/*** 提交数据*/private void save() {System.out.println("保存数据");PersonnelInformation entity = new PersonnelInformation();entity.setName(jTextFieldList.get(0).getText());entity.setGender(jTextFieldList.get(1).getText());entity.setDepartment(jTextFieldList.get(2).getText());entity.setPosition(jTextFieldList.get(3).getText());entity.setOther(jTextFieldList.get(4).getText());// 保存数据mapper.insert(entity);// 事务提交sqlSession.commit();JOptionPane.showMessageDialog(null, "添加成功");}
}

3.4)修改界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.person.entity.PersonnelInformation;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;public class PersonUpdate extends JPanel {/*** title宽度*/private static final int widthTitle = 200, heightTitle = 40;/*** 标题x坐标*/private static final int xTitle = Main.width / 2 - widthTitle / 2;/*** 标题y坐标*/private static final int yTitle = Main.height / 10;/*** y轴间距*/private static final int yGap = 40;/*** 存储所有的JTextField*/private final List<JTextField> jTextFieldList = new ArrayList<JTextField>();/*** sqlsession*/private SqlSession sqlSession;/*** 获取mapper*/private PersonnelInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}/*** 提交button*/private final JButton jButton = new JButton("修改");public PersonUpdate() {setLayout(null);// 设置title坐标JLabel title = new JLabel("修改人员信息");title.setFont(Main.TitleFont);title.setBounds(xTitle, yTitle, widthTitle, heightTitle);// 通过title坐标, 计算剩余组件坐标, 并添加int widthLabel = 100, heightLabel = 30, xLabel = xTitle / 2, yLabel = yTitle + yGap + heightLabel, xGap = 80;int xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;for (int i = 0; i < PersonQuery.columnNames.length; ++i) {// 创建JLabelJLabel jLabel = new JLabel(PersonQuery.columnNames[i]);jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 创建JTextFieldJTextField jTextField = new JTextField();jTextField.setFont(Main.font);jTextField.setBounds(xText, yText, widthText, heightText);// 添加add(jLabel);add(jTextField);// 将所有jTextField存储jTextFieldList.add(jTextField);if (i == 0) {System.out.println("添加button");// 添加查询按钮JButton jButton = new JButton("查询");jButton.setFont(Main.font);jButton.setBounds(xText + widthText + 10, yText, 80, heightText);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 查询数据getData();// 重置文本框读写状态setField();}});add(jButton);} else {// 设置所有的都无法修改jTextField.setEnabled(false);}// 更新位置yLabel += yGap;yText += yGap;}// 添加修改buttonjButton.setEnabled(false);jButton.setFont(Main.font);jButton.setBounds(xTitle, yText + yGap, widthTitle, heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 提交数据upload();}});add(title);add(jButton);}/*** 重置textField的写状态*/private void setField() {// 除了状态, 其它都可修改for (int i1 = 0; i1 < jTextFieldList.size(); i1++) {jTextFieldList.get(i1).setEnabled(true);}}/*** 根据id查询数据信息, 并进行回显*/private void getData() {// 根据jTextField中的id查询数据, 并进行数据回显String id = jTextFieldList.get(0).getText();PersonnelInformation personnelInformation = mapper.listById(id);// 查不到if (personnelInformation == null) {JOptionPane.showMessageDialog(null, "查询失败");return;}// 修改按钮功能重新开启jButton.setEnabled(true);// 数据回显jTextFieldList.get(0).setText(String.valueOf(personnelInformation.getPersonnelNumber()));jTextFieldList.get(1).setText(personnelInformation.getName());jTextFieldList.get(2).setText(personnelInformation.getGender());jTextFieldList.get(3).setText(personnelInformation.getDepartment());jTextFieldList.get(4).setText(personnelInformation.getPosition());jTextFieldList.get(5).setText(personnelInformation.getOther());}/*** 提交数据*/private void upload() {PersonnelInformation entity = new PersonnelInformation();entity.setPersonnelNumber(Integer.valueOf(jTextFieldList.get(0).getText()));entity.setName(jTextFieldList.get(1).getText());entity.setGender(jTextFieldList.get(2).getText());entity.setDepartment(jTextFieldList.get(3).getText());entity.setPosition(jTextFieldList.get(4).getText());entity.setOther(jTextFieldList.get(5).getText());// 保存数据mapper.update(entity);sqlSession.commit();JOptionPane.showMessageDialog(null, "修改成功");}
}

3.5)删除界面UI

package com.xhf.keshe.person.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.page.AssetAdd;
import com.xhf.keshe.person.mapper.PersonnelInformationMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class PersonDelete extends JPanel {/*** sqlsession*/private static SqlSession sqlSession;/*** mapper*/private static PersonnelInformationMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(PersonnelInformationMapper.class);}public PersonDelete() {setLayout(null);// 设置标题JLabel title = new JLabel("人员信息删除");title.setFont(Main.TitleFont);title.setBounds(AssetAdd.xTitle, AssetAdd.yTitle, AssetAdd.widthTitle, AssetAdd.heightTitle);add(title);// jLabel设置坐标int widthLabel = 100, heightLabel = 30, xLabel = AssetAdd.xTitle / 2, yLabel = AssetAdd.yTitle + AssetAdd.yGap + heightLabel, xGap = 80;JLabel jLabel = new JLabel("人员id");jLabel.setFont(Main.font);jLabel.setBounds(xLabel, yLabel, widthLabel, heightLabel);// 设置JComboxint xText = xLabel + widthLabel + xGap, yText = yLabel, widthText = 300, heightText = 30;JComboBox jComboBox = new JComboBox();jComboBox.setFont(Main.font);jComboBox.setBounds(xText, yText, widthText, heightText);jComboBox.addItem("请选择");// 查询所有的id, 并添加到JComboBox中mapper.list().forEach(e -> {jComboBox.addItem(e.getPersonnelNumber());});add(jLabel);add(jComboBox);// 删除按钮JButton jButton = new JButton("删除");jButton.setFont(Main.font);jButton.setBounds(AssetAdd.xTitle, AssetAdd.yTitle + 120, AssetAdd.widthTitle, AssetAdd.heightTitle);jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Object id = jComboBox.getSelectedItem();mapper.deleteById((Integer) id);sqlSession.commit();JOptionPane.showMessageDialog(null, "删除成功");}});add(jButton);}
}

模块四:资产操作

4.1)mybatis整合

4.1.1)编写实体类
package com.xhf.keshe.operate.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssetOperationLog implements Serializable {private static final long serialVersionUID = 1L;/*** 操作编号*/private Integer operationNumber;/*** 操作类型*/private String operationType;/*** 资产编号*/private String assetNumber;/*** 操作时间*/private Date operationTime;/*** 领用人*/private String recipient;/*** 备注*/private String remarks;
}
4.1.2)编写mapper接口
package com.xhf.keshe.operate.mapper;import com.xhf.keshe.operate.entity.AssetOperationLog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface OperateMapper {/*** 查询所有数据* @return*/List<AssetOperationLog> list();/*** 保存*/void insert(@Param("entity") AssetOperationLog entity);
}
4.1.3)编写mapper的xml文件
<?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="com.xhf.keshe.operate.mapper.OperateMapper"><resultMap id="BaseResultMap" type="com.xhf.keshe.operate.entity.AssetOperationLog" ><result column="operation_number" property="operationNumber" /><result column="operation_type" property="operationType" /><result column="asset_number" property="assetNumber" /><result column="operation_time" property="operationTime" /><result column="recipient" property="recipient" /><result column="remarks" property="remarks" /></resultMap><insert id="insert">INSERT INTOasset_operation_logVALUES (null,#{entity.operationType},#{entity.assetNumber},#{entity.operationTime},#{entity.recipient},#{entity.remarks});</insert><select id="list" resultMap="BaseResultMap">SELECT * FROM asset_operation_log;</select></mapper>

4.2)资产查询界面

package com.xhf.keshe.operate.page;import com.xhf.keshe.Main;
import com.xhf.keshe.operate.entity.AssetOperationLog;
import com.xhf.keshe.operate.mapper.OperateMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.util.List;public class OperateQuery extends JPanel {/*** 列名*/public static final String[] columnNames = {"操作编号", "操作类型", "资产编号", "操作时间", "操作人", "备注"};/*** sqlsession*/private SqlSession sqlSession;/*** mapper*/private OperateMapper mapper;{sqlSession = GetSqlsession.getsqlsession();mapper = sqlSession.getMapper(OperateMapper.class);}public OperateQuery() {// 设置界面大小setSize(Main.width, Main.height);// 设置布局setLayout(new BorderLayout());// 设置标题JLabel title = new JLabel("操作查询");title.setFont(Main.TitleFont);// 设置标题为居中对其title.setHorizontalAlignment(SwingConstants.CENTER);this.add(title, BorderLayout.NORTH);// 创建表格数据Object[][] data = getData();// 创建 JTableJTable table = new JTable(data, columnNames);// 设置头的字体table.getTableHeader().setFont(Main.font);// 设置每行的高度table.setRowHeight(25);// 设置表内容字体table.setFont(Main.font);// 将表格添加到滚动面板,并将滚动面板添加到窗口JScrollPane scrollPane = new JScrollPane(table);this.add(scrollPane);}/*** 返回资产表格数据* @return*/private Object[][] getData() {// 返回list数据List<AssetOperationLog> list = mapper.list();Object[][] data = new Object[list.size()][columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[columnNames.length];AssetOperationLog operationLog = list.get(i);res[0] = operationLog.getOperationNumber();res[1] = operationLog.getOperationType();res[2] = operationLog.getAssetNumber();res[3] = operationLog.getOperationTime();res[4] = operationLog.getRecipient();res[5] = operationLog.getRemarks();data[i] = res;}return data;}
}

4.3)资产操作界面

package com.xhf.keshe.operate.page;import com.xhf.keshe.Main;
import com.xhf.keshe.asset.entity.AssetInformation;
import com.xhf.keshe.asset.mapper.AssetInformationMapper;
import com.xhf.keshe.asset.page.AssetQuery;
import com.xhf.keshe.operate.entity.AssetOperationLog;
import com.xhf.keshe.operate.mapper.OperateMapper;
import com.xhf.keshe.utils.GetSqlsession;
import org.apache.ibatis.session.SqlSession;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;public class Operate extends JPanel {/*** sqlsession*/private SqlSession sqlsession;/*** mapper*/private OperateMapper mapper;/*** mapper*/private AssetInformationMapper mapper2;/*** 资产编号*/private JTextField jTextField1;/*** 操作人员编号*/private JTextField jTextField2;/*** 备注*/private JTextField jTextField3;/*** 操作类型*/private JComboBox comboBox;{sqlsession = GetSqlsession.getsqlsession();mapper = sqlsession.getMapper(OperateMapper.class);mapper2 = sqlsession.getMapper(AssetInformationMapper.class);}public Operate() {// 设置布局setLayout(new BorderLayout());JLabel title = new JLabel("资产设备操作");title.setFont(Main.TitleFont);title.setHorizontalAlignment(SwingConstants.CENTER);add(title, BorderLayout.NORTH);// 设置tableObject[][] data = getData();JTable table = new JTable(data, AssetQuery.columnNames);table.setFont(Main.font);table.setRowHeight(30);table.getTableHeader().setFont(Main.font);// 添加到滚轴JScrollPane jScrollPane = new JScrollPane(table);add(jScrollPane, BorderLayout.CENTER);// 添加底栏int hgap = 30, vgap = 5;JPanel bottomBar = new JPanel();bottomBar.setLayout(new GridLayout(3, 1, hgap, vgap));// 上栏JPanel upper = new JPanel();upper.setLayout(new GridLayout(1, 4, hgap, vgap));initUpper(upper);// 中栏JPanel middle = new JPanel();middle.setLayout(new GridLayout(1, 4, hgap, vgap));initMiddle(middle);// 下栏JPanel down = new JPanel();down.setLayout(new GridLayout(1, 1));JButton jButton = new JButton("确定");jButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 保存日志saveLog();// 修改资产updateAsset();JOptionPane.showMessageDialog(null, "操作成功");}});jButton.setFont(Main.font);down.add(jButton);bottomBar.add(upper);bottomBar.add(middle);bottomBar.add(down);add(bottomBar, BorderLayout.SOUTH);}/*** 修改资产*/private void updateAsset() {AssetInformation assetInformation = new AssetInformation();assetInformation.setAssetNumber(Integer.valueOf(jTextField1.getText()));assetInformation.setStatus(getNumber((String) comboBox.getSelectedItem()));mapper2.update(assetInformation);sqlsession.commit();}/*** 修改日志*/private void saveLog() {AssetOperationLog operationLog = new AssetOperationLog();// 设置资产idoperationLog.setAssetNumber(String.valueOf(jTextField1.getText()));// 设置操作人operationLog.setRecipient(jTextField2.getText());// 设置操作operationLog.setOperationType(getNumber((String) comboBox.getSelectedItem()));// 设置备注operationLog.setRemarks(jTextField3.getText());// 保存操作日志mapper.insert(operationLog);sqlsession.commit();}/*** 根据操作目的, 返回对应数值* @param selectedItem* @return*/private String getNumber(String selectedItem) {if (selectedItem.equals("领用")) {return "1";}else if (selectedItem.equals("归还")) {return "2";}else {return "3";}}/*** 初始化middle栏界面* @param middle*/private void initMiddle(JPanel middle) {JLabel jLabel = new JLabel("操作");jLabel.setFont(Main.font);middle.add(jLabel);comboBox = new JComboBox();comboBox.setFont(Main.font);comboBox.addItem("领用");comboBox.addItem("归还");comboBox.addItem("报废");middle.add(comboBox);JLabel jLabel1 = new JLabel("备注");jLabel1.setFont(Main.font);middle.add(jLabel1);jTextField3 = new JTextField();middle.add(jTextField3);}/*** 初始化upper栏界面* @param upper*/private void initUpper(JPanel upper) {JLabel jLabel = new JLabel("资产编号");jLabel.setFont(Main.font);upper.add(jLabel);jTextField1 = new JTextField();upper.add(jTextField1);JLabel jLabel1 = new JLabel("操作人员编号");jLabel1.setFont(Main.font);upper.add(jLabel1);jTextField2 = new JTextField();upper.add(jTextField2);}/*** 获取数据* @return*/private Object[][] getData() {// 返回list数据List<AssetInformation> list = mapper2.list();Object[][] data = new Object[list.size()][AssetQuery.columnNames.length];// 将list处理为二维数组, 赋值给datafor (int i = 0; i < list.size(); i++) {// 将list[i] -> assetInformation 变为数组Object[] res = new Object[AssetQuery.columnNames.length];AssetInformation assetInformation = list.get(i);res[0] = assetInformation.getAssetNumber();res[1] = assetInformation.getAssetName();res[2] = assetInformation.getPrice();res[3] = assetInformation.getPurchaseDate();res[4] = assetInformation.getStatus();res[5] = assetInformation.getRemarks();data[i] = res;}return data;}
}

http://www.ppmy.cn/news/1018123.html

相关文章

在CPU上安装部署chatglm-6b实用经验分享

chatglm-6b很强&#xff0c;很多同学都想自己试一试&#xff0c;但不是每个人都有GPU、高端显卡的环境&#xff0c;大多数同学都是一台普通的笔记本。 笔者这里分享一下在自己的8G内存&#xff0c;intel i3笔记本上安装部署chatglm-6b的实际经验。有很多网站都分享了一些经验&…

Zookeeper特性与节点数据类型详解

CAP&Base理论 CAP理论 cap理论是指对于一个分布式计算系统来说&#xff0c;不可能满足以下三点: 一致性 &#xff1a; 在分布式环境中&#xff0c;一致性是指数据在多个副本之间是否能够保持一致的 特性&#xff0c;等同于所有节点访问同一份最新的数据副本。在一致性的需…

博士申请推荐信范文

目录 1⃣邮件主题 2⃣邮件开头 3⃣邮件正文 4⃣ 结尾落款 一份完整规范的邮件格式包含&#xff1a;开头、正文、结尾、落款、附件 1⃣邮件主题 目的&#xff1a;让导师看出你的来意、你的专业、学校背景和入学时间如&#xff1a;徐XX-XX大学-XX专业-20XX年博士申请 2⃣邮件…

Vue项目npm run dev 启动报错TypeError: Cannot read property ‘upgrade‘ of undefined

vue项目启动报错 TypeError: Cannot read property upgrade of undefined 由于我的vue.config.js文件 里面的代理target为空导致的 修改&#xff1a; 结果就可以正常运行了 参考原文&#xff1a; vue项目运行时报Cannot read property ‘upgrade’ of undefined错误_cannot r…

ProComponent 用法学习

相信很多同学都用过 Ant Design 这一 react 著名组件库&#xff0c;而 ProComponents 则是在 antd 之上进行封装的页面级组件库&#xff08;指一个组件就可以搞定一个页面&#xff09;。它同时也是 Ant Design Pro 中后台框架所用的主要组件库。如果你手上有要用 react 开发的中…

简单的用Python获取一下视频弹幕,新手练手实战项目,非常简单

昨天看到个视频&#xff0c;弹幕挺有意思的&#xff0c;于是想着用Python给他全部扒下来。 代码非常简单&#xff0c;接下来我们看看 具体操作。 需要准备这些 软件 Python 3.8Pycharm 模块使用 import requests 数据请求import jieba 分词import wordcloud 词云import p…

缩略图更清晰了:imagecopysampled代替imagecopyresized

之前用 imagecopyresized() 生成缩略图,但是效果不是太理想,后来把 imagecopyresized() 换成 imagecopysampled() ,效果好太多了,图片变得更加清晰了。 通过对比图,很明显看出,imagecopysampled()生成的缩略图,清晰度高很多。 下面是imagecopysampled()生成缩略图的代…

\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo

…\goAdmin\vendor\github.com\godror\orahlp.go:531:19: undefined: VersionInfo 解决办法 降了go版本(go1.18)&#xff0c;之前是go1.19 gorm版本不能用最新的&#xff0c;降至&#xff08;gorm.io/gorm v1.21.16&#xff09;就可以 修改交插编译参数 go env -w CGO_ENABLED1…