大項目之網上書城(九)——訂單Demo

来源:https://www.cnblogs.com/zhangA/archive/2019/06/23/11071231.html
-Advertisement-
Play Games

大項目之網上書城(九)——訂單Demo [TOC] 主要改動 加了創建訂單,為訂單付款,刪除訂單。 1.OrderServiceImpl 代碼 有添加、刪除、付款、根據是否付款查找。還加了添加收貨信息登記。 2.OrderDaoImpl 代碼 目前有添加、刪除、根據order_id查找和根據user ...


目錄

大項目之網上書城(九)——訂單Demo

主要改動

加了創建訂單,為訂單付款,刪除訂單。

1.OrderServiceImpl

代碼

有添加、刪除、付款、根據是否付款查找。還加了添加收貨信息登記。

package cn.edu.bdu.mc.services.impls;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import cn.edu.bdu.mc.beans.Book;
import cn.edu.bdu.mc.beans.Order;
import cn.edu.bdu.mc.beans.Orderitem;
import cn.edu.bdu.mc.daos.BookDao;
import cn.edu.bdu.mc.daos.OrderDao;
import cn.edu.bdu.mc.daos.OrderitemDao;
import cn.edu.bdu.mc.daos.impls.BookDaoImpl;
import cn.edu.bdu.mc.daos.impls.OrderDaoImpl;
import cn.edu.bdu.mc.daos.impls.OrderitemDaoImpl;
import cn.edu.bdu.mc.services.OrderService;

public class OrderServiceImpl implements OrderService {
    
    private OrderDao orderDao = new OrderDaoImpl();
    private OrderitemDao orderitemDao  = new OrderitemDaoImpl();
    private BookDao bookDao = new BookDaoImpl();
    
    @Override
    public boolean addOrder(String order_id, int user_id, String name, String address, String phone, String[] book_ids) throws SQLException {
        // TODO Auto-generated method stub
        List<Book>books = new ArrayList<Book>();
        for (String book_id : book_ids) {   
            Book book = bookDao.findBookById(Integer.parseInt(book_id));
            books.add(book);
            //如果數量不夠了就本次購買失敗
            if(book.getCount()==0) {
                return false;
            }
        }
        Order order = new Order();
        order.setUser_id(user_id);
        order.setReciver_name(name);
        order.setReciver_phone(phone);
        order.setReciver_address(address);
        order.setOrder_id(order_id);
        orderDao.addOrder(order);
        for (Book book : books) {           
            Orderitem orderitem = new Orderitem();
            orderitem.setBook_id(book.getBook_id());
            orderitem.setOrder_id(order_id);
            orderitem.setCount(1);
            orderitem.setPrice(book.getPrice());
            book.setCount(book.getCount()-1);
            bookDao.update(book);
            orderitemDao.addOrderitem(orderitem);
        }
        return true;
    }
    
    @Override
    public void AfterPay(String order_id) throws SQLException {
        Order order = orderDao.findOrderById(order_id);
        order.setPaystate(1);
        orderDao.update(order);
    }

    @Override
    public Order delById(String order_id) throws SQLException {
        // TODO Auto-generated method stub
        Order order = orderDao.delById(order_id);
        orderitemDao.delById(order_id);
        return order;
    }

    @Override
    public List<Order> findNotPayByUser_id(int user_id) throws SQLException {
        // TODO Auto-generated method stub
        return orderDao.findOrderByUser_id(user_id, 0);
    }

    @Override
    public List<Order> findAreadyPayByUser_id(int user_id) throws SQLException {
        // TODO Auto-generated method stub
        return orderDao.findOrderByUser_id(user_id, 1);
    }

    
}

2.OrderDaoImpl

代碼

目前有添加、刪除、根據order_id查找和根據user_id查找

package cn.edu.bdu.mc.daos.impls;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.edu.bdu.mc.beans.Order;
import cn.edu.bdu.mc.daos.OrderDao;
import cn.edu.bdu.mc.utils.JDBCUtil;

public class OrderDaoImpl implements OrderDao {

    private DataSource dataSource = JDBCUtil.getDataSource();
    private QueryRunner queryRunner = new QueryRunner(dataSource);      
    
