项目总体样式如下:

重点功能:模糊条件分页查询功能:

一、前期准备

PageBean实体类:

package com.itheima.pojo;import java.util.List;/***  PageBean: 分页查询功能用来封装数据传递给前端的*/
public class PageBean<T> {  // 这里自定义一个泛型// 总商品数private int totalCount;// 当前页数据 ( 把当前页查询出来的数据以List集合的形式封装到属性当中传递给前端 )private List<T> rows;/***  这里用自定义的泛型T : 因为以后开发项目的时候 我们有可能有Brand实体类,也有可能有User实体类等。*      我们自定义好泛型之后,以后谁new 这个PageBean类 这个泛型里面就是谁*/// getter and setterpublic int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public List<T> getRows() {return rows;}public void setRows(List<T> rows) {this.rows = rows;}
}

二、代码如下

2.1、mapper层 (BrandMapper)

package com.itheima.mapper;
import com.itheima.pojo.Brand;
import org.apache.ibatis.annotations.*;import java.util.List;public interface BrandMapper {/*** 1、查询所有商品功能**/@Select("select * from tb_brand")@ResultMap("brandResultMap")List<Brand> selectAll();/***  2、添加商品功能*/@Insert("insert into tb_brand values (null,#{brandName},#{companyName},#{ordered},#{description},#{status})")void add(Brand brand);/***  3、批量删除功能**  批量删除:因为我们不知道客户端会传过来几个删除id,因此这里我们要用动态sql 并且不能用注解的形式了*/void deleteByIds(int[] ids);/*** 4、 查询当前页的数据功能*  思路: 拿到客户端请求的 ”第几页页数“ 和 “每页展示数据数”,我们拿到之后,再把这页的数据全部查询出来展示给客户端*/@Select("select * from tb_brand limit #{begin},#{size}")@ResultMap("brandResultMap")List<Brand> selectByPage(@Param("begin") int begin, @Param("size") int size);/*** 5、查询数据库商品总数功能*      把数据库商品的总个数查询出来响应给前端*/@Select("select count(*) from tb_brand")int selectTotalCount();/*** 6、分页模糊条件查询功能** 接收前端请求的“页码数”和“每页展示数据数”和“模糊查询的数据请求”(在前端页面看:客户端模糊查询请求的数据只有三个:当前状态、企业名称、品牌名称)** (因为模糊条件查询:比如说客户端就请求了一个企业名称:“阿里巴巴”,但是我们数据库当中会有什么不同的关于“阿里巴巴”的数据,* 因为是模糊查询所以会查出来很多的数据,前端呢因为怕查询出来的数据太多了所以想分页,所以我们后端接收到前端请求的 “当前页码”,* “每页展示数据个数” 和“模糊查询的数据” 进行模糊分页查询就可以了* 就是按一页几条数据来进行查询响应给前端即可了 )*** begin: 当前页码* size: 每页展示数据个数* brand对象: 模糊查询的前端数据请求** 注意:@Param("") 里面的数据对应的是SQL语句的参数占位符 也就是SQL语句中 #{} 内的数据** @return*/List<Brand> selectByPageAndCondition(@Param("begin") int begin, @Param("size") int size, @Param("brand") Brand brand);/***  7、查询模糊查询出来的总商品数量功能*      因为这里面就一个brand对象 所以对象的属性名就相对应着SQL语句的 #{"参数占位数"}*/int selectTotalCountByCondition(Brand brand);}

BrandMapper.xml:

<?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.itheima.mapper.BrandMapper"><resultMap id="brandResultMap" type="brand"><result property="brandName" column="brand_name" /><result property="companyName" column="company_name" /></resultMap><delete id="deleteByIds">delete from tb_brand where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete><!-- where brand_name = #{brand.brandName}--><select id="selectByPageAndCondition" resultMap="brandResultMap">select *from tb_brand<where><if test="brand.brandName != null and brand.brandName != '' ">and  brand_name like #{brand.brandName}</if><if test="brand.companyName != null and brand.companyName != '' ">and  company_name like #{brand.companyName}</if><if test="brand.status != null">and  status = #{brand.status}</if></where>limit #{begin} , #{size}</select><select id="selectTotalCountByCondition" resultType="java.lang.Integer">select count(*)from tb_brand<where><if test="brandName != null and brandName != '' ">and  brand_name like #{brandName}</if><if test="companyName != null and companyName != '' ">and  company_name like #{companyName}</if><if test="status != null">and  status = #{status}</if></where></select></mapper>

2.2、service业务逻辑层

BrandService接口:(基本上和代理接口代码是一样的)

