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

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.rhkb.cn/news/84124.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Perl - 格式化

Perl使用称为“formats”的模板来输出内容。要使用Perl的格式函数&#xff0c;必须先定义一种格式&#xff0c;然后才能使用该格式写入格式化的数据。 定义格式 以下是定义Perl格式的语法- format FormatName fieldline value_one, value_two, value_three fieldline value…

将matlab中工作区的数据保存为.mat文件及加载.mat数据

将matlab工作区中的数据保存为.mat文件 如数据a a[1 1 2 3 2 4];一、工作区数据 二、保存为.mat文件 利用save保存数据a到data.mat文件中 save(data.mat,a);三、加载数据 Iload(data.mat)

Gitlab CI/CD笔记-第二天-使用maven打包并且使用主机套接字进行构建并push镜像。

一、安装gitlab-runner 1.可以是linux也可以是docker的 2.本文说的是docker安装部署的。 二、直接上.gitlab-ci.yml stages: # List of stages for jobs, and their order of execution - build-image build-image-job: stage: build-image image: harbor.com:543/docke…

【Linux】系统内核中System.map中字段含义解释

可以通过命令行过来初始化内容 cat System.map-4.18.0-193.el8.x86_64 | grep pci | grep initcall "T"&#xff1a;表示该符号是一个全局函数&#xff0c;可以被其他模块或文件访问。 "D"&#xff1a;表示该符号是一个全局数据对象&#xff0c;可以被其…

jenkins流水线

1.拉取代码 https://gitee.com/Wjc_project/yygh-parent.git2、项目编译 mvn clean package -Dmaven.test.skiptrue ls hospital-manage/target3、构建镜像 ls hospital-manage/target docker build -t hospital-manage:latest -f hospital-manage/Dockerfile ./hospital-ma…

Leetcode 977. 有序数组的平方

题目&#xff1a; Leetcode 977. 有序数组的平方 描述&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序 思路&#xff1a; 双指针法 数组其实是有序的&#xff0c; 只不过负数平方之…

[保研/考研机试] KY187 二进制数 北京邮电大学复试上机题 C++实现

描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗&#xff1f;并且&#xff0c;小…

有人管一管小天才电话手表吗?

作者 | 张未 来源 | 洞见新研社 潮流果然是个圈&#xff0c;曾经风靡2008年的“摇一摇”重回我们的视野当中。 这个对于成年人有些过时的产物&#xff0c;以儿童手表为载体&#xff0c;正入侵着小学生的社交圈&#xff0c;成为儿童的“社交密码”。 “碰一碰”加好友&#x…

form 表单恢复初始数据

写表单的时候&#xff0c;想做到&#xff0c;某个操作时&#xff0c;表单恢复初始数据 this.$options.data().form form 是表单的对象 <template><div><el-dialog title"提示" :visible.sync"dialogVisible"><el-form :model"…

【计算机视觉】关于图像处理的一些基本操作

目录 图像平滑滤波处理均值滤波计算过程python实现 高斯滤波计算过程python实现 中值滤波计算过程python实现 图像的边缘检测Robert算子计算过程python实现 图像处理腐蚀算子计算过程python实现 Hog&#xff08;梯度方向直方图&#xff09;特征计算流程&#xff1a;Hog的特征维…

【指针模拟实现库函数strlen】

指针模拟实现库函数strlen 1.库函数strlen含义 strlen是用来计算字符串长度的。&#xff08;不包含’\0’) 2.assert断言介绍 assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报 错终⽌运⾏。这个宏常常…

【数据结构】单链表OJ题(二)

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、链表分割 &#x1f4a1;方法一&#xff1a; 二、链表的回文 &#x…

Elastic Stack 8.9:更快的跨集群搜索和指标聚合

作者&#xff1a;Tyler Perkins, Gilad Gal, Teresa Soler, Shani Sagiv, Bernhard Suhm, George Kobar Elastic Stack 8.9 在多个方面实现了显着的性能改进&#xff1a;Kibana 中更快的跨集群搜索、Elasticsearch 更快的聚合&#xff0c;以及更快、更相关的向量搜索&#xff0…

cpu的架构

明天继续搞一下cache,还有后面的, 下面是cpu框架图 开始解释cpu 1.控制器 控制器又称为控制单元&#xff08;Control Unit&#xff0c;简称CU&#xff09;,下面是控制器的组成 1.指令寄存器IR:是用来存放当前正在执行的的一条指令。当一条指令需要被执行时&#xff0c;先按…

自定义类型详解

目录 前言 本期内容介绍 一、结构体 1.1什么是结构体&#xff1f; 1.2结构体的声明 1.3结构的特殊声明 1.4结构体变量的定义和初始化 1.5结构体成员的访问 1.6结构体传参 1.7结构体的自引用 1.8结构体内存对齐 1.9为什么有内存对齐&#xff1f; 1.a修改默认对齐数…

网工内推 | 自动化企业招网工,包吃,最高15K,厂商认证优先

01 影儿集团 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责公司及分支站点网络架构设计规划、组建、优化及日常运维管理工作&#xff1b; 2、负责公司网络安全、网络质量及网络和安全设备等检查与监控&#xff1b; 3、负责网络设备安全策略的配置及优化&#…

Jmeter(四) - 从入门到精通 - 创建网络测试计划(详解教程)

1.简介 在本节中&#xff0c;您将学习如何创建基本的 测试计划来测试网站。您将创建五个用户&#xff0c;这些用户将请求发送到JMeter网站上的两个页面。另外&#xff0c;您将告诉用户两次运行测试。因此&#xff0c;请求总数为&#xff08;5个用户&#xff09;x&#xff08;2…

react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html

文章目录 ⭐前言⭐搭建react ts项目⭐引入grapes 插件⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于react搭建在线编辑html的站点。 react 发展历史 React是由Facebook开发的一种JavaScript库&#xff0c;用于构建用户界面。React最初发布于2013年&…

C++/Qt读写ini文件

今天介绍C/Qt读写ini文件&#xff0c;ini文件一般是作为配置文件来使用&#xff0c;比如一些程序的一些默认参数会写在一个ini文件中&#xff0c;程序运行时会进行对应的参数读取&#xff0c;详细可以查看百度ini文件的介绍。https://baike.baidu.com/item/ini%E6%96%87%E4%BB%…

Redis的简介,安装(Linux、Windows),配置文件的修改---详细介绍

Redis基础 Redis是一个基于内存的key-value结构数据库。 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、资讯、新闻)企业应用广泛 1、Redis入门 1.1、Redis简介 The open source, in-memory data store used by millions of developers as a …