    @Override
    public void addOrder(Order order) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "insert into `order`(user_id,order_id,reciver_name,reciver_phone,reciver_address,paystate,money,order_time) values(?,?,?,?,?,0,0,?)";
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        String date1 = dateFormat.format(date);
        queryRunner.update(sql,order.getUser_id(),order.getOrder_id(),order.getReciver_name(),order.getReciver_phone(),order.getReciver_address(),date1);
    }
    
    @Override
    public void update(Order order) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "update `order` set user_id = ?,reciver_name = ?,reciver_phone = ?,reciver_address = ?,paystate = ?,money = ?,order_time = ?";
        queryRunner.update(sql,order.getUser_id(),order.getReciver_name(),order.getReciver_phone(),order.getReciver_address(),order.getPaystate(),order.getMoney(),order.getOrder_time());
    }

    @Override
    public Order findOrderById(String order_id) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "select * from `order` where order_id = ?";
        return queryRunner.query(sql, new BeanHandler<Order>(Order.class), order_id);
    }

    @Override
    public Order delById(String order_id) throws SQLException {
        Order order = findOrderById(order_id);
        String sql = "delete from `order` where order_id = ?";
        queryRunner.update(sql, order_id);
        return order;
    }

    @Override
    public List<Order> findOrderByUser_id(int user_id, int paystate) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "select * from `order` where user_id = ? and paystate = ?";
        return queryRunner.query(sql, new BeanListHandler<Order>(Order.class), user_id, paystate);
    }
    
    

}

3.OrderitemDaoImpl

代碼

目前有添加和刪除

package cn.edu.bdu.mc.daos.impls;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;

import cn.edu.bdu.mc.beans.Orderitem;
import cn.edu.bdu.mc.daos.OrderitemDao;
import cn.edu.bdu.mc.utils.JDBCUtil;

public class OrderitemDaoImpl implements OrderitemDao {

    private DataSource dataSource = JDBCUtil.getDataSource();
    private QueryRunner queryRunner = new QueryRunner(dataSource);      

    @Override
    public void addOrderitem(Orderitem orderitem) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "insert into orderitem values (?,?,?,?)";
        queryRunner.update(sql,orderitem.getOrder_id(),orderitem.getBook_id(),orderitem.getCount(),orderitem.getPrice());
    }

    @Override
    public void delById(String order_id) throws SQLException {
        // TODO Auto-generated method stub
        String sql = "delete from `order` where order_id = ?";
        queryRunner.update(sql, order_id);
    }

}

4.orderitem_insert觸發器

代碼

orderitem中每增加一項,將他對應的order_id的訂單的錢增加上他的書的價格乘以數量。

DROP TRIGGER IF EXISTS `orderitem_insert`;
DELIMITER ;;
CREATE TRIGGER `orderitem_insert` AFTER INSERT ON `orderitem` FOR EACH ROW begin
    update `order` set money = money + new.price * new.count where order_id = new.order_id;
end
;;
DELIMITER ;

5.DelOrderServlet

代碼

package cn.edu.bdu.mc.servlets;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

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 cn.edu.bdu.mc.beans.Order;
import cn.edu.bdu.mc.services.OrderService;
import cn.edu.bdu.mc.services.impls.OrderServiceImpl;

/**
 * Servlet implementation class DelOrderServlet
 */
@WebServlet("/DelOrder")
public class DelOrderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DelOrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            String order_id = request.getParameter("order_id");
            OrderService orderService = new OrderServiceImpl();
            Order order = orderService.delById(order_id);
            response.sendRedirect(request.getContextPath()+"/client/order.jsp");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

6.NewOrderServlet

代碼

package cn.edu.bdu.mc.servlets;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

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 cn.edu.bdu.mc.beans.Order;
import cn.edu.bdu.mc.beans.User;
import cn.edu.bdu.mc.services.OrderService;
import cn.edu.bdu.mc.services.impls.OrderServiceImpl;

/**
 * Servlet implementation class NewOrderServlet
 */
