1:项目场景介绍

在项目中分页是十分常见的功能,一般使用插件实现分页功能,但是在使用插件之前我们首先手动写出分页代码,对比插件实现的分页,利于我们理解分页底层实现和更好的实现插件分页实用技术,本次使用的插件是PageHelper(采用都是物理分页)

在开始之前我们创建两个表,分别是t_user和person表,并且插入大量的数据。

t_user建表语句:

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

person建表语句:

CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

2:手动分页查询针对user表数据

项目首页:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h1>index.jsp</h1><jsp:forward page="/servlet/UserServlet2"><jsp:param value="all" name="method"/></jsp:forward></body>
</html>

首先开始我们的手动分页,核心是一个分页page类,里面有用于分页的各种属性

package com.thit.util;import java.util.List;/*** 抽象出来的分页类*/
public class PageUtil {private int currentPageNum; //当前要看哪一页,当前页private int pageSize=10;//每页显示的条数,页面显示数据条数private int totalSize;//总记录条数,总行数private int startIndex;//查询开始记录的索引 limit ? ? 开始索引private int totalPageNum;//总页数private int prePageNum;//上一页private int nextPageNum;//下一页private List  records;//当前页的记录集//用于显示页面上的导航的页号  用户可自定义//开始页码private int startPageNum;//结束页码private int endPageNum;private String url;//使用构造方法,传递必要的两个参数.第一个是页码,第二个总记录条数public PageUtil(int currentPageNum,int totalrecords){this.currentPageNum=currentPageNum;this.totalSize=totalrecords;//计算开始记录索引this.startIndex=(currentPageNum-1)*pageSize;//计算总页数this.totalPageNum=totalSize%pageSize==0?totalSize/pageSize:totalSize/pageSize+1;this.prePageNum=getPrePageNum1();this.nextPageNum=getNextPageNum1();//计算开始和结束页号  这个根据自身可设计if(totalPageNum>9){    //如果总页数大于9 开始页面startPageNum=currentPageNum-4;//结束页面endPageNum=currentPageNum+4;if(startPageNum<1){startPageNum=1;endPageNum=startPageNum+8;}if(endPageNum>totalPageNum){endPageNum=totalPageNum;startPageNum=endPageNum-8;}}else{startPageNum=1;endPageNum=totalPageNum;}}public int getStartPageNum() {return startPageNum;}public void setStartPageNum(int startPageNum) {this.startPageNum = startPageNum;}public int getEndPageNum() {return endPageNum;}public void setEndPageNum(int endPageNum) {this.endPageNum = endPageNum;}//得到上一页方法public int getPrePageNum1() {System.out.println("得到上一页方法");//上一页等于当前页减1prePageNum=currentPageNum-1;//如过上一个小于0if(prePageNum<=0){ //上一页等于1System.out.println("上一页小于0");prePageNum=1;}return prePageNum;}//得到下一页方法public int getNextPageNum1() {//下一页等于当前页加1System.out.println("得到下一页的方法");nextPageNum=currentPageNum+1;//如果下一页大于总页数if(nextPageNum>totalPageNum){    //下一页等于总页数System.out.println("下一页大于总页数");nextPageNum=totalPageNum;}return nextPageNum;}public int getPrePageNum() {return prePageNum;}public int getNextPageNum() {return nextPageNum;}public int getCurrentPageNum() {return currentPageNum;}public void setCurrentPageNum(int currentPageNum) {this.currentPageNum = currentPageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalSize() {return totalSize;}public void setTotalSize(int totalSize) {this.totalSize = totalSize;}public int getStartIndex() {return startIndex;}public void setStartIndex(int startIndex) {this.startIndex = startIndex;}public int getTotalPageNum() {return totalPageNum;}public void setTotalPageNum(int totalPageNum) {this.totalPageNum = totalPageNum;}public List  getRecords() {return records;}public void setRecords(List  records) {this.records = records;}public void setPrePageNum(int prePageNum) {this.prePageNum = prePageNum;}public void setNextPageNum(int nextPageNum) {this.nextPageNum = nextPageNum;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic String toString() {return "PageUtil [currentPageNum=" + currentPageNum + ", pageSize=" + pageSize + ", totalSize=" + totalSize+ ", startIndex=" + startIndex + ", totalPageNum=" + totalPageNum + ", 上一页=" + prePageNum+ ", 下一页=" + nextPageNum + ", records=" + records + ", startPageNum=" + startPageNum+ ", endPageNum=" + endPageNum + ", url=" + url + "]";}}

然后是Servlet:

package com.thit.web;
import java.io.IOException;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 com.thit.service.Userservice;
import com.thit.serviceimpl.UserserviceImpl;
import com.thit.util.PageUtil;@WebServlet("/servlet/UserServlet")
public class UserServlet  extends HttpServlet{Userservice userservice=new UserserviceImpl();/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("首先进入doget");String para=req.getParameter("method");System.out.println("方法参数:"+para);if(para.equals("all")) {//查询所有用户信息selectAllUsers(req,resp);}}private void selectAllUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubString num=req.getParameter("num");//第一次传递 num为空System.out.println("num的值是:"+num);if(null==num) {num="1";}PageUtil page=userservice.getAllusers(num);System.out.println(page.toString());req.setAttribute("page",page);//转发到新的页面req.getRequestDispatcher("/users.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("首先进入doPost");this.doGet(req, resp);}}

接着是service接口和实现类:

package com.thit.service;import java.util.List;import com.thit.entity.Person;
import com.thit.util.PageUtil;public interface Userservice {
//查询userpublic PageUtil getAllusers(String num);
//查询personpublic List<Person> getAllperson();
}-------------------实现类-----------------
package com.thit.serviceimpl;import java.util.List;import org.apache.commons.dbutils.DbUtils;import com.thit.dao.Userdao;
import com.thit.daoimpl.Userdaoimpl;
import com.thit.entity.Person;
import com.thit.entity.User;
import com.thit.service.Userservice;
import com.thit.util.PageUtil;public class UserserviceImpl implements Userservice {Userdao dao=new Userdaoimpl();public PageUtil getAllusers(String num) {// TODO Auto-generated method stubint currentPageNum=1;//如果当前页不为空,当前页等于numif(num!=null&&!num.trim().equals("")) {currentPageNum=Integer.parseInt(num);}//查询总行数方法int totalPageNum=dao.getTotalSize();System.out.println("查询总行数:"+totalPageNum);//当前页 和 总行数PageUtil pageUtil=new PageUtil(currentPageNum, totalPageNum);//根据开始下标和行数查询出来每页的数据List<User> list=dao.getAllusers(pageUtil.getStartIndex(), pageUtil.getPageSize());for(User u:list) {System.out.println(u);}pageUtil.setRecords(list);return pageUtil;}public List<Person> getAllperson() {List<Person> lists=dao.getAllperson();return lists;}}

dao层和实现类:

package com.thit.dao;import java.util.List;import com.thit.entity.Person;
import com.thit.entity.User;public interface Userdao {//手写分页查询user数据List<User> getAllusers(int startIndex,int pagesize) ; //开始索引和页面条数//查询表数据条数int getTotalSize();//pagehelper查询所有person数据List<Person> getAllperson();
}-----------------------dao实现类------------------------
package com.thit.daoimpl;public class Userdaoimpl extends BaseDao implements Userdao {Dbtools dbtools=new Dbtools();//手写查询分页public List<User> getAllusers(int startIndex, int pagesize) {// TODO Auto-generated method stubString sql = "select  * from t_user limit ?,?";List<User> lists = new ArrayList<User>();try {//通过工具类jdbc连接数据库Connection connection = getConnection();PreparedStatement pStatement = connection.prepareStatement(sql);pStatement.setInt(1, startIndex);pStatement.setInt(2, pagesize);ResultSet re = pStatement.executeQuery();while (re.next()) {int id = re.getInt("id");String username = re.getString("username");String password = re.getString("password");String address = re.getString("address");User user = new User(id, username, address);lists.add(user);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return lists;}// 查询总记录数public int getTotalSize() {// TODO Auto-generated method stubint count=0;try {String sql = "select count(*) as num from t_user";Connection connection = getConnection();PreparedStatement pStatement = connection.prepareStatement(sql);ResultSet re = pStatement.executeQuery();while (re.next()) {count= re.getInt("num");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return count;}//pagehelper分页public List<Person> getAllperson() {// mybatis查询SqlSession sqlsession = dbtools.getSession();PersonMapper personMapper=sqlsession.getMapper(PersonMapper.class);List<Person> lists=personMapper.getAllPersons();return lists;}}

最后的页面展示代码jsp如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";System.out.println("path:"+path);System.out.println("basePath:"+basePath);%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"><title>My JSP 'users.jsp' starting page</title><meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head><body><h1>分页展示数据</h1><table align="center" width="80%" border="1"><tr><td>id</td><td>username</td><td>address</td></tr><!--在请求域中 是EL表达式中的一个隐含对象,类似request,如:${requestScope.username} 表示在request域中取得username属性所对应的值,相当于request.getAttribute(“username”)。 --><c:forEach items="${requestScope.page.records}" var="user"><tr><td>${user.id}</td><td>${user.username}</td><td>${user.address}</td></tr><br></c:forEach></table><div align="center"><%-- <%=request.getAttribute(“userlist”) %> 等价于$ { requestScope.userlist } --%>用户表共${requestScope.page.totalSize}条数据<br>用户表共${requestScope.page.totalPageNum}页<br><a href="<%= basePath%>servlet/UserServlet?method=all&num=2">第二页</a><br><a href="${pageContext.request.contextPath}/servlet/UserServlet?method=all&num=1">首页</a><a href="${pageContext.request.contextPath}/servlet/UserServlet?method=all&num=${requestScope.page.prePageNum}">上一页</a><c:forEach begin="${requestScope.page.startPageNum}"end="${requestScope.page.endPageNum}" var="num"><a href="${pageContext.request.contextPath}/servlet/UserServlet?method=all&num=${num}">${num}</a></c:forEach><a href="${pageContext.request.contextPath}/servlet/UserServlet?method=all&num=${requestScope.page.nextPageNum}">下一页</a><a href="${pageContext.request.contextPath}/servlet/UserServlet?method=all&num=${requestScope.page.totalPageNum}">末页</a>跳转到 <input id="number" type="text" name="hello" size="6">页<inputtype="button" value="跳转" onclick="changeNumber()"></input><br><c:forEach begin="6"end="9" var="num"><a href="">${num}</a></c:forEach><script>function changeNumber() {//得到页码的具体值var num = document.getElementById("number").value;//是否是数字  输入的数字一定是整数或者是小于总页数的值window.location.href = "${pageContext.request.contextPath}/servlet/UserServlet?method=all&num="+ num;}</script></div>
</body>
</html>

手动分页结果显示如下:

3:pegeHelper插件分页针对user表数据

pegeHelper插件分页只是几个部分

第一:需要的mybatis的配置文件中配置插件

第二:在servlect中使用PageHelper的startPage方法

第三:PageHelper拦截器会拦截查询方法,并且在查询的sql中根据不同的数据库拼接分页语句实现分页

第四:将PageInfo这个类存放分页的各种属性信息,核心代码就这三行,num的值由页面传递过来

Page<Object> page=PageHelper.startPage(Integer.valueOf(num), 10);
         List<Person> persons=userservice.getAllperson();
         PageInfo<?> pageHepler=page.toPageInfo();

需要添加mybatis配置文件和mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?
--><properties resource="db.properties"></properties><typeAliases><package name="com.thit.entity"/></typeAliases><!--配置插件  --><plugins><!-- com.github.pagehelper为PageHelper类所在包名 --><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 使用下面的方式配置参数,后面会有所有的参数介绍 --><property name="param1" value="value1"/></plugin></plugins><environments default="demo"><environment id="demo"><!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --><transactionManager type="JDBC"></transactionManager><!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --><!-- POOLED 表示支持JDBC数据源连接池 --><!-- UNPOOLED 表示不支持数据源连接池 --><!-- JNDI 表示支持外部数据源连接池 --><dataSource type="POOLED"><property name="driver" value="${mysqldriver}"/><property name="url" value="${mysqlurl}"/><property name="username" value="${mysqlusername}"/><property name="password" value="${mysqlpassword}"/></dataSource></environment>
</environments><mappers><!-- <mapper resource="mapper/userMapper.xml"/> --><mapper resource="mapper/PersonMapper.xml"></mapper> <!--   <mapper class="com.thit.dao.PersonMapper"/> --></mappers></configuration>---------------------下边的为PersonMapper配置文件-----------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.thit.dao.PersonMapper"><select id="getAllPersons" resultType="Person">select * from person</select></mapper>

然后servlet如下:

package com.thit.web;import java.io.IOException;
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 com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.thit.entity.Person;
import com.thit.service.Userservice;
import com.thit.serviceimpl.UserserviceImpl;
import com.thit.util.PageUtil;@WebServlet("/servlet/UserServlet2")
public class UserServlet2  extends HttpServlet{Userservice userservice=new UserserviceImpl();/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("首先进入doget");String para=req.getParameter("method");System.out.println("方法参数:"+para);if(para.equals("all")) {//查询所有用户信息selectAllUsers(req,resp);}}private void selectAllUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubString num=req.getParameter("num");//第一次传递num为页数  num为空System.out.println("num的值是:"+num);if(null==num) {num="1";}//第二种,Mapper接口方式的调用,页数和页面显示条数Page<Object> page=PageHelper.startPage(Integer.valueOf(num), 10);List<Person> persons=userservice.getAllperson();PageInfo<?> pageHepler=page.toPageInfo();req.setAttribute("persons", persons);req.setAttribute("pagehelper", pageHepler);//转发到新的页面req.getRequestDispatcher("/persons.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("首先进入doPost");this.doGet(req, resp);}}

service和dao层在上边的代码中已经贴出来了。

页面展示代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'users.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><table align="center" width="80%" border="1"><tr><td>id</td><td>username</td><td>address</td></tr><c:forEach items="${requestScope.persons}" var="person"><tr><td>${person.id} </td><td>${person.username}</td><td>${person.email}</td></tr><br></c:forEach></table><div align="center">共${requestScope.pagehelper.total}条/共${requestScope.pagehelper.pages}页FirstPage<a href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num=1">首页</a><a href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num=${requestScope.pagehelper.prePage}">上一页</a><c:forEach   items="${requestScope.pagehelper.navigatepageNums}" var="num"><a href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num=${num}">${num}</a></c:forEach><a href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num=${requestScope.pagehelper.nextPage}">下一页</a><a href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num=${requestScope.pagehelper.pages}">末页</a>跳转到<input id="number" type="text" name="hello" size="6">页<input type="button" value="跳转" onclick="changeNumber()"></input><script>function changeNumber(){var num=document.getElementById("number").value;//是否是数字  输入的数字一定是整数或者是小于总页数的值window.location.href="${pageContext.request.contextPath}/servlet/UserServlet2?method=all&num="+num;}</script></div></body>
</html>

最后的展示效果如下:

MyBatis学习——第五篇(手动分页和pagehelper分页实现)相关推荐

  1. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  2. 【论文笔记】AAAI2022多智能体强化学习论文五篇

    文章目录 引子 Anytime Multi-Agent Path Finding via Machine Learning-Guided Large Neighborhood Search MAPF- ...

  3. 分页利器——pageHelper分页插件

    pageHelper插件在分页上有哪些优势? 分页插件给我们封装了很多参数,不用我们再去硬性编码获取各种参数. pageHelper封装参数如下,这个参数封装在com.github.pagehelpe ...

  4. Ipage分页和PageHelper分页

    分页插件 两个都用于分页,常用的应该是PageHelper了, 使用方法是 PageHelper.startPage()然后后边写sql就可以. 紧接着的一个sql起作用. IPage则需要在dao层 ...

  5. 零基础入门深度学习的五篇经典教程

    零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂, ...

  6. Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail

    一.touch命令: 命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法:touch [文件名] 功能描述:创建空文件 例子: touch leanring.file ...

  7. 计算机推演未来发展动象,大学生计算机基础学习心得五篇

    学习作为一种获取知识交流情感的方式,已经成为人们日常生活中不可缺少的一项重要内容,尤其是在二十一世纪这个知识经济时代,自主学习已是人们不断满足自身需要.以下是小编整理的大学生计算机基础学习心得,希望可 ...

  8. 学习第五篇:【SpringBoot-Labs】Spring Boot 调试环境、热部署入门、Lombok、MapStruct入门

    本周(8.21-8.27)将学习芋道 Spring Boot的以下文章: 8.21: 快速入门 8.22:Spring Boot 自动配置原理 .Jar 启动原理 8.23:调试环境. 热部署入门.消 ...

  9. MyBatis学习总结(五)——实现关联表查询

    2019独角兽企业重金招聘Python工程师标准>>> 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里 ...

  10. 小白入门深度学习 | 第五篇:数据不均衡的处理方法

    前言:

最新文章

  1. 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
  2. 人脸关键点 PFLD
  3. sort,uniq,wc,history命令简介
  4. C++ inline内联函数
  5. python的等待代码是什么_Python selenium 三种等待方式详解
  6. tomcat更改端口序
  7. 常用PDF文档开发库
  8. leach协议的能量检测仿真
  9. 图片质量与ISO 光圈 快门 测光 曝光与曝光补偿 焦距和焦距转换系数 景深与光圈优先 白平衡与RAW
  10. 计算机用户配置如何查看,怎么查看电脑内存和配置 教你查看电脑真实配置的方法...
  11. Javascript前端模块化
  12. python对数据分组的方法
  13. 货拉拉 Android 动态资源管理系统原理与实践(下)
  14. 线性表示线性相关线性无关
  15. 正负数原码、反码、补码以及位运算
  16. MFC Windows 程序设计[218]之网络打印机(附源码)
  17. php网站如何添加ico图标,如何添加favicon.ico图标?
  18. 无线网络两台计算机如何共享打印机,打印机共享:如何实现多台电脑控制共用一台打印机(二无线篇)...
  19. 基于深度学习的轴承故障识别-构建基础的CNN模型
  20. react 编译警告 Compiled with : WARNING in

热门文章

  1. 搜索了才发现,原来这首歌的原唱是她们,SHE歌曲专辑下载,beyond歌曲专辑下载
  2. 202202 喜马拉雅 下载 下架产品为mp3 m4a格式
  3. 微型计算机基础知识答案,计算机基础知识授课试题及答案
  4. 简单理解t检验与秩和检验
  5. 测试手机是否可以安装MRP软件和MRP游戏
  6. 计算机组成原理考试试题答案,计算机组成原理期末考试试题及答案 (精选可编辑)...
  7. armv6、armv7、armv7s、arm64 与开发静态库(.a)
  8. CWM(Common warehouse metamodel)
  9. 全球卡巴斯基升级服务器列表
  10. Iphone 铃声制作及同步