当前位置: 首页 > news >正文

java图书信息管理

一、项目概述

本图书信息管理系统旨在提供一个直观的用户界面,用于管理图书馆或书店的图书信息。系统包括图书添加、查询、借阅和归还等功能。

二、系统架构

系统采用JavaSwing作为前端UI框架,后端使用Java Servlet处理业务逻辑,数据存储在MySQL数据库中。

三、技术选型

  • 前端使用JavaSwing,提供直观用户界面。
  • 后端使用Java Servlet处理用户请求和数据库交互。
  • 数据库采用MySQL存储图书信息和借阅记录。

四、安装和配置

  1. 下载项目源代码。
  2. 安装Java Development Kit (JDK)。
  3. 设置数据库连接配置。
  4. 运行系统初始化脚本。

1.添加图书

  1. 进入主界面,选择“图书管理”。
  2. 点击“添加图书”按钮,输入图书信息,如书名、作者、出版社等。
  3. 确认添加图书。

2.查询图书

  1. 在主界面选择“查询图书”。
  2. 输入关键字,如书名或作者。
  3. 查看匹配的图书列表。

3.借阅图书

  1. 进入“借阅管理”模块。
  2. 选择要借阅的图书,输入借阅者信息。
  3. 确认借阅图书。

4.归还图书

  1. 进入“借阅管理”模块。
  2. 选择要归还的图书,输入借阅者信息。
  3. 确认归还图书。

5.查看借阅历史

  1. 在主界面选择“借阅历史”。
  2. 输入借阅者信息或图书信息。
  3. 查看借阅历史记录。

五、数据库设计

感谢提供数据库文件。以下是对这个数据库文件的简要说明:

book

  • BookId:图书ID,自增长。
  • BookName:图书名称。
  • Writter:作者。
  • BookType:图书类型。
  • Price:价格。
  • IsBorrow:是否借出。

borrow

  • BorrowId:借阅记录ID,自增长。
  • BookId:借阅的图书ID。
  • BookName:借阅的图书名称。
  • BookType:借阅的图书类型。
  • userid:借阅者ID。
  • username:借阅者用户名。
  • BorrowTime:借阅时间。
  • ReturnTime:归还时间。
  • IsReturn:是否归还。

root

  • rootID:管理员ID,自增长。
  • rootName:管理员用户名。
  • rootPWD:管理员密码。

user

  • userid:用户ID,自增长。
  • username:用户名。
  • userpsw:用户密码。
  • useremail:用户邮箱。
  • useraddr:用户地址。
  • userphone:用户电话。

这些表之间存在一些关联,比如 book 表和 borrow 表通过 BookId 关联。你可以使用这个数据库脚本初始化你的数据库。

六、程序截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、代码

Login.java