package com.itheima.service;
import com.itheima.pojo.Brand;
import com.itheima.pojo.PageBean;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;import java.util.List;
public interface BrandService {/*** 1、查询所有商品** @return*/List<Brand> selectAll();/***  2、添加商品**  @param brand*/void add(Brand brand);/*** 3、批量删除*/void deleteByIds(int[] ids);/***  4、查询当前页数据功能 & 查询数据库商品的总个数** @param begin : 当前页数* @param size  : 每一页的展示数据个数* @return*/PageBean<Brand> selectByPage(int begin, int size);/*** 6、分页模糊条件查询功能 & 模糊查询出总商品数功能* @return*/PageBean<Brand> selectByPageAndCondition( int begin, int size,  Brand brand);}

BrandServiceImpl:(实现BrandService接口)【该BrandServiceImpl实现了BrandService接口中的所有方法,因为BrandService接口中写的代码逻辑基本上和mapper层的代理接口一样,所以我们在BrandServiceImpl类中做业务逻辑同样相当于以前单独的一个BrandService类中的形式是一样的。】

细节1:使用BrandServiceImpl类实现BrandService接口做业务逻辑作用:降低了service层和web层的耦合度

细节2:所有的逻辑基本上就在业务逻辑层做处理,比如模糊查询需要用到%%,把查询的数据封装到对象属性中等、

package com.itheima.service.impl;
import com.itheima.mapper.BrandMapper;
import com.itheima.pojo.Brand;
import com.itheima.pojo.PageBean;
import com.itheima.service.BrandService;
import com.itheima.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import java.util.List;/***  用这个类实现接口(BrandService)的最终目的:*      降低service业务逻辑层和web层的servlet之间的耦合度**  原因: 以前的BrandService类(业务逻辑层)里面是用的方法,把增删改查等全部写成了方法返回到servlet层的*  现在是把这些增删改查的方法单独写到了实现BrandService接口的这个类当中了,降低了耦合度*/public class BrandServiceImpl implements BrandService {// 1. 创建工厂对象SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();/*** 1、查询所有商品** @return*/@Overridepublic List<Brand> selectAll() {// 2. 获取SessionSqlSession sqlSession = factory.openSession();// 3. 映射出BrandMapper接口BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);// 4. 调用BrandMapper接口中的查询所有的方法List<Brand> brands = brandMapper.selectAll();// 释放资源sqlSession.close();return brands;}/*** 2、添加商品** @param brand*/@Overridepublic void add(Brand brand) {// 2. 获取SessionSqlSession sqlSession = factory.openSession();// 3. 映射出BrandMapper接口BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);// 4. 调用BrandMapper接口中的查询所有的方法brandMapper.add(brand);// 5. 提交事务sqlSession.commit();// 6. 释放资源sqlSession.close();}/*** 3、批量删除*/@Overridepublic void deleteByIds(int[] ids) {// 2. 获取SessionSqlSession sqlSession = factory.openSession();// 3. 映射出BrandMapper接口BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);// 4. 调用BrandMapper接口中的批量删除的方法brandMapper.deleteByIds(ids);// 5. 提交事务sqlSession.commit();// 6. 释放资源sqlSession.close();}/*** 4、查询当前页数据功能 & 查询数据库商品的总个数**      思路: 把查询出来的当前页数据和数据库商品的总个数 封装到PageBean对象的属性当中,然后把PageBean对象返回给前端**  @param begin : 当前页数*  @param size  : 每一页的展示数据个数*/@Overridepublic PageBean<Brand> selectByPage(int begin,int size) {// 4.2. 获取SessionSqlSession sqlSession = factory.openSession();// 4.3. 映射出BrandMapper接口BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);/*** 重点: 在这里进行一下SQL语句分页查询的计算*    如: select * from emp limit 0,8;    # 计算公式:起始索引(页数)从0开始   起始索引 =(当前查询的页数-1)*每页展示数据数*    我们拿到的客户端请求的页数是第begin页,那么我们的SQL查询起始索引就是(begin-1)* size*/// 4.4、计算起始索引int begin1 =(begin-1)*size;// 4.5、计算每页展示的数据个数int size1 =size;/***  4.6、调用BrandMapper接口的查询当前页数据的功能*/List<Brand> brands =brandMapper.selectByPage(begin1,size1);/*** 4.7、调用BrandMapper接口的查询数据库商品总数的功能*/int totalCount =brandMapper.selectTotalCount();/***  4.8、*      把 6、7 查询出来的数据封装到PageBean对象的属性当中 返回给前端*/PageBean<Brand> pageBean =new PageBean<>();// 把数据封装到PageBean对象属性当中pageBean.setRows(brands);pageBean.setTotalCount(totalCount);/*** 4.9、把pageBean对象返回给前端(属性中已经封装好查询出来的数据咯)*/sqlSession.close();return pageBean;}/***   5、   分页模糊条件查询功能 & 模糊查询出总商品数功能* @param begin :当前页数* @param size : 每页中展示的数据数* @param brand : 模糊条件查询的数据* @return*/@Overridepublic PageBean<Brand> selectByPageAndCondition(int begin, int size, Brand brand) {// 5.2. 获取SessionSqlSession sqlSession = factory.openSession();// 5.3. 映射出BrandMapper接口BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);/*** 5.4、 调用BrandMapper接口中的 "分页模糊条件查询功能" ( 把模糊查询的结果按分页的形式查询出来,等会响应给前端 )**          注意:这里传参之前要把brand对象当中各属性加上 ”%属性名%“  (因为brand对象属性当中封装了前端模糊查询的请求数据,*                                                              又因为模糊查询SQL语句是: like %数据%  所以要处理属性)** // !!!! 1、这里要进行一下判断 不判断的话 如果有为null的 那下面模糊处理 就成了 %null%  就会使SQL语句错误了* // !!!! 2、还要进行分页查询的计算*/// 处理模糊表达式String brandName =brand.getBrandName();if (brandName!=null && brandName.length() >0){   // 这里要进行一下判断 不判断的话 如果有为null的 那下面模糊处理 就成了 %null%  就会使SQL语句错误了brand.setBrandName("%" +brandName+ "%");  // 再把客户端请求的数据做一下模糊表达式处理(如:"%华为%")),然后再封装到属性当中 传给代理接口进行SQL语句查询System.out.println(brand.getBrandName());}String companyName =brand.getCompanyName();if (companyName!=null && companyName.length() >0){   // 不为null 说明前端请求的有值brand.setCompanyName("%" +companyName+ "%");  // 再把客户端请求的数据做一下模糊表达式处理(如:"%华为%")),然后再封装到属性当中 传给代理接口进行SQL语句查询}// 分页计算int begin1 =(begin-1)*size;int size1 =size;List<Brand> brands =brandMapper.selectByPageAndCondition(begin1,size1,brand); // 这里再传的对象属性就是进行过模糊处理的属性数据/***  5.5、 调用BrandMapper接口中的查询 "模糊查询出来的总商品数量" 功能方法 ( 把模糊查询查询出来的总商品数量查询出来,等会响应给前端 )*/int counts =brandMapper.selectTotalCountByCondition(brand);/***  5.6、 把 5.4、5.5 查询出来的结果 封装到PageBean对象属性当中,传递响应给前端*/PageBean<Brand> pageBean =new PageBean<>();// 封装数据到属性当中pageBean.setTotalCount(counts);pageBean.setRows(brands);//  释放资源,返回PageBean对象sqlSession.close();return pageBean;}
}

