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

Java、JavaWeb、数据库-图书管理系统

这一章主要是把上一章写在网页里的java 代码从网页中分离出来,放在专门的servlet类中。每一个servlet类对应一个数据库的表。

规范性问题:

1、dao包存放有关数据库的信息:BaseDao包就放数据库加载驱动和增删改和关闭资源;而其他的每一个表名对应一个相应名字的dao包,写数据库的增删改查操作;

2、servlet包专存放和网页有关的代码,把网页传来的参数进行接受,同时调用相应名字的dao类中的方法,返回到相应的页面。

3、untity包专门放对应表格的实体类

4、test包专门放测试的方法,单元测试等。

整合前面的的学生管理系统,重构一个图书管理系统,要求规范性,且网页中不在出现java代码,都放在servlet类中

在写代码前先建好相应的包,并且导入数据库的jar包,web的jar包,还有tomcat的配置,以及在数据库编辑软件navicat建好相应的数据表。

图书管理系统的运行截图:左上方两个表在数据库建好

登录界面展示:

 注册界面展示:

各种功能展示:

一、代码:

BaseDao:

package com.zyl.dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** @className: BaseDao* @author: Zyl* @date: 2024/12/3 16:49* @Version: 1.0* @description:*/public class BaseDao {Connection connection= null;PreparedStatement ps=null;ResultSet resultSet = null;String url = "jdbc:mysql://localhost:3306/jdbctest";String username = "root";String password = "root";String DriverName="com.mysql.jdbc.Driver";//加载驱动,获取连接,连接数据库public  void connection()throws  Exception{Class.forName(DriverName);connection = DriverManager.getConnection(url, username, password);}//针对增删改的方法,没有查询的功能public int edit(String sql,Object... params) {try {connection();ps = connection.prepareStatement(sql);for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}int row = ps.executeUpdate();return row;} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}}//关闭所有的资源public  void closeAll(){try {if(resultSet!=null){resultSet.close();}if(ps!=null){ps.close();}if(connection!=null){connection.close();}}catch (Exception e){throw new RuntimeException(e);}}}

BookDao:

package com.zyl.dao;import com.zyl.untity.Book;import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;/*** @className: BookDao* @author: Zyl* @date: 2024/12/6 10* @Version: 1.0* @description:*/public class BookDao extends BaseDao{
//查询所有的图书public ArrayList<Book> selectAll(){ArrayList<Book> list=new ArrayList<Book>();try {connection();String sql="select * from tbl_book";ps = connection.prepareStatement(sql);resultSet = ps.executeQuery();while (resultSet.next()){int id=resultSet.getInt("id");String name=resultSet.getString("name");double price=resultSet.getDouble("price");String publisher=resultSet.getString("publisher");Book book =new Book();book.setId(id);book.setName(name);book.setPrice(price);book.setPublisher(publisher);list.add(book);}return list;} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}}public int  delete(int id){String sql = "delete from  tbl_book where id=?";//d调用父类BaseDao 的edit()方法   增删改操作;;;;;;int edit = edit(sql,id);return  edit;}public Book findById(int id){Book book =null;try {String sql = "select * from tbl_book where id=?";connection();ps = connection.prepareStatement(sql);ps.setInt(1,id);resultSet = ps.executeQuery();while (resultSet.next()){int id1=resultSet.getInt("id");String name=resultSet.getString("name");double price=resultSet.getDouble("price");String publisher=resultSet.getString("publisher");book=new Book(id1,name,price,publisher);}return book;} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}}public int  update(int id,String name,double price,String publisher ){String sql = "update  tbl_book set name=?,price=?,publisher=?where id=?";//d调用父类BaseDao 的edit()方法   增删改操作;;;;;;int edit = edit(sql,name,price,publisher,id);return  edit;}public int  insert(String name,double price,String publisher ){String sql = "insert into tbl_book(name,price,publisher) values(?,?,?)";//d调用父类BaseDao 的edit()方法   增删改操作;;;;;;int edit = edit(sql,name,price,publisher);return  edit;}}

UserDao:

package com.zyl.dao;import com.zyl.untity.User;/*** @className: UserDao* @author: Zyl* @date: 2024/12/6 10:15* @Version: 1.0* @description:*/public class UserDao extends BaseDao{public User login(String username, String password){User user=null;try {String sql="select * from tbl_user where username=? and password=?";connection();ps = connection.prepareStatement(sql);ps.setObject(1,username);ps.setObject(2,password);resultSet = ps.executeQuery();while(resultSet.next()){int id = resultSet.getInt("id");String username1 = resultSet.getString("username");String password1 = resultSet.getString("password");String realname = resultSet.getString("realname");int age = resultSet.getInt("age");// user=new User(username1,id,password1,realname,age);user=new User();user.setId(id);user.setUsername(username1);user.setAge(age);user.setPassword(password1);user.setRealname(realname);}} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}return user;}public int  add(String username, String password){String sql="insert into tbl_user(username,password) values(?,?)";int i=edit(sql,username,password);return  i;}}

BookServlet:

package com.zyl.servlet;import com.zyl.dao.BookDao;
import com.zyl.untity.Book;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;/*** @className: BookServlet* @author: Zyl* @date: 2024/12/6 10:26* @Version: 1.0* @description:*/
@WebServlet(urlPatterns = "/book")
public class BookServlet extends HttpServlet {private BookDao bookDao = new BookDao();@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String method = req.getParameter("method");if("delete".equals(method)){delete(req,resp);}else if("getById".equals(method)){selectById(req,resp);}else if("update".equals(method)){update(req,resp);}else if("insert".equals(method)){insert(req,resp);}else{selectAll(req,resp);}}public void insert(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取参数String name = req.getParameter("name");double price = Double.parseDouble(req.getParameter("price"));String publisher = req.getParameter("publisher");BookDao bookDao = new BookDao();int i = bookDao.insert(name, price, publisher);if(i>0){resp.sendRedirect("/book");}}private void selectById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取idString id = req.getParameter("id");//创建对象BookDao bookDao = new BookDao();Book b = bookDao.findById(Integer.parseInt(id));req.setAttribute("book",b);req.getRequestDispatcher("/edit.jsp").forward(req,resp);}public void selectAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{BookDao bookDao = new BookDao();ArrayList<Book> books = bookDao.selectAll();req.setAttribute("books",books);req.getRequestDispatcher("/index.jsp").forward(req,resp);}public void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{String id = req.getParameter("id");//获取idBookDao bookDao = new BookDao();//创建对象int delete = bookDao.delete(Integer.parseInt(id));if(delete>0){resp.sendRedirect("/book");}}public void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{//获取参数String id = req.getParameter("id");String name = req.getParameter("name");String  price = req.getParameter("price");String publisher = req.getParameter("publisher");//先判断在创建对象并调用方法if(id!=null&&!id.equals("")&&name!=null&&!name.equals("")&&price!=null&&!price.equals("")&&publisher!=null&&!publisher.equals("")){BookDao b=new BookDao();int i=b.update(Integer.parseInt(id),name, Double.parseDouble(price),publisher);if(i>0){resp.sendRedirect("/book");}}}
}

UserServlet:

package com.zyl.servlet;import com.zyl.dao.UserDao;
import com.zyl.untity.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.UnsupportedEncodingException;/*** @className: UserServlet* @author: Zyl* @date: 2024/12/6 10:25* @Version: 1.0* @description:*/
@WebServlet(urlPatterns = "/user")
public class UserServlet extends HttpServlet {private UserDao userDao=new UserDao();//对象@Overridepublic void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String method = req.getParameter("method");if ("login".equals(method)) {login(req, resp);} else if ("register".equals(method)) {register(req, resp);} else if ("exit".equals(method)){exit(req, resp);}}public void exit(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException  {HttpSession session=req.getSession();//获取session,判断是否登录,登录了就删除session,并跳转回登录页面session.removeAttribute("user");resp.sendRedirect("/login.jsp");}public void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");UserDao userDao = new UserDao();User user = userDao.login(username, password);if (user!= null) {//保存到session会话req.getSession().setAttribute("user", user);//跳转--成功页面【展示所有图书】resp.sendRedirect("/book");} else {//跳转到登录页面req.setAttribute("error", "<font color='red'>账号或密码错误</font>");req.getRequestDispatcher("/login.jsp").forward(req, resp);//转发跳转.必须转发跳转}}public void register(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取表单数据String username = req.getParameter("username");String password = req.getParameter("password");String confirmPassword = req.getParameter("confirmPassword");System.out.println(1222);// 初始化消息变量String message = "";String messageType = "";// 检查密码是否一致if (!password.equals(confirmPassword)) {message = "两次输入的密码不一致,请重新输入。";messageType = "error-message";} else {// 创建 UserDao 实例UserDao userDao = new UserDao();// 检查用户名和密码是否同时存在if (userDao.login(username, password) != null) {message = "该用户名和密码已被注册过。";messageType = "error-message";} else {// 调用 add 方法添加学生int result = userDao.add(username, password);if (result > 0) {message = "注册成功!";messageType = "success-message";} else {message = "注册失败,请重试。";messageType = "error-message";}}}// 将消息存储到请求属性中req.setAttribute("message", message);req.setAttribute("messageType", messageType);// 转发到 register.jsp 显示消息req.getRequestDispatcher("/register.jsp").forward(req, resp);}}

二、网页代码:

bookadd.jsp:

<%--Created by IntelliJ IDEA.User: Date: 2024/12/7Time: 16:21To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>添加图书界面</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 80%;max-width: 400px;text-align: center;}.container h1 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;text-align: left;}.form-group label {display: block;margin-bottom: 5px;font-weight: bold;}.form-group input {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;}.button-container {margin-top: 20px;}.button-container button {padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;background-color: #007bff;color: white;font-size: 16px;}.button-container button:hover {background-color: #0056b3;}.error-message {color: red;margin-bottom: 15px;}.success-message {color: green;margin-bottom: 15px;}</style>
</head>
<body>
<div class="container"><h1>添加图书界面</h1><c:if test="${sessionScope.user==null}"><c:redirect url="/login.jsp"/></c:if><form action="/book?method=insert" method="post"><div class="form-group"><label for="name">书名:</label><input type="text" id="name" name="name" placeholder="请输入书名" required/></div><div class="form-group"><label for="price">价格:</label><input type="number" id="price" name="price" placeholder="请输入价格" step="0.01" required/></div><div class="form-group"><label for="publisher">出版社:</label><input type="text" id="publisher" name="publisher" placeholder="请输入出版社" required/></div><div class="button-container"><button type="submit">添加</button></div></form>
</div>
</body>
</html>

edit.jsp:

<%--Created by IntelliJ IDEA.User: Date: 2024/12/7Time: 15:37To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>编辑图书</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 80%;max-width: 400px;text-align: center;}.container h1 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;text-align: left;}.form-group label {display: block;margin-bottom: 5px;font-weight: bold;}.form-group input {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;}.button-container {margin-top: 20px;}.button-container button {padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;background-color: #007bff;color: white;font-size: 16px;}.button-container button:hover {background-color: #0056b3;}.error-message {color: red;margin-bottom: 15px;}.success-message {color: green;margin-bottom: 15px;}</style>
</head>
<body>
<div class="container"><h1>编辑图书</h1><c:if test="${sessionScope.user==null}"><c:redirect url="/login.jsp"/></c:if><form action="/book?method=update" method="post"><div class="form-group"><label for="id">ID:</label><input type="text" id="id" name="id" value="${book.getId()}" readonly/></div><div class="form-group"><label for="name">书名:</label><input type="text" id="name" name="name" placeholder="请输入书名" value="${book.getName()}" required/></div><div class="form-group"><label for="price">价格:</label><input type="number" id="price" name="price" placeholder="请输入价格" value="${book.getPrice()}" step="0.01" required/></div><div class="form-group"><label for="publisher">出版社:</label><input type="text" id="publisher" name="publisher" placeholder="请输入出版社" value="${book.getPublisher()}" required/></div><div class="button-container"><button type="submit">立即修改</button></div></form>
</div>
</body>
</html>

index.jsp:

<%@ page import="com.zyl.untity.User" %><%--Created by IntelliJ IDEA.User: ${zyl}Date: 2024/12/6Time: 10:12To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>图书首页</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 80%;max-width: 800px;text-align: center;}.container h1 {margin-bottom: 20px;}.button-container {margin-bottom: 20px;}.button-container button {margin: 0 10px;padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;background-color: #007bff;color: white;font-size: 16px;}.button-container button:hover {background-color: #0056b3;}table {width: 100%;border-collapse: collapse;margin-top: 20px;}th, td {border: 1px solid #ddd;padding: 8px;text-align: left;}th {background-color: #f2f2f2;}tr:nth-child(even) {background-color: #f9f9f9;}tr:hover {background-color: #f1f1f1;}a {margin: 0 5px;text-decoration: none;color: #007bff;}a:hover {text-decoration: underline;}</style>
</head>
<body>
<c:if test="${sessionScope.user == null}"><c:redirect url="/login.jsp"/>
</c:if>
<div class="container"><h1>欢迎${sessionScope.user.realname}访问图书管理系统</h1><div class="button-container"><button οnclick="location.href='/bookadd.jsp'">添加</button><button οnclick="location.href='/user?method=exit'">退出</button></div><table><tr><th>编号</th><th>姓名</th><th>价格</th><th>出版社</th><th>操作</th></tr><c:forEach items="${requestScope.books}" var="b"><tr><td>${b.id}</td><td>${b.name}</td><td>${b.price}</td><td>${b.publisher}</td><td><a οnclick="del(${b.id})">删除</a><a href="/book?method=getById&id=${b.id}">修改</a></td></tr></c:forEach></table>
</div>
<script>function del(id) {var b = confirm("是否删除该记录?");if (b) {location.href = "/book?method=delete&id=" + id;}}
</script>
</body>
</html>

login.jsp:

<%--Created by IntelliJ IDEA.User: Date: 2024/12/6Time: 10:50To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录界面</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.login-container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 300px;text-align: center;}.login-container h2 {margin-bottom: 20px;}.login-container input[type="text"],.login-container input[type="password"] {width: calc(100% - 22px);padding: 10px;margin: 10px 0;border: 1px solid #ccc;border-radius: 4px;}.login-container input[type="submit"],.login-container input[type="button"] {width: calc(100% - 22px);padding: 10px;margin: 10px 0;border: none;border-radius: 4px;cursor: pointer;background-color: #007bff;color: white;font-size: 16px;}.login-container input[type="submit"]:hover,.login-container input[type="button"]:hover {background-color: #0056b3;}.error-message {color: red;margin-bottom: 10px;}</style>
</head>
<body>
<div class="login-container"><h2>登录界面</h2><div class="error-message">${error}</div><form action="/user?method=login" method="post"><input type="text" name="username" placeholder="账号"/><br><input type="password" name="password" placeholder="密码"/><br><input type="submit" value="立即登录"/><input type="button" value="注册" οnclick="location.href='register.jsp'"/></form>
</div>
</body>
</html>

register.jsp:

<%--Created by IntelliJ IDEA.User: Date: 2024/12/7Time: 10:56To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>注册界面</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 80%;max-width: 400px;text-align: center;}.container h1 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;text-align: left;}.form-group label {display: block;margin-bottom: 5px;font-weight: bold;}.form-group input {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;}.button-container {margin-top: 20px;}.button-container button {padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;background-color: #007bff;color: white;font-size: 16px;}.button-container button:hover {background-color: #0056b3;}.error-message {color: red;margin-bottom: 15px;}.success-message {color: green;margin-bottom: 15px;}.login-link {margin-top: 15px;font-size: 14px;}.login-link a {color: #007bff;text-decoration: none;}.login-link a:hover {text-decoration: underline;}</style>
</head>
<body>
<div class="container"><h1>注册界面</h1><c:if test="${not empty message}"><div class="${messageType}">${message}</div></c:if><form action="/user?method=register" method="post"><div class="form-group"><label for="username">账号:</label><input type="text" id="username" name="username" required></div><div class="form-group"><label for="password">密码:</label><input type="password" id="password" name="password" required></div><div class="form-group"><label for="confirmPassword">确认密码:</label><input type="password" id="confirmPassword" name="confirmPassword" required></div><div class="button-container"><button type="submit">注册</button></div><div class="login-link"><a href="login.jsp">已有账号,立即登录</a></div></form>
</div>
</body>
</html>

相关文章:

Java、JavaWeb、数据库-图书管理系统

这一章主要是把上一章写在网页里的java 代码从网页中分离出来&#xff0c;放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题&#xff1a; 1、dao包存放有关数据库的信息&#xff1a;BaseDao包就放数据库加载驱动和增删改和关闭资源&#xff1b;而其他…...

轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...

U盘文件乱码:原因、恢复、预防与总结

U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备&#xff0c;时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符&#xff0c;文件内容无法正常查看&#xff0c;甚至文件根本无法被打开。当我们在电脑上插入U盘&#xff0c;准备查看…...

OpenStack介绍

OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...

OpenGL编译用户着色器shader

shader相信很多朋友们都听说过&#xff0c;shader就是运行再GPU上的程序。虽然是这么说&#xff0c;但是我们发现&#xff0c;很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为&#xff0c;许多编译器不会自动将shader文件编译成可执行的代码然后发…...

C++ 已经知道,中序和后序,推算前序的方法。

已经知道&#xff0c;中序和后序&#xff0c;推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...

unity打包到安卓帧率降低

这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...

计算机网络复习——概念强化作业

物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...

DO、DTO、VO都是干什么的?

DO、DTO、VO 是三个常见的Java 对象&#xff0c;它们都是用来承载数据的&#xff0c;但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象&#xff0c;也称为实体对象。D0 通常用于数据库表的映射&#xff0c;DO中包含了实体的属性以及对实体的操作方法。DO 对应…...

深入探索 Node.js:构建强大的后端应用

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现

在探索大语言模型的创意应用过程中&#xff0c;我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作&#xff0c;实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...

【Git】:远程操作

目录 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置 Git 忽略特殊文件 给命令配置别名 我们可以自己搭建⼀台运行 Git 的服务器&#xff0c;不过现阶段&#xff0c;为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站&#xff0…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一&#xff0c;被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统&#xff08;EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化

研究背景 随着中医药文化的不断传承与发展&#xff0c;传统中药材的市场需求逐渐增加。然而&#xff0c;随着药材种类繁多、来源复杂、品质参差不齐&#xff0c;如何高效地管理、分析与展示中药材的相关数据&#xff0c;成为现代中药产业面临的重要课题。传统的药材数据管理方…...

docker及docker exec命令学习笔记

docker exec 是一个常用的 Docker 命令&#xff0c;允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法&#xff1a; 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...

【pyspark学习从入门到精通24】机器学习库_7

目录 聚类 在出生数据集中寻找簇 主题挖掘 回归 聚类 聚类是机器学习中另一个重要的部分&#xff1a;在现实世界中&#xff0c;我们并不总是有目标特征的奢侈条件&#xff0c;因此我们需要回归到无监督学习的范式&#xff0c;在那里我们尝试在数据中发现模式。 在出生数据…...

Unity 策略游戏地图上的网格是如何实现的

在Unity中实现策略游戏地图上的网格&#xff0c;主要涉及到地图数据的处理、地图的加载与渲染、以及玩家在地图上的移动与碰撞检测等关键步骤。以下是对这些步骤的详细解释&#xff1a; 一、地图数据的处理 收集地图数据&#xff1a;这包括地形高度、地形纹理、建筑物、树木等…...

【MySQL 进阶之路】锁详解

MySQL 锁详解 1. 锁的基本概念 锁在数据库中是用来保证数据一致性和防止并发冲突的一种机制。MySQL 中的锁可以分为不同的类型和粒度&#xff0c;每种锁都有特定的使用场景和特点。了解锁的类型、作用以及如何避免锁带来的问题是提升数据库性能和避免数据冲突的关键。 2. 锁…...

RK3588--解码H264(mpp-dec-h264-to-yuv-file)

1. 简介 源码下载:https://download.csdn.net/download/mao0514/90096131 本例完成H264格式文件解码,并保存为yuv格式文件。参考mpp_dec_test重写,进行了一部分精简。 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体…...

解决Conda虚拟环境中pip下载包总是到base环境的问题

conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中&#xff0c;导致无法正确进行环境隔离&#xff0c;下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本&#xff0c;如下所示&#xff0c;本人的demo虚拟环境直接使用pip…...

PyCharm 中设置虚拟环境

在 PyCharm 中设置虚拟环境的步骤如下&#xff1a; 1. 创建新项目时设置虚拟环境 1. 打开 PyCharm 并选择 New Project。 2. 在 Location 中指定项目路径。 3. 在右侧的 Python Interpreter 下&#xff0c;选择 New Environment。 Environment: 选择 Virtualenv。 Loca…...

M9484C VXG 矢量信号发生器- 110GHz-

M9484C VXG 矢量信号发生器 - 110GHz- M9484C VXG 是一款矢量信号发生器&#xff0c;在每个通道上提供 2.5 GHz 调制带宽&#xff0c;能够生成高达 54 GHz 的信号。 这款 VXG 矢量信号发生器可以组成经过校准和同步的全方位综合解决方案&#xff0c;帮助您更快测试下一代无线…...

机器学习详解(3):线性回归之代码详解

文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播&#xff1a;forward_propagation代价函数&#xff1a;cost_function反向传播&#xff1a;backward_propagation参数更新&#xff1a;update_parameters训练方法&#xff1a;train代码运行结果 3 使用Py…...

工业检测基础-工业相机选型及应用场景

以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据&#xff1a; 2D相机 检测原理&#xff1a;基于二维图像捕获&#xff0c;通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景&#xff1a;广泛应用于平面工件的外观检测&#xff0c;如检测…...

标准状态下一个气体分子每秒平均碰撞次数的估算

要估算在标准状态&#xff08;0C, 1个大气压&#xff09;下&#xff0c;一个气体分子在1秒内与其他分子的碰撞次数&#xff0c;我们可以使用一些基本的物理和化学原理。这个过程涉及到气体动力学理论&#xff0c;特别是麦克斯韦-玻尔兹曼分布。 计算气体分子的平均速率&#xf…...

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…...

Android 镜像模式和扩展模式区别探讨-Android14

Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...

链表头文件大更新!!!

引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能&#xff0c;让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件&#xff0c;定义了一个模板类 LinkedList&#xff…...

ROS2创建 base 包用于其他模块的参数配置和头文件依赖

Demo 背景 ROS2项目开发中存在以下需求&#xff1a;有多个包需要读取一些共同的配置项(以txt或者yaml形式存在&#xff09;&#xff0c;且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...

设计模式の软件设计原则

文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...

【python自动化四】日志打印

我们在进行自动化测试时&#xff0c;需要打印过程日志和结果日志等&#xff0c;这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下&#xff0c;可根据需要修改&#xff1a; import logging import os import timefrom logging.handlers import …...

E498 ThinkPHP+MYSQL+LW+纯洁婚纱网站系统的设计与实现 源码 配置 文档 全套资料

婚纱网站系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 在互联网和电子商务迅速发展的今天&#xff0c;网络已经是人们日常生活所不可缺少的信息获取渠道&#xff0c;人们日常生活基本已完全被网络所覆盖&#xff0c;互联网影响到各…...

【PostgreSQL系列】列类型从整数转换为 UUID

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑&#xff1a;在Windows系统写了一个脚本&#xff0c;比如上面&#xff0c;随后上传到服务&#xff0c;执行会报错 原因&#xff1a; 解决方案&#xff1a;在linux系统touch文件&#xff0c;并通过vim添加内容&…...

VAE为什么叫变分(variational),相对于AE有什么区别。

VAE为什么叫变分&#xff08;variational&#xff09;&#xff0c;相对于AE有什么区别。 VAE为什么叫变分&#xff08;variational&#xff09;&#xff1f;VAE相对于AE有什么区别&#xff1f; VAE为什么叫变分&#xff08;variational&#xff09;&#xff1f; 变分自编码器&…...

Codeforces Round 991 (Div. 3)

补题连接 A. Line Breaks 思路&#xff1a;从头开始累加单词个数&#xff0c;超过m就退出。 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define int long longvoid solve() {int n, m, k;cin >> n >> m;vector<string> a(n);…...

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...

Android上运行OpenCV(Android Studio)

用Android Studio的话&#xff0c;整体来说没什么难的&#xff0c;照着教程来做就好了。 【OpenCV】OpenCV库的安装 - Android与OpenCV系列教程_哔哩哔哩_bilibili 主要就是导入module&#xff0c;然后加入依赖。代码只有几行。 if(OpenCVLoader.initLocal()){Toast.makeText(…...

代码随想录算法训练营day50|动态规划12

不同的子序列 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素&#xff0c;其实就是直接变数字&#xff0c;其只删除原来的较长的数组里的元素 递推模拟&#xff0c;使用s的最后一个元素匹配&#xff0c;或者删除…...

图像生成-扩散模型的经典之作DDPM

论文&#xff1a;https://arxiv.org/pdf/2006.11239 项目&#xff1a;https://github.com/hojonathanho/diffusion Denoising Diffusion Probabilistic Models (DDPM) 是一种生成模型&#xff0c;它通过一系列逐步添加噪声的过程将数据点映射到一个简单的先验分布&#xff08;…...

知识拓展 ?. 连选链操作

?. 连选链操作 ?. 可选链操作符 ?. 是可选链操作符&#xff0c;常用于访问引用类型具有不确定性的内部数据时&#xff0c;比如要访问一个对象中的数组&#xff0c;不确定数组一定有数据就可以使用 ? 取读取它的 length 属性&#xff0c;如果对象没有这个属性也仅会返回 …...

API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则

目录 1、HTTP API规范1.1 原则1.2 协议1.3 版本1.4 路径1.5 HTTP 方法&#xff08;Method&#xff09;1.6 过滤信息1.7 参数命名1.8 HTTP 状态码&#xff08;Response Code&#xff09;1.9 鉴权 2、状态码2.1 API返回基础规范2.2 常见的 HTTP 状态码2.3 API错误信息应该放到响应…...

【D3.js in Action 3 精译_043】5.1 饼图和环形图的创建(三):圆弧的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09; ✔️5.1.4 数据标签的添加&#xff08;四&…...

7. 一分钟读懂“单例模式”

7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统&#xff0c;无论有多少员工提交打印任务&#xff0c;大家的请求都汇总到唯一的打印管理中心&#xff0c;按顺序排队输出。这个中心必须全局唯一&#xff0c;避免多个队列出现资源冲突&#xff0c;保证打印任务井然有序。…...

如何让谷歌外链看起来更真实?

在SEO优化过程中&#xff0c;外链的自然性往往会被忽视&#xff0c;尤其是在一些急于见效的策略中&#xff0c;外链往往集中在高权重的少数几个网站上&#xff0c;导致外链结构单一且缺乏多样性。这样的外链网络容易让搜索引擎怀疑其真实性&#xff0c;进而影响网站排名。如何才…...

C标签和 EL表达式的在前端界面的应用

目录 前言 常用的c标签有&#xff1a; for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 &#xff1a; ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...

Luma 视频生成 API 对接说明

Luma 视频生成 API 对接说明 随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平…...

嵌入式基础:Linux C语言:Day7

重点&#xff1a; strlen()函数\strcpy()函数\strcat实现\strcmp()实现 数组的清空&#xff1a;bzero函数、memset函数 一、字符数组 <1> 概念 字符数组本质上就是一个数组&#xff0c;保存一个个字符&#xff0c;也一般用来保存字符串 字符串由多个字符组成的一个字符…...

阿里云盘permission denied

问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤&#xff1a; 检查文件权限 运行以下命令检查文件的权限&#xff1a; ls -l aliyunpan输出中会看到类似以下内容&#xff1a; -rw-r--r-- 1 user group 123…...

Flink学习连载文章12--FlinkSQL高级部分

eventTime 测试数据如下&#xff1a; {"username":"zs","price":20,"event_time":"2023-07-17 10:10:10"} {"username":"zs","price":15,"event_time":"2023-07-17 10:10:3…...