@WebServlet("/NewOrder")
public class NewOrderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public NewOrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if(request.getSession().getAttribute("shouhuo")==null) {
            response.sendRedirect(request.getContextPath()+"/client/shouhuo.jsp");
        }else {
            try {
                String[] book_ids = request.getParameter("book_id_list").split("#");
                User user = (User) request.getSession().getAttribute("user");
                int user_id = user.getUser_id();
                Map<String, String>shouhuo = (Map<String, String>) request.getSession().getAttribute("shouhuo");
                String name = shouhuo.get("name");
                String phone = shouhuo.get("phone");
                String address = shouhuo.get("address");
                OrderService orderService = new OrderServiceImpl();
                String order_id = UUID.randomUUID().toString();
                boolean create_order = orderService.addOrder(order_id, user_id, name, address, phone, book_ids);
                if(create_order) {
                    String htmlCode="<!DOCTYPE html>\n" + 
                            "<html>"
                            + "<head>"
                            + "<link rel=\"stylesheet\" href=\""+request.getContextPath()+"/bootstrap-3.3.7-dist/css/bootstrap.min.css\">"
                            + "</head>"
                            + "<body>"
                            + "<div style=\"position:absolute;left:44%;top:42%;height:140px;width:240px;background-color:rgba(145, 162, 196, 0.9);border:1px;text-align:center;\"id=\"quit1\">\r\n" + 
                            "   <h3>訂單創建成功!請儘快付款!</h3><a class=\"btn btn-info\" href=\""+request.getContextPath()+"/client/order.jsp\">查看訂單</a>&nbsp;&nbsp;&nbsp;&nbsp;"
                            +"<a class=\"btn btn-info\" href=\""+request.getContextPath()+"/PayFor?order_id=\""+order_id+">立即付款</a>\n" + 
                            "</div>"
                            + "</body>"
                            + "</html>";
                    response.getWriter().write(htmlCode);
                }else {
                    String htmlCode="<!DOCTYPE html>\n" + 
                            "<html>"
                            + "<head>"
                            + "<link rel=\"stylesheet\" href=\""+request.getContextPath()+"/bootstrap-3.3.7-dist/css/bootstrap.min.css\">"
                            + "</head>"
                            + "<body>"
                            + "<div style=\"position:absolute;left:44%;top:46%;height:100px;width:240px;background-color:rgba(145, 162, 196, 0.9);border:1px;text-align:center;\"id=\"quit1\">\r\n" + 
                            "   <h3>訂單創建失敗!請檢查訂單!</h3><a class=\"btn btn-info\" href=\""+request.getContextPath()+"/client/order.jsp\">查看訂單</a>&nbsp;&nbsp;&nbsp;&nbsp;"
                            +"<a class=\"btn btn-info\" href=\""+request.getContextPath()+"/client/index.jsp\">再逛逛</a>\n" + 
                            "</div>"
                            + "</body>"
                            + "</html>";
                    response.getWriter().write(htmlCode);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

7.PayForServlet

代碼

package cn.edu.bdu.mc.servlets;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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 cn.edu.bdu.mc.beans.Order;
import cn.edu.bdu.mc.beans.User;
import cn.edu.bdu.mc.daos.OrderDao;
import cn.edu.bdu.mc.daos.impls.OrderDaoImpl;
import cn.edu.bdu.mc.services.OrderService;
import cn.edu.bdu.mc.services.impls.OrderServiceImpl;

/**
 * Servlet implementation class PayForServlet
 */
@WebServlet("/PayFor")
public class PayForServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PayForServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        try {
            String order_id = request.getParameter("order_id");
            OrderService orderService = new OrderServiceImpl();
            orderService.AfterPay(order_id);
            String htmlCode="<!DOCTYPE html>\n" + 
                    "<html>"
                    + "<head>"
                    + "<link rel=\"stylesheet\" href=\""+request.getContextPath()+"/bootstrap-3.3.7-dist/css/bootstrap.min.css\">"
                    + "</head>"
                    + "<body>"
                    + "<div style=\"position:absolute;left:44%;top:46%;height:100px;width:240px;background-color:rgba(145, 162, 196, 0.9);border:1px;text-align:center;\"id=\"quit1\">\r\n" + 
                    "   <h3>購買成功!</h3><a class=\"btn btn-info\" href=\""+request.getContextPath()+"/client/index.jsp\">繼續購買</a>&nbsp;&nbsp;&nbsp;&nbsp;"
                            +"<a class=\"btn btn-info\" href=\""+request.getContextPath()+"/client/order.jsp\">查看訂單</a>\n" + 
                    "</div>"
                    + "</body>"
                    + "</html>";
            response.getWriter().write(htmlCode);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

8.shouhuo.jsp

代碼

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>收貨地址</title>
</head>
<body style="background-color:#bbb;width:1400px;margin:0 auto">
<!-- 調用頭部頁面 -->
<div style="width:100%;height:100px;float:left">
<jsp:include page="/client/head.jsp"></jsp:include>
</div>
<!-- 通用內容體大小 -->
<div style="width:70%;height:720px;float:left;margin-left:15%;">
    <!-- 好看的圖 -->
    <div style="width:55%;height:100%;float:left;margin-top:10%;">
        <img alt="快遞員" src="${pageContext.request.contextPath }/client/img/kuaidi.jpg" style="width:90%;">
    </div>
    <!-- 登錄界面 -->
    <div style="width:45%;height:80%;float:left;margin-top:7%">
        <h1 style="color:#8b6914;text-align:center">收貨信息</h1>
        <hr style="height:2px;border:none;border-top:5px ridge green;" />
        <form action="${pageContext.request.contextPath }/ShouHuo" method="post" class="form-horizontal" role="form">
            <div class="form-group">
                <label for="lastname" class="col-sm-3 control-label input-lg">姓名</label>
                <div class="col-sm-9">
                    <input type="text" name="name" class="form-control input-lg"
                           placeholder="收貨人姓名" style="float:left"/>
                </div>
            </div>
            <div class="form-group">
                <label for="firstname" class="col-sm-3 control-label input-lg">手機號</label>
                <div class="col-sm-9">
                    <input type="text" name="phone" 
                    class="form-control input-lg" placeholder="收貨人手機號" style="float:left"/>
                </div>
            </div>
            
            <div class="form-group">
                <label for="firstname" class="col-sm-3 control-label input-lg">地址</label>
                <div class="col-sm-9">
                    <input type="text" name="address"
                    class="form-control input-lg" placeholder="收貨人地址" style="float:left"/>
                </div>
            </div>
            <div class="form-group">
                <label for="firstname" class="col-sm-1 control-label input-lg"></label>
                <div class="col-sm-5">
                    <input type="submit" name="submit" value="提交"
                    class="form-control input-lg btn btn-primary"style="width:100%;float:left"/>
                </div>
                <div class="col-sm-5">
                    <input type="reset" name="reset" value="重置" id="re"
                    class="form-control input-lg btn btn-warning"style="width:100%;float:left"/>
                </div>
            </div>
        </form>
    </div>
</div>
<!-- 調用底部頁面 -->
<div style="width:100%;height:60px;float:left">
<jsp:include page="/client/foot.jsp"></jsp:include>
</div>
</body>
</html>

效果圖

9.order.jsp

代碼

<%@page import="cn.edu.bdu.mc.beans.User"%>
<%@page import="cn.edu.bdu.mc.services.impls.OrderServiceImpl"%>
<%@page import="cn.edu.bdu.mc.services.OrderService"%>
<%@page import="cn.edu.bdu.mc.beans.Order"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>訂單</title>
</head>
<%
    User user = (User)request.getSession().getAttribute("user");
    OrderService orderService = new OrderServiceImpl();
    List<Order>notPay = orderService.findNotPayByUser_id(user.getUser_id());
    List<Order>areadyPay = orderService.findAreadyPayByUser_id(user.getUser_id());
    
%>
<body style="background-color:#bbb;width:1400px;margin:0 auto">
<!-- 調用頭部頁面 -->
<div style="width:100%;height:100px;float:left">
<jsp:include page="/client/head.jsp"></jsp:include>
</div>
<!-- 通用內容體大小 -->
<div style="width:70%;height:720px;float:left;margin-left:15%;">
    未付款:<br>
    <% if(notPay==null){ %>
        無<br>
    <% }else{ %>
        <% for(Order order : notPay){%>
            id=<font><%=order.getOrder_id() %></font>&nbsp;&nbsp;money=<font><%=order.getMoney() %></font>&nbsp;&nbsp;
            <a href="${pageContext.request.contextPath }/PayFor?order_id=<%=order.getOrder_id() %>">付款</a>&nbsp;&nbsp;
            <a href="${pageContext.request.contextPath }/DelOrder?order_id=<%=order.getOrder_id() %>">刪除</a>&nbsp;&nbsp;
            <br>
        <% } %>
    <% } %>
    已付款:<br>
    <% if(areadyPay==null){ %>
        無<br>
    <% }else{ %>
        <% for(Order order : areadyPay){%>
            id=<font><%=order.getOrder_id() %></font>&nbsp;&nbsp;money=<font><%=order.getMoney() %></font>&nbsp;&nbsp;
            <br>
        <% } %>
    <% } %>
</div>
<!-- 調用底部頁面 -->
<div style="width:100%;height:60px;float:left">
<jsp:include page="/client/foot.jsp"></jsp:include>
</div>
</body>
</html>

效果圖

點擊付款後,還刪除了一個,忘截圖了

總結

今天弄得不是很多,又是各種報錯。再加上開始的晚,於是拖到了現在才更。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 說到linux基礎命令,網上一搜一籮筐,想學也有很多教程,如果你不幸看到此篇文章,想看就認真看完,畢竟你點進來了不是嘛? 我每次寫的文章都是為了分享自己的學習成果或重要知識點,希望能幫助更多的人。但今天這篇文章是為自己加深linux命令印象而寫的,奈何經常忘記也是無奈啊! 推薦工具 FileZ ...
  • 1、常用熱鍵 【Tab】它具有“命令補全”與“文件補全”的功能【Ctrl+C】中斷執行中的程式組合鍵【Ctrl+d】鍵盤輸入結束。也可以用來替代 exit 2、Linux 常用編輯器 vi 和 vim vi 編輯器(vim 大同小異) (1)一般模式 【可以 刪除,複製,粘貼】 (2)編輯模式【可以 ...
  • 準備:客戶端centos6.10 服務端Centos7.6 實驗:客戶端生成證書請求,服務端頒發證書,最後吊銷其中一個證書 1、先在服務端上的/etc/pki/CA/目錄生成rsa的私鑰: 2、在服務端上生成自簽名證書 ① ②查看自簽名證書的詳細內容 ③ 查看自簽名證書簡要內容和查看證書的有效期 3 ...
  • 本篇為WEB環境配置的彙總篇,其中PHP以FASTCGI方式來運行,這種方式性能更高。經過配置後,我們的伺服器將同時可以運行PHP和.NET的程式,屬稱全能伺服器。所有配置可以根據自身實際需要進行增減。 準備 先準備以下軟體版本: PHP,MYSQL,phpMyAdmin 1、PHP在windows ...
  • 1. ls 作用:列出文件信息,預設為當前目錄下 常用選項: -a: 列出所有的文件,包括所有以.開頭的隱藏文件 -d: 列出目錄本身,並不包含目錄中的文件 -h: 和-l一起使用,文件大小人類易讀 -l: 長輸出 3.pwd顯示出當前/活動目錄的名稱 4. cd切換目錄 5. mkdir創建目錄常 ...
  • 針對Linux 文件完整性監控的實現 摘要 電腦和互聯網是20世紀以來最偉大的發明之一,隨著電腦技術的不斷發展,人們的生活方式發生了巨大的變化。電腦和互聯網的發展給人們的生產生活帶來了極大的便利,但同時也存在一定的安全隱患。在人們藉助互聯網展開一系列活動的時候,個人信息和交易信息就會在網路中儲 ...
  • Redis官網只提供了Linux版,MicroSoft自己搞了個Windows版,可在GitHub下載: https://github.com/microsoftarchive/redis/releases 安裝包方式 這種方式安裝完成後預設會自動開啟Redis服務。 說明: 由於勾選了添加環境變數 ...
  • Redis是一個開源的使用ANSI C語言編寫、基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供了對多種編程語言的支持。 Redis的外圍由一個鍵、值映射的字典構成,Redis提供五種數據類型:string,hash,list,set及zset(sorted set),所以Redis也被 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...