2.3、web层

(使用优化后的servlet。 作用:减少了servlet的个数,以前我们做增删改查的时候就要写增删改查的servlet,需要写4个,太繁琐 ,优化后把每个servlet写成对象方法了 直接调用即可)

可以说因为BsaeServlet继承了HttpServlet,又BrandServlet继承了BsaeServlet,BrandServlet头上又写了访问的路径,所以可以说BrandServlet继承了HttpServlet并自带访问路径地址,可以说和以前的doGet、doPost使用方法又一样了

BsaeServlet:

这个类继承了HttpServlet,能继承service()方法 【可以理解为该方法是doPost,doGet他爹】

package com.itheima.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 获取请求路径String url =req.getRequestURI();//  获取最后一段路径(方法名)int index =url.lastIndexOf("/");    // 从路径后面数 第一次出现“/”的位置String methodName =url.substring(index+1);   // 获取到从“/”开始截取的后面的路径 (这里我们不要/ 所以+1)// System.out.println(methodName);// 2. 执行BrandServlet对象中的selectAll方法// 2.1 获取BrandServlet 字节码对象 Class (映射)Class<? extends BaseServlet> cls =this.getClass();/***  注意:这个 this代表的是谁?*      因为BrandServlet继承了该BaseServlet,所以可以说BrandServlet类当中也有BaseServlet类当中的*      service()方法,当客户端请求路径 @WebServlet("/brand/*") 格式的时候,会进入到BaseServlet资源*      路径下,会自动调用该service()方法,所以谁调用该方法,this就代表哪个对象*      因为实际上是BrandServlet类中调用的service()方法 所以this代表BrandServlet对象*/// 2.2 获取方法 Method对象(映射)try {Method method =cls.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);// 2.3 调用该方法 (映射)method.invoke(this,req,resp); // 把客户端的请求数据传到service方法参数中} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}
}

