下载与安装

我是直接找的授课资源
反正下好之后解压之后是这样

MyBatis的工作原理


所以基本步骤就有:

  1. 读取MyBatis配置文件mybatis-config.xml
  2. 加载映射文件mapper.xml
  3. 创建会话工厂
  4. 创建会话
  5. 通过Executor操作数据库
  6. 输入参数和输出结果的映射

MyBatis的增删改查

先做一些前置工作
创建数据库

这个数据库我是直接拿的课程资源里的,方便嘛,不是重点。
干脆把sql放在这里,方便你我他

/*
SQLyog v10.2
MySQL - 5.5.27 : Database - eshop
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`eshop` /*!40100 DEFAULT CHARACTER SET gbk */;USE `eshop`;/*Table structure for table `admin_info` */DROP TABLE IF EXISTS `admin_info`;CREATE TABLE `admin_info` (`id` int(4) NOT NULL AUTO_INCREMENT,`name` varchar(16) DEFAULT NULL,`pwd` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;/*Data for the table `admin_info` */insert  into `admin_info`(`id`,`name`,`pwd`) values (1,'admin','123456'),(2,'my','123456'),(3,'sj','123456'),(4,'lxf','123456');/*Table structure for table `functions` */DROP TABLE IF EXISTS `functions`;CREATE TABLE `functions` (`id` int(4) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL COMMENT '功能菜单',`parentid` int(4) DEFAULT NULL,`url` varchar(50) DEFAULT NULL,`isleaf` bit(1) DEFAULT NULL,`nodeorder` int(4) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=gbk;/*Data for the table `functions` */insert  into `functions`(`id`,`name`,`parentid`,`url`,`isleaf`,`nodeorder`) values (1,'电子商城管理后台',0,NULL,'\0',0),(2,'商品管理',1,NULL,'\0',1),(3,'商品列表',2,NULL,'',1),(4,'商品类型列表',2,NULL,'',2),(5,'订单管理',1,NULL,'\0',2),(6,'查询订单',5,NULL,'',1),(7,'创建订单',5,NULL,'',2),(8,'用户管理',1,NULL,'\0',3),(9,'用户列表',8,NULL,'',1),(11,'退出系统',1,NULL,'',1);/*Table structure for table `order_detail` */DROP TABLE IF EXISTS `order_detail`;CREATE TABLE `order_detail` (`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '订单明细id',`oid` int(4) DEFAULT NULL COMMENT '订单id',`pid` int(4) DEFAULT NULL COMMENT '产品id',`num` int(4) DEFAULT NULL COMMENT '购买数量',PRIMARY KEY (`id`),KEY `pid` (`pid`),KEY `oid` (`oid`),CONSTRAINT `order_detail_ibfk_1` FOREIGN KEY (`oid`) REFERENCES `order_info` (`id`),CONSTRAINT `order_detail_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `product_info` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;/*Data for the table `order_detail` */insert  into `order_detail`(`id`,`oid`,`pid`,`num`) values (1,1,1,1),(2,1,2,1),(3,2,4,1),(4,2,5,1),(5,2,8,1);/*Table structure for table `order_info` */DROP TABLE IF EXISTS `order_info`;CREATE TABLE `order_info` (`id` int(4) NOT NULL AUTO_INCREMENT,`uid` int(4) DEFAULT NULL,`status` varchar(16) DEFAULT NULL,`ordertime` datetime DEFAULT NULL,`orderprice` decimal(8,2) DEFAULT NULL,PRIMARY KEY (`id`),KEY `uid` (`uid`),CONSTRAINT `order_info_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user_info` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;/*Data for the table `order_info` */insert  into `order_info`(`id`,`uid`,`status`,`ordertime`,`orderprice`) values (1,1,'未付款','2018-05-12 00:00:00','10687.00'),(2,2,'已付款','2018-05-09 00:00:00','12997.00');/*Table structure for table `powers` */DROP TABLE IF EXISTS `powers`;CREATE TABLE `powers` (`aid` int(4) NOT NULL,`fid` int(4) NOT NULL,PRIMARY KEY (`aid`,`fid`),KEY `fid` (`fid`),KEY `aid` (`aid`),CONSTRAINT `powers_ibfk_1` FOREIGN KEY (`aid`) REFERENCES `admin_info` (`id`),CONSTRAINT `powers_ibfk_2` FOREIGN KEY (`fid`) REFERENCES `functions` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;/*Data for the table `powers` */insert  into `powers`(`aid`,`fid`) values (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(1,11);/*Table structure for table `product_info` */DROP TABLE IF EXISTS `product_info`;CREATE TABLE `product_info` (`id` int(4) NOT NULL AUTO_INCREMENT,`code` varchar(16) DEFAULT NULL COMMENT '商品编号',`name` varchar(255) DEFAULT NULL COMMENT '商品名称',`tid` int(4) DEFAULT NULL COMMENT '商品类别',`brand` varchar(20) DEFAULT NULL COMMENT '商品品牌',`pic` varchar(255) DEFAULT NULL COMMENT '商品图片',`num` int(4) unsigned zerofill DEFAULT NULL COMMENT '商品库存',`price` decimal(10,0) unsigned zerofill DEFAULT NULL COMMENT '商品小图',`intro` longtext COMMENT '商品简介',`status` int(4) DEFAULT '1' COMMENT '商品状态',PRIMARY KEY (`id`),KEY `tid` (`tid`),CONSTRAINT `product_info_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `type` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;/*Data for the table `product_info` */insert  into `product_info`(`id`,`code`,`name`,`tid`,`brand`,`pic`,`num`,`price`,`intro`,`status`) values (1,'1378538','AppleMJVE2CH/A',1,'APPLE','1378538.jpg',0100,'0000006488','Apple MacBook Air 13.3英寸笔记本电脑 银色(Core i5 处理器/4GB内存/128GB SSD闪存 MJVE2CH/A)',1),(2,'1309456','ThinkPadE450C(20EH0001CD)',1,'ThinkPad','1309456.jpg',0097,'0000004199','联想(ThinkPad) 轻薄系列E450C(20EH0001CD)14英寸笔记本电脑(i5-4210U 4G 500G 2G独显 Win8.1)',1),(3,'1999938','联想小新300经典版',1,'联想(Lenovo)','1999938.jpg',0099,'0000004399','联想(Lenovo)小新300经典版 14英寸超薄笔记本电脑(i7-6500U 4G 500G 2G独显 全高清屏 Win10)黑色',1),(4,'1466274','华硕FX50JX',1,'华硕(ASUS)','1466274.jpg',0100,'0000004799','华硕(ASUS)飞行堡垒FX50J 15.6英寸游戏笔记本电脑(i5-4200H 4G 7200转500G GTX950M 2G独显 全高清)',1),(5,'1981672','华硕FL5800',1,'华硕(ASUS)','1981672.jpg',0100,'0000004999','华硕(ASUS)FL5800 15.6英寸笔记本电脑 (i7-5500U 4G 128G SSD+1TB 2G独显 蓝牙 Win10 黑色)',1),(6,'1904696','联想G50-70M',1,'联想(Lenovo)','1904696.jpg',0012,'0000003499','联想(Lenovo)G50-70M 15.6英寸笔记本电脑(i5-4210U 4G 500G GT820M 2G独显 DVD刻录 Win8.1)金属黑',1),(7,'751624','美的BCD-206TM(E)',2,' 美的(Midea)','751624.jpg',0100,'0000001298','美的(Midea) BCD-206TM(E) 206升 三门冰箱 节能保鲜 闪白银',1),(8,'977433','美的BCD-516WKM(E)',2,' 美的(Midea)','977433.jpg',0100,'0000003199','美的(Midea) BCD-516WKM(E) 516升 对开门冰箱 风冷无霜 电脑控温 纤薄设计 节能静音 (泰坦银)',1),(9,'1143562','海尔BCD-216SDN',2,' 海尔(Haier)','1143562.jpg',0100,'0000001699','海尔(Haier)BCD-216SDN 216升 三门冰箱 电脑控温 中门 宽幅变温 大冷冻能力低能耗更省钱',1),(10,'1560207','海尔BCD-258WDPM',2,' 海尔(Haier)','1560207.jpg',0100,'0000002699','海尔(Haier)BCD-258WDPM 258升 风冷无霜三门冰箱 除菌 3D立体环绕风不风干 中门5℃~-18℃变温室',1),(11,'1721668','海信(Hisense)BCD-559WT/Q',2,' 海信(Hisense)','1721668.jpg',0100,'0000003499','海信(Hisense)BCD-559WT/Q 559升 金色电脑风冷节能对开门冰箱',1),(12,'823125','海信BCD-211TD/E',2,' 海信(Hisense)','823125.jpg',0100,'0000001699','海信(Hisense) BCD-211TD/E 211升 电脑三门冰箱 (亮金刚)',1);/*Table structure for table `type` */DROP TABLE IF EXISTS `type`;CREATE TABLE `type` (`id` int(4) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;/*Data for the table `type` */insert  into `type`(`id`,`name`) values (1,'电脑'),(2,'冰箱'),(3,'电视机'),(4,'洗衣机'),(5,'数码相机');/*Table structure for table `user_info` */DROP TABLE IF EXISTS `user_info`;CREATE TABLE `user_info` (`id` int(4) NOT NULL AUTO_INCREMENT,`userName` varchar(16) DEFAULT NULL,`password` varchar(16) DEFAULT NULL,`realName` varchar(8) DEFAULT NULL,`sex` varchar(4) DEFAULT NULL,`address` varchar(255) DEFAULT NULL,`email` varchar(50) DEFAULT NULL,`regDate` date DEFAULT NULL,`status` int(4) DEFAULT '1',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;/*Data for the table `user_info` */insert  into `user_info`(`id`,`userName`,`password`,`realName`,`sex`,`address`,`email`,`regDate`,`status`) values (1,'tom','123456','汤姆','女','江苏省苏州市吴中区','tom@123.com','2013-07-14',1),(2,'john','123456','约翰','女','江苏省南京市玄武区','wen@135.com','2013-07-14',1),(3,'my','123456','my','男','江苏省南京市玄武区','a@135.com','2015-09-16',1),(4,'sj','123456','sj','男','江苏省南京市玄武区','b@135.com','2015-09-16',1),(5,'lxf','123456','lxf','男','江苏省南京市玄武区','c@135.com','2015-09-16',1),(6,'lj','123456','lj','男','江苏省南京市玄武区','a@135.com','2015-09-20',1);/* Procedure structure for procedure `sp_sale` *//*!50003 DROP PROCEDURE IF EXISTS  `sp_sale` */;DELIMITER $$/*!50003 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_sale`(c int)
BEGIN   declare stmt varchar(2000);set @sqlstr=concat("SELECT p.id AS id, p.name AS NAME,SUM(od.num) AS total ,SUM(od.num)*price AS moneyFROM order_detail od, product_info p WHERE p.id=od.p_id GROUP BY p.id,p.name,p.price ORDER BY total DESC LIMIT 1,",c);prepare stmt from @sqlstr;execute stmt;END */$$
DELIMITER ;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

然后导入包

上面两个时mybatis的,第三个是连接MySQL用的
再新建实体类
有以下属性,对应数据库中的属性,然后添加getter,setter,tostring含参,无参构造方法就行(代码放这,方便复制属性然后其他自动生成)

     private int id;private String userName;private String password;private String realName;private String sex;private String address;private String email;private String regDate;private int status;

创建映射文件UserInfoMapper.xml
我们之前下载mybatis的时候有个pdf文档
打开它ctrl+f搜索mybatis-3-mapper
然后复制声明部分

我先把写完的UserInfoMapper.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.mybatis.mapper.UserInfoMapper"><!-- 根据用户编号查询用户 --><select id="findUserInfoById" parameterType="int" resultType="UserInfo">select * from user_info where id = #{id}</select></mapper>

映射文件是一个XML格式文件,必须遵循DTD文件规范,刚复制过来的就是规范文件,规定了映射文件中可以使用的元素
映射文件以<mapper>作为根节点,namespace属性用于指定<mapper>的唯一命名空间。命名空间设置格式为“包名+SQL映射文件名”
<select>元素用于映射查询语句,

  • id属性是该元素再映射文件中的唯一标识符;
  • parameterType属性用于指定传递给SQL语句的参数类型
  • resultType属性用于指定返回结果的类型
  • #{}表示一个占位符相当于是之前的?,#{id}表示该占位符接收的参数名为id;

创建属性文件db.properties
之前说过。可以看之前spring_JDBC的文章

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/eshop
jdbc.username=root
jdbc.password=root

创建MyBatis的核心配置文件mybatis-config.xml

<?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><!-- 加载属性文件 --><properties resource="db.properties"></properties><!-- 给包中的类注册别名 --><typeAliases><package name="com.mybatis.pojo" /></typeAliases><!-- 配置environment环境 --><environments default="development"><!-- 配置一个id为development的环境 --><environment id="development"><!-- 使用JDBC事务 --><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 引用映射文件 --><mappers><mapper resource="com/mybatis/mapper/UserInfoMapper.xml" /></mappers>
</configuration>

创建测试类

package com.mybatis.test;import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import com.mybatis.pojo.UserInfo;public class MybatisTest {private SqlSessionFactory sqlSessionFactory;private SqlSession sqlSession;//初始化方法@Beforepublic void init() {// 读取mybatis配置文件String resource = "mybatis-config.xml";InputStream inputStream;try {// 得到配置文件流inputStream = Resources.getResourceAsStream(resource);// 根据配置文件信息,创建会话工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionsqlSession = sqlSessionFactory.openSession();} catch (IOException e) {e.printStackTrace();}}//根据id查询用户@Testpublic void testFindUserInfoById() {//通过sqlSession来执行映射文件中定义的SQL,并返回结果UserInfo ui=sqlSession.selectOne("findUserInfoById",1);System.out.println(ui.toString());}@Afterpublic void destory() {//提交事务sqlSession.commit();//关闭sqlSessionsqlSession.close();}
}

在src下创建文件log4j.xml;输出日志信息,并且能查询sql语句,暂时没啥用,不过为了防止出什么意想不到的差错,先整上

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><!-- Console output --><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><layout class="org.apache.log4j.PatternLayout"><!-- <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss} %m  (%F:%L) \n" /> --><param name="ConversionPattern" value="%-5p [%t] - %m%n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="debug" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root>
</log4j:configuration>

运行单元测试

总结了下过程,画了张图,这样方便理清思路一点

这应该算是查询用户
干脆把查的先总结完,再总结增删改
其实有了上面的东西,增删改也就是改一点小细节
先说个模糊查询,根据用户名模糊查询用户
修改UserInfoMapper.xml

修改测试类,增加测试方法

因为可能返回多个用户所以用list来盛装。

添加用户

修改UserInfoMapper.xml
在原来的基础上新增一个元素,跟面的select原理差不多

<insert id="addUserInfo" parameterType="UserInfo">insert intouser_info(userName,password) values (#{userName},#{password})</insert>

测试中:

//添加用户@Testpublic void testAddUserInfo() {UserInfo ui = new UserInfo();ui.setUserName("fzj");ui.setPassword("123456");int result = sqlSession.insert("addUserInfo", ui);if (result>0) {System.out.println("插入成功");}else {System.out.println("插入失败");}}

运行

修改用户

只不过元素不同,sql语句不同,其他都差不多

<update id="updateUserInfo" parameterType="UserInfo">update user_info setuserName=#{userName},password=#{password} where id=#{id}</update>
//修改用户@Testpublic void testUpdateUserInfo() {UserInfo ui = sqlSession.selectOne("findUserInfoById", 7);ui.setUserName("xxxxx");int result = sqlSession.update("updateUserInfo",ui);if (result>0) {System.out.println("修改成功");}else {System.out.println("修改失败");}}

删除用户

<delete id="deleteUserInfo" parameterType="int">delete from user_infowhere id=#{id}</delete>
//删除用户@Testpublic void testDeleteUserInfo() {int result = sqlSession.delete("deleteUserInfo", 7);if (result>0) {System.out.println("成功删除了"+result+"条记录");}else {System.out.println("删除失败");}}


使用resultMap属性映射查询结果

之前的实例中,实体类UserInfo中属性名与数据表user_info中的字段名相同,如果不同的话,一查询为例会查询失败。
修改UserInfo属性字段

可以修改了这个后查询一下看是不是失败。
修改映射

<?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.mybatis.mapper.UserInfoMapper"><!-- 根据用户编号查询用户 --><select id="findUserInfoById" parameterType="int" resultMap="userInfoMap">select * from user_info where id = #{id}</select><resultMap type="UserInfo" id="userInfoMap"><id property="uid" column="id"/><result property="uname" column="userName"/><result property="upass" column="password"/></resultMap></mapper>

在查询就可以了

使用Mapper接口执行SQL

使用Mapper接口开发时需要遵循如下规范:

  • 映射文件中的namespace与Mapper接口的类路径相同。
  • 在Mapper接口中,方法名和映射文件中定义的执行语句的id相同。
  • 方法的输入参数类型和映射文件中定义的执行语句的parameterType的类型相同。
  • 方法输出参数类型和映射文件中定义的执行语句的resultType的类型相同。

在UserInfoMapper.xml相同路径下写一个同名接口UserInfoMapper

修改测试方法

运行结果

运行结果是一样的,但这样更符合Java面向接口编程的习惯
好长一章啊,应该是最长的一张了,之前最多好像是markdown一万二多,这次足有16600+…

MyBatis_1_MaBatis入门相关推荐

  1. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  2. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  3. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  4. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  5. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  6. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  8. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

  9. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

  10. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

最新文章

  1. SCI论文投稿全程模板
  2. 如何构建一个有效的知识库?
  3. 16.1 Tomcat介绍16.2 安装jdk16.3 安装Tomcat
  4. 热门解读:大促的活动设计及效果评估的优化
  5. 各大型网站架构分析收集Z
  6. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解
  7. python3编程入门先学什么_自学编程入门,先学什么语言好?
  8. C++PrimerPlus学习——第十七章编程练习
  9. VS2010解决闪退的方法
  10. Java判段两个日期的先后
  11. java单元测试方法的使用
  12. 计算机快捷键屏幕录制,如何录制电脑屏幕视频-电脑实用快捷键(9页)-原创力文档...
  13. Codeforces1436 A. Reorder
  14. 三百英雄服务器维护2020,【梦服】2020年12月3日【版本更新说明】
  15. 解决Cannot delete or update a parent row: a foreign key constraint fails的mysql报错
  16. 安装anaconda出现This Python interpreter is in a conda environment, but the environment has not been acti
  17. mysql中如何求出学生人数,mysql中如何查询同时参加计算机考试和英语考试的学生人数...
  18. Android 电子书
  19. 如何判断两个ip是否属于同一子网;如何确定子网掩码,让300台服务器处于同一网段
  20. 巧用“sfc /scannow”命令扫描修复Win8系统

热门文章

  1. 台湾-李宏毅教授的深度学习视频教程
  2. 2021网安保研之路-----中科院信工所
  3. freeswitch 修改编码协商顺序 优先G729
  4. linux7 镜像文件,{红帽 RHCE}RHEL7使用ISO镜像文件构筑本地YUM
  5. 华佳慧科技:OSN500设备的RPLCUR性能事件
  6. Golang六款优秀Web框架对比
  7. 直播特效的实现原理与难点
  8. (8)FPGA面试技能提升篇(LTE、CPRI/eCPRI接口、LDPC)
  9. 聚类及DBSCAN 聚类算法
  10. mac 环境下搭建socket通信