MyBatis学习——第五篇(手动分页和pagehelper分页实现)
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分页实现)相关推荐
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...
- 【论文笔记】AAAI2022多智能体强化学习论文五篇
文章目录 引子 Anytime Multi-Agent Path Finding via Machine Learning-Guided Large Neighborhood Search MAPF- ...
- 分页利器——pageHelper分页插件
pageHelper插件在分页上有哪些优势? 分页插件给我们封装了很多参数,不用我们再去硬性编码获取各种参数. pageHelper封装参数如下,这个参数封装在com.github.pagehelpe ...
- Ipage分页和PageHelper分页
分页插件 两个都用于分页,常用的应该是PageHelper了, 使用方法是 PageHelper.startPage()然后后边写sql就可以. 紧接着的一个sql起作用. IPage则需要在dao层 ...
- 零基础入门深度学习的五篇经典教程
零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂, ...
- Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail
一.touch命令: 命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法:touch [文件名] 功能描述:创建空文件 例子: touch leanring.file ...
- 计算机推演未来发展动象,大学生计算机基础学习心得五篇
学习作为一种获取知识交流情感的方式,已经成为人们日常生活中不可缺少的一项重要内容,尤其是在二十一世纪这个知识经济时代,自主学习已是人们不断满足自身需要.以下是小编整理的大学生计算机基础学习心得,希望可 ...
- 学习第五篇:【SpringBoot-Labs】Spring Boot 调试环境、热部署入门、Lombok、MapStruct入门
本周(8.21-8.27)将学习芋道 Spring Boot的以下文章: 8.21: 快速入门 8.22:Spring Boot 自动配置原理 .Jar 启动原理 8.23:调试环境. 热部署入门.消 ...
- MyBatis学习总结(五)——实现关联表查询
2019独角兽企业重金招聘Python工程师标准>>> 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里 ...
- 小白入门深度学习 | 第五篇:数据不均衡的处理方法
前言:
最新文章
- 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
- 人脸关键点 PFLD
- sort,uniq,wc,history命令简介
- C++ inline内联函数
- python的等待代码是什么_Python selenium 三种等待方式详解
- tomcat更改端口序
- 常用PDF文档开发库
- leach协议的能量检测仿真
- 图片质量与ISO 光圈 快门 测光 曝光与曝光补偿 焦距和焦距转换系数 景深与光圈优先 白平衡与RAW
- 计算机用户配置如何查看,怎么查看电脑内存和配置 教你查看电脑真实配置的方法...
- Javascript前端模块化
- python对数据分组的方法
- 货拉拉 Android 动态资源管理系统原理与实践(下)
- 线性表示线性相关线性无关
- 正负数原码、反码、补码以及位运算
- MFC Windows 程序设计[218]之网络打印机(附源码)
- php网站如何添加ico图标,如何添加favicon.ico图标?
- 无线网络两台计算机如何共享打印机,打印机共享:如何实现多台电脑控制共用一台打印机(二无线篇)...
- 基于深度学习的轴承故障识别-构建基础的CNN模型
- react 编译警告 Compiled with : WARNING in
热门文章
- 搜索了才发现,原来这首歌的原唱是她们,SHE歌曲专辑下载,beyond歌曲专辑下载
- 202202 喜马拉雅 下载 下架产品为mp3 m4a格式
- 微型计算机基础知识答案,计算机基础知识授课试题及答案
- 简单理解t检验与秩和检验
- 测试手机是否可以安装MRP软件和MRP游戏
- 计算机组成原理考试试题答案,计算机组成原理期末考试试题及答案 (精选可编辑)...
- armv6、armv7、armv7s、arm64 与开发静态库(.a)
- CWM(Common warehouse metamodel)
- 全球卡巴斯基升级服务器列表
- Iphone 铃声制作及同步