BrandServlet: (继承了BsaeServlet类):

package com.itheima.web.servlet;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.itheima.pojo.Brand;
import com.itheima.pojo.PageBean;
import com.itheima.service.BrandService;
import com.itheima.service.impl.BrandServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;/***  BrandServlet 继承父类BaseServlet*  父类中继承了HttpServlet 所以还是相当于BrandServlet继承了HttpServlet**  父类BaseServlet中有service方法 (该方法当客户端访问相对应路径时自动调用该方法中)*  子类继承了父类 也就是说:这个BrandServlet中实际上也有个service方法 当访问该 @WebServlet("/brand/*")路径时*  其实调用的是BrandServlet类当中的service()方法**/@WebServlet("/brand/*")
public class BrandServlet extends BaseServlet{// 获取业务逻辑层对象private BrandService brandService =new BrandServiceImpl();/***  1、 查询所有商品功能*/public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{// 1. 调用BrandServiceImpl完成查询所有功能List<Brand> brands =brandService.selectAll();// 2. 将Java对象数据转换成JSON格式数据,响应给前端response.setContentType("text/json;charset=utf-8"); // 中文乱码问题String toString = JSON.toJSONString(brands);// 3. 响应给前端数据response.getWriter().write(toString);}/***  2、 添加商品功能*/public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{// 1. 通过抓包拿到前端请求过来的数据(演示的是前端的数据为JSON格式)BufferedReader bufferedReader =request.getReader();String rl =bufferedReader.readLine();   // 拿到前端请求的JSON数据// 2. 将JSON数据转换成Java数据 (也就是说将JSON数据转换成Brand对象类型,将数据封装到对象属性中了)Brand brand =JSON.parseObject(rl,Brand.class);// 3. 调用BrandService接口中的添加商品方法brandService.add(brand);// 4. 响应给前端success的标识信号response.getWriter().write("success");}/*** 3、批量删除商品功能*      思路:把客户端请求的删除id 封装到int数组里面 然后传递给代理接口 供SQL语句使用 (SQL语句要用增强for 遍历该数组删除数据即可)*/public void deleteByIds(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1、抓包 ( 前端是以JSON数据格式请求数据的,所以需要先抓包 )BufferedReader bufferedReader =request.getReader();String params =bufferedReader.readLine();// System.out.println(params);   // 拿到前端请求的JSON数据格式: [1,2,3,4,5]// 2、把JSON数据转换成Java的数组格式int[] ids =JSON.parseObject(params,int[].class);// 3、调用业务逻辑层的批量删除方法 (将数组传到sql语句当中去)brandService.deleteByIds(ids);// 4、删除完成后,响应给前端成功的标识response.getWriter().write("success");}/***  4、查询当前页码数据功能 & 查询数据库商品的总个数*/public void selectByPage(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1、接收前端请求过来的 ”当前页码数“ 和 “每页展示的数据个数”// 假设:前端的访问类型:url?currentPage=1&pageSize=5  (表示:第一页,每一页有五条数据)// 因为前端不是以JSON格式数据请求的,所以用request域当中的方法就可以获取前端的请求(和doPost doGet方法一样)String _currentPage =request.getParameter("currentPage");String _pageSize =request.getParameter("pageSize");// 2、把String字符串类型转换成int类型int currentPage =Integer.parseInt(_currentPage);int pageSize =Integer.parseInt(_pageSize);// 3、调用查询方法 (把 ”当前页码“ 和 “每页展示的数据个数” 传递过去)PageBean<Brand> o =brandService.selectByPage(currentPage,pageSize);// 4. 将Java对象数据转换成JSON格式数据,响应给前端response.setContentType("text/json;charset=utf-8"); // 中文乱码问题String toString = JSON.toJSONString(o);// 5. 响应给前端数据response.getWriter().write(toString);}/***  4、分页模糊条件查询功能 & 模糊查询出总商品数功能*/public void selectByPageAndCondition(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 解决POST乱码问题request.setCharacterEncoding("UTF-8");// 1、接收前端请求过来的 ”当前页码数“ 和 “每页展示的数据个数” 和”模糊条件查询请求的数据参数“  (模糊条件查询请求的数据参数:前端是以JSON数据请求过来的)String _currentPage =request.getParameter("currentPage");String _pageSize =request.getParameter("pageSize");// 2、把String字符串类型转换成int类型int currentPage =Integer.parseInt(_currentPage);int pageSize =Integer.parseInt(_pageSize);// 3、获取前端模糊条件查询的请求参数// 3.1、先抓包BufferedReader bufferedReader =request.getReader();// 3.2、读一行String params =bufferedReader.readLine(); // 拿到前端模糊查询请求参数的JSON数据格式// 3.3、将JSON数据 转换成 Java对象形式Brand brand =JSON.parseObject(params,Brand.class);  // brand对象属性中封装好了前端模糊请求的数据// 4、 调用 分页模糊条件查询功能PageBean<Brand> o =brandService.selectByPageAndCondition(currentPage,pageSize,brand);String jsonString = JSON.toJSONString(o);// 5、 将查询出来的Java对象数据转换成JSON格式数据,响应给前端response.setContentType("text/json;charset=utf-8"); // 中文乱码问题// 6、 响应给前端数据response.getWriter().write(jsonString);}
}