package view;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;import utils.DBUtil;public class LogIn extends JFrame {private JLabel labTitle = new JLabel("图书信息管理系统登录");private Font font = new Font("隶书", Font.BOLD, 34);private JButton btnSure = new JButton("登录");private JButton btnCancel = new JButton("重置");private JButton btnZhuce = new JButton("注册");private JPanel panBtn = new JPanel();private JLabel labLoginName = new JLabel("用户名:");private JLabel labPWD = new JLabel("密    码:");private JTextField jtfLoginName;private JPasswordField jpfPWD;private JPanel panMain = new JPanel();public LogIn() {setTitle("登录界面");// setDefaultLookAndFeelDecorated(true);this.setSize(500, 350);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);init();add(labTitle, BorderLayout.NORTH);add(panBtn, BorderLayout.SOUTH);add(panMain, BorderLayout.CENTER);}private void init() {labTitle.setFont(font);labTitle.setHorizontalAlignment(JLabel.CENTER);labTitle.setForeground(Color.RED);// labTitle.setBorder(BorderFactory.createLineBorder(Color.BLACK));labTitle.setBackground(Color.BLUE);// 单选框JRadioButton JB1 = new JRadioButton("管理员登录");JRadioButton JB2 = new JRadioButton("用户登录");// 加入组,避免出现可以两个都选择的情况ButtonGroup bg = new ButtonGroup();JB2.setSelected(true);// 默认选中'用户登录'jtfLoginName = new JTextField("", 10);jpfPWD = new JPasswordField(16);labLoginName.setSize(100, 40);labLoginName.setLocation(50, 50);labLoginName.setHorizontalAlignment(JLabel.RIGHT);labPWD.setSize(100, 40);labPWD.setLocation(50, 50 + 40 + 10);labPWD.setHorizontalAlignment(JLabel.RIGHT);jtfLoginName.setSize(200, 40);jtfLoginName.setLocation(50 + 100 + 20, 50);jpfPWD.setSize(200, 40);jpfPWD.setLocation(50 + 100 + 20, 50 + 40 + 10);jpfPWD.setEchoChar('*');JB1.setSize(90, 20);JB1.setLocation(125, 175);JB2.setSize(80, 20);JB2.setLocation(275, 175);btnSure.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (JB2.isSelected()) {Statement stmt = DBUtil.getStatement();String name = jtfLoginName.getText().trim();String pwd = new String(jpfPWD.getPassword()).trim();String sql = "select * from user where username='" + name+ "' AND userpsw='" + pwd + "';";try {ResultSet rs = stmt.executeQuery(sql);if (rs.next()) {JOptionPane.showConfirmDialog(LogIn.this,"登陆成功,欢迎进入!", "登陆成功",JOptionPane.CLOSED_OPTION);dispose();new LibraryUserFrame().setVisible(true);LibraryUserFrame.USER_NAME = name;} else {JOptionPane.showMessageDialog(null, "账号或密码错误!");}} catch (SQLException e1) {e1.printStackTrace();}/** UserDao UD = new UserDao(); UserBean uBean =* UD.findUser(name, pwd); if (uBean != null) {* JOptionPane.showConfirmDialog(LogIn.this, "登陆成功,欢迎进入!",* "登陆成功", JOptionPane.CLOSED_OPTION); dispose();* LibraryUserFrame LU = new LibraryUserFrame();* LU.setVisible(true); LibraryUserFrame.USER_NAME = name;* }else { JOptionPane.showMessageDialog(null, "账号或密码错误!");* }*/} else {Statement stmt = DBUtil.getStatement();String name = jtfLoginName.getText().trim();String pwd = new String(jpfPWD.getPassword()).trim();String sql = "select * from root where rootName='" + name+ "' AND rootPWD='" + pwd + "';";try {ResultSet rs = stmt.executeQuery(sql);if (rs.next()) {JOptionPane.showConfirmDialog(LogIn.this,"登陆成功,欢迎进入!", "登陆成功",JOptionPane.CLOSED_OPTION);dispose();LibraryRootFrame LR = new LibraryRootFrame();LR.setVisible(true);LibraryRootFrame.USER_NAME = name;} else {JOptionPane.showMessageDialog(null, "账号或密码错误!");}} catch (SQLException e1) {e1.printStackTrace();}}}});btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {jtfLoginName.setText("");jpfPWD.setText("");}});btnZhuce.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {dispose();new ZhuceFrame().setVisible(true);}});panBtn.add(btnSure);panBtn.add(btnCancel);panBtn.add(btnZhuce);// 把单选按钮加入组bg.add(JB1);bg.add(JB2);panMain.setLayout(null);panMain.add(labLoginName);panMain.add(labPWD);panMain.add(jtfLoginName);panMain.add(jpfPWD);panMain.add(JB1);panMain.add(JB2);ImageIcon img = new ImageIcon("image/ZhuCe.png");// 要设置的背景图片JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。panMain.add(imgLabel, new Integer(Integer.MIN_VALUE));// 将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());// 设置背景标签的位置Container contain = this.getContentPane();((JPanel) contain).setOpaque(false);}public static void main(String[] args) {new LogIn().setVisible(true);}
}

LibraryUserFrame.java

package view;import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;public class LibraryUserFrame extends JFrame {public static String USER_NAME;public LibraryUserFrame() {this.setLayout(null);ImageIcon img = new ImageIcon("image/3.jpg");// 要设置的背景图片JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));// 将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());// 设置背景标签的位置Container contain = this.getContentPane();((JPanel) contain).setOpaque(false);setSize(1000, 750);setTitle("图书馆管理系统_用户");setResizable(false); // 不可改变窗口大小// 获取屏幕大小和当前frame的大小Dimension thisScreen = Toolkit.getDefaultToolkit().getScreenSize();Dimension thisFrame = this.getSize();// 使启动窗口位于屏幕的正中心setLocation((thisScreen.width - thisFrame.width) / 2,(thisScreen.height - thisFrame.height) / 2);// 设置单击窗口的【关闭】按钮时将发生相应的动作setDefaultCloseOperation(EXIT_ON_CLOSE);JMenuBar menuBar = new JMenuBar(); // 创建菜单栏// 创建菜单JMenu j1 = new JMenu("书籍管理");JMenuItem j1_1 = new JMenuItem("搜索图书");j1_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new BookSearch().setVisible(true);}});JMenuItem j1_2 = new JMenuItem("查看所有图书");j1_2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new AllBook().setVisible(true);}});JMenuItem j1_3 = new JMenuItem("借阅图书");j1_3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new UserBorrow().setVisible(true);}});JMenuItem j1_4 = new JMenuItem("归还图书");j1_4.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new UserReturn().setVisible(true);}});j1.add(j1_1);j1.add(j1_2);j1.add(j1_3);j1.add(j1_4);JMenu j2 = new JMenu("个人中心");JMenuItem j2_1 = new JMenuItem("修改密码");j2_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new UserXiugaimima().setVisible(true);}});j2.add(j2_1);JMenu j3 = new JMenu("系统");JMenuItem j3_1 = new JMenuItem("注销登录");j3_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {dispose();new LogIn().setVisible(true);}});j3.add(j3_1);menuBar.add(j1);menuBar.add(j2);menuBar.add(j3);this.setJMenuBar(menuBar);}
}

LibraryRootFrame.java

package view;import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;import Date.BarTest;
import Date.PieChart;
import Date.PieTest;public class LibraryRootFrame extends JFrame {public static String USER_NAME;public LibraryRootFrame() {this.setLayout(null);ImageIcon img = new ImageIcon("image/3.jpg");//要设置的背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());// 设置背景标签的位置Container contain = this.getContentPane();((JPanel) contain).setOpaque(false); setSize(1000, 730);setTitle("图书馆管理系统——管理员");setResizable(false); // 不可改变窗口大小// 获取屏幕大小和当前frame的大小Dimension thisScreen = Toolkit.getDefaultToolkit().getScreenSize();Dimension thisFrame = this.getSize();// 使启动窗口位于屏幕的正中心setLocation((thisScreen.width - thisFrame.width) / 2,(thisScreen.height - thisFrame.height) / 2);// 设置单击窗口的【关闭】按钮时将发生相应的动作setDefaultCloseOperation(EXIT_ON_CLOSE);JMenuBar menuBar = new JMenuBar(); // 创建菜单栏// 创建菜单JMenu j1 = new JMenu("书籍管理");JMenuItem J1_1 = new JMenuItem("添加书籍");J1_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new BookAddFrame().setVisible(true);}});JMenuItem J1_2 = new JMenuItem("更新和删除书籍");J1_2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new Book_Update_Delete().setVisible(true);}});JMenuItem J1_3 = new JMenuItem("查找书籍");J1_3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new BookSearch().setVisible(true);}});JMenuItem J1_4 = new JMenuItem("查看所有书籍");J1_4.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new AllBook().setVisible(true);}});j1.add(J1_1);j1.add(J1_2);j1.add(J1_3);j1.add(J1_4);JMenu j2 = new JMenu("用户管理");JMenuItem J2_1 = new JMenuItem("添加用户");J2_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new UserAddFrame().setVisible(true);}});JMenuItem J2_2 = new JMenuItem("更新和删除用户");J2_2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new User_Update_Delete().setVisible(true);}});JMenuItem J2_3 = new JMenuItem("查询用户");J2_3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new UserSearch().setVisible(true);}});j2.add(J2_1);j2.add(J2_2);j2.add(J2_3);JMenu j3 = new JMenu("借书记录");JMenu J3 = new JMenu("借书数据分析");JMenuItem J3_1 = new JMenuItem("饼形图查看");J3_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new PieTest().setVisible(true);}});JMenuItem J3_2 = new JMenuItem("条形图查看");J3_2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new BarTest().setVisible(true);}});JMenuItem j3_1 = new JMenuItem("查看借书记录");j3_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new AllBorrow().setVisible(true);}});J3.add(J3_1);J3.add(J3_2);j3.add(J3);j3.add(j3_1);JMenu j4 = new JMenu("系统设置");JMenuItem j4_1 = new JMenuItem("修改密码");j4_1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {new RootXiugaiMima().setVisible(true);}});JMenuItem j4_2 = new JMenuItem("注销登录");j4_2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {dispose();new LogIn().setVisible(true);}});j4.add(j4_1);j4.add(j4_2);menuBar.add(j1);menuBar.add(j2);menuBar.add(j3);menuBar.add(j4);this.setJMenuBar(menuBar);}public static void main(String[] args) {new LibraryRootFrame().setVisible(true);}
}

八、交流与联系

q:969060742 文档、代码、sql

相关文章:

java图书信息管理

一、项目概述 本图书信息管理系统旨在提供一个直观的用户界面,用于管理图书馆或书店的图书信息。系统包括图书添加、查询、借阅和归还等功能。 二、系统架构 系统采用JavaSwing作为前端UI框架,后端使用Java Servlet处理业务逻辑,数据存储在…...

apache服务器出现No input file specified.解决方案

APACHE服务器出现No input file specified.解决方案 thinkcmf程序默认的.htaccess里面的规则&#xff1a; <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA…...

你写过的最蠢的代码是?——全栈开发篇

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

正点原子嵌入式linux驱动开发——TF-A初探

上一篇笔记中&#xff0c;正点原子的文档简单讲解了一下什么是TF-A&#xff0c;并且也学习了如何编译TF-A。但是TF-A是如何运行的&#xff0c;它的一个运行流程并未涉及。TF-A的详细运行过程是很复杂的&#xff0c;涉及到很多ARM处理器底层知识&#xff0c;所以这一篇笔记的内容…...

【网安别学成开发】之——python篇

经典入门编程题 1.猜数字 经典的猜数字游戏&#xff0c;几乎所有人学编程时都会做。 功能描述&#xff1a; 随机选择一个三位以内的数字作为答案。用户输入一个数字&#xff0c;程序会提示大了或是小了&#xff0c;直到用户猜中。 #!/usr/bin/env python3import randomresu…...

vue图片显示

一、Vue图片显示方法&#xff1a; 1.直接使用<img>标签&#xff1a; 最简单的方法是使用<img>标签&#xff0c;并将图片的URL作为src属性的值。例如&#xff1a; <img src"path/to/your/image.jpg" alt"Image"> 如果是绝对路径&#x…...

S32K144 GPIO编程

前面的文章介绍了如何在MDK-Keil下面进行S32K144的开发&#xff0c;下面就使用该工程模板进行GPIO LED的编程试验。 1. 开发环境 S32K144EVB-Q100开发板MDK-Keil Jlink 2. 硬件连接 S32K144EVB-Q100开发板关于LED的原理图如下&#xff1a; 也就是具体连接关系如下&#xf…...

域名备案流程(个人备案,腾讯云 / 阿里云)

文章目录 1.网站备案的目的2.备案准备的材料2.1 网站域名2.2 云资源或备案授权码2.3 电子材料 3.首次个人备案准备的材料3.1 主体相关3.2 域名相关3.3 网站相关3.4 网站服务相关3.5 变更相关 4.个人备案流程4.1 登录系统4.2 填写备案信息&#x1f340; 填写备案省份&#x1f34…...

子网ip和子网掩码的关系

子网ip和子网掩码的关系 一个IP地址被分为两部分&#xff1a;网络地址和主机地址。这是通过子网掩码来实现的。 子网掩码&#xff08;Subnet Mask&#xff09;是一个32位的二进制数&#xff0c;它用来区分一个IP地址中的网络地址和主机地址。在子网掩码中&#xff0c;网络地址…...

openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT

文章目录 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT88.1 前置条件检查88.2 转换88.3 转换示例 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT …...

网络-Ajax

文章目录 前言一、Ajax优点&#xff1a;缺点&#xff1a; 二、使用步骤XNLHttpRequest对象完整代码 总结 前言 本文主要记录Ajax技术的简介&#xff0c;以及用法。 一、Ajax Ajax是一组用于在Web浏览器和Web服务器之间进行异步通信的Web开发技术。 它代表着Asynchronous Java…...

Autowired和Resource的关系

相同点对于下面的代码来说&#xff0c;如果是Spring容器的话&#xff0c;两个注解的功能基本是等价的&#xff0c;他们都可以将bean注入到对应的field中 不同点但是请注意&#xff0c;这里说的是基本相同&#xff0c;说明还是有一些不同点的&#xff1a; byName和byType匹配顺…...

HashTable, HashMap, ConcurrentHashMap 之间的区别

HashMap: 线程不安全. key 允许为 null。 Hashtable: 线程安全. 使用 synchronized 锁 Hashtable 对象, 效率较低. key 不允许为 null.。只是简单的把关键方法上加上了 synchronized 关键字。如 get 和 set &#xff0c;这相当于直接针对 Hashtable 对象本身加锁&#xff0c;如…...

Maven下载源码出现:Cannot download sources Sources not found for org.springframwork...

Maven下载源码出现&#xff1a;Cannot download sources Sources not found for org.springframwork… 最近重装了IDEA再次查看源码时发现总是报错&#xff0c;网上找了很多&#xff0c;发现解决方法都是在项目终端执行如下命令&#xff1a; mvn dependency:resolve -Dclassi…...

C进阶--字符函数和字符串函数介绍

✨ 更多细节参考 cplusplus.com/reference/cstring/ 使用方式&#xff1a; ⭕ 求字符串长度 &#x1f58c; strlen 函数原型&#xff1a; size_t strlen ( const char * str ); 作用&#xff1a; 获取字符串长度 ✨补充&#xff1a; ⭐字符串以 \0 作为结束标志&…...

算法通关村第五关-二叉树遍历(层数优先)之经典问题:简单的层序遍历、层序遍历分层、自底向上的层序遍历

基础知识&#xff08;青铜挑战&#xff09; 了解二叉树的基础知识 实战训练&#xff08;白银挑战&#xff09; 简单的层序遍历 基本的层序遍历思路很清晰&#xff1a; 给你一个二叉树根节点&#xff0c;你需要创建一个队列 queue 来遍历节点&#xff0c;一个链表 list 来存储…...

C++左右值及引用

1 左值和右值 简单记法&#xff1a;能取地址的是左值&#xff0c;不能取地址的是右值 右值一般是常量 例&#xff1a; i 是右值&#xff0c;因为先把 i 赋值给临时变量&#xff0c;临时变量在1&#xff0c;而临时变量是将亡值&#xff0c;&i取地址会报错 i是左值&#xf…...

如何备份和恢复数据库

目录 1.xtrabackup 是什么2.全量备份3.增量备份4.使用备份进行恢复5.原理6.参考 本文主要介绍如何使用xtrabackup 进行数据库的备份和恢复&#xff0c;并在最后介绍了原理。 1.xtrabackup 是什么 XtraBackup是由Percona开发的一款开源的MySQL数据库备份工具。它可以对InnoDB和…...

简化数据库操作:探索 Gorm 的约定优于配置原则

文章目录 使用 ID 作为主键数据库表名TableName临时指定表名列名时间戳自动填充CreatedAtUpdatedAt时间戳类型Gorm 采用约定优于配置的原则,提供了一些默认的命名规则和行为,简化开发者的操作。 使用 ID 作为主键 默认情况下,GORM 会使用 ID 作为表的主键: type User st…...

保姆级Anaconda安装教程

一.anaconda下载 建议使用清华大学开源软件镜像站进行下载&#xff0c;使用官网下载速度比较慢。 anaconda清华大学开源软件镜像站 &#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 一路next即可&#xff0c;注意添加环境变量得选项都勾上。 二.验证…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...