其他代码找我要即可~

电商后台项目 + 源码相关推荐

  1. 计算机毕业设计JavaVue框架电商后台管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计JavaVue框架电商后台管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计JavaVue框架电商后台管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: ...

  2. java计算机毕业设计Vue框架电商后台管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Vue框架电商后台管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Vue框架电商后台管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈 ...

  3. java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档

    java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档 java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. [JAVA毕业设计]Vue框架电商后台管理系统源码获取和系统演示

    项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. 计算机毕业设计springboot基于Springboot的手机电商网站lmo47源码+系统+程序+lw文档+部署

    计算机毕业设计springboot基于Springboot的手机电商网站lmo47源码+系统+程序+lw文档+部署 计算机毕业设计springboot基于Springboot的手机电商网站lmo47源 ...

  6. java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 开发软件:i ...

  7. java毕业生设计新型农村消费贷电商平台计算机源码+系统+mysql+调试部署+lw

    java毕业生设计新型农村消费贷电商平台计算机源码+系统+mysql+调试部署+lw java毕业生设计新型农村消费贷电商平台计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B ...

  8. JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技术栈: 项目 ...

  9. O2O电商小程序源码(仿造盒马鲜生APP)

    O2O电商小程序源码分享,这是一款仿造仿造盒马鲜生APP开发的小程序,以下是小程序的截图页面,只需要做简单的修改和配置即可运行 项目下载地址: https://download.csdn.net/do ...

  10. WoShop多商户进口出口跨境电商uniapp商城源码,多语言翻译逻辑

    WoShop多商户进口出口跨境电商uniapp商城源码,多语言翻译逻辑(含国际支付.国际物流,APP+H5) 我觉得WoShop商城系统与市面上绝大部分的源码商相比,最大的区别在于,我们足够期待你的成 ...

最新文章

  1. tpopela/vips_java
  2. Asp.Net 中使用客户端Activex控件需要注意的事情
  3. 【语法】点语法的应用
  4. struts2教程(5)--请求参数校验
  5. 个人博客源码_我的使用Sanic的个人博客源码开源了!
  6. nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国
  7. python日志,支持彩色打印和文件大小切片写入和写入mongodb
  8. 栈中pop和top的区别是什么呢?用队列实现一个栈,Python语言
  9. 【ElasticSearch】Es 源码之 SearchTransportService 源码解读
  10. 叙述计算机网络的分类与拓扑结构,计算机的网络中有线网络和无线网络最主要的区别是()。...
  11. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
  12. 【BZOJ4503】两个串(FFT)
  13. C语言情人节浪漫烟花表白代码
  14. android 智能手机usb驱动程序,华为手机usb驱动下载
  15. 首席建筑师之光线追踪教程
  16. 做自己最好的生活大师
  17. C# 随机生成名字,电话,图像
  18. 计算机网卡接口类型,一文带你全方位了解网卡
  19. 浅谈软件项目开发过程中的主要项目风险及对策
  20. 网页色彩大攻略(蓝色系)

热门文章

  1. 服务器显示PSD缩略图么,psd缩略图补丁(如何显示psd缩略图)
  2. 算法设计与分析知识点整理
  3. Dsoframer注册方法
  4. SPSS 25软件安装教程
  5. 有趣的逻辑较量——《啊哈C语言》更新开始
  6. UI自动化测试之元素定位
  7. 2022手机商城源码h5运营版本
  8. 免费好用的钉钉内网穿透
  9. 基于C#的房屋租赁管理系统设计与实现
  10. xcap 发包工具 使用帮助