配套资料,免费下载

链接: https://pan.baidu.com/s/1CKiwCbQV4FGg_4YMQoebkg

提取码: 7cn3

复制这段内容后打开百度网盘手机App,操作更方便哦

第一章 概述

JDBC(Java Database Connectivity)是SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多且Java语言使用比较广泛,SUN公司就提供了一种规范,让其它的数据库提供商去实现底层的访问规则,我们的Java程序只要使用SUN公司提供的jdbc驱动就可以连接不同厂商的数据库了

第二章 数据库连接

1、工具类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class JDBCUtil {
private static String driverClass = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://127.0.0.1:3306/mytest";
private static String user = "root";
private static String password = "root"; static {
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} public static void release(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
closeConnection(connection);
closePreparedStatement(preparedStatement);
closeResultSet(resultSet);
} public static void release(Connection connection, PreparedStatement preparedStatement) {
closeConnection(connection);
closePreparedStatement(preparedStatement);
} public static void closeConnection(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
connection = null;
}
}
} public static void closePreparedStatement(PreparedStatement preparedStatement) {
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
preparedStatement = null;
}
}
} public static void closeResultSet(ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
resultSet = null;
}
}
} }

2、测试类

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.junit.Test; public class JDBCTest { @Test
public void testQuery() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JDBCUtil.getConnection();
String sql = "select * from admin";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3); System.out.println(id + ":" + username + ":" + password);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement, resultSet);
}
} @Test
public void testInsert() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "insert into admin values(NULL,'xiaowu','123456')";
preparedStatement = connection.prepareStatement(sql);
int rows = preparedStatement.executeUpdate(sql);
if (rows > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
} @Test
public void testUpdate() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "update admin set username = 'xiaoqi' where id = 5";
preparedStatement = connection.prepareStatement(sql);
int rows = preparedStatement.executeUpdate(sql);
if (rows > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
} @Test
public void testDelete() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection();
String sql = "delete from admin where id = 5";
preparedStatement = connection.prepareStatement(sql);
int rows = preparedStatement.executeUpdate(sql);
if (rows > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
} }

第三章 数据库事务

@Test
public void testTransaction() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCUtil.getConnection(); // 前提:关闭事务
connection.setAutoCommit(false); String sql = "update account set money = money - ? where id = ?";
preparedStatement = connection.prepareStatement(sql); // 扣钱, 扣ID为 1 的100块钱
preparedStatement.setInt(1, 100);
preparedStatement.setInt(2, 1);
preparedStatement.executeUpdate(); // 模拟异常
int a = 10 / 0; // 加钱, 给ID为 2 加100块钱
preparedStatement.setInt(1, -100);
preparedStatement.setInt(2, 2);
preparedStatement.executeUpdate(); // 成功:提交事务
connection.commit();
} catch (SQLException e) {
try {
// 失败:回滚事务
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
}

第四章 数据库连接池

4.1、DBCP

1、基本使用

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.apache.commons.dbcp2.BasicDataSource; public class DBCPTest { public static void main(String[] args) throws SQLException {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUsername("root");
dataSource.setPassword("root"); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
dataSource.close();
} }

2、高级使用

dbcp-config.properties

#基本设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mytest
username=root
password=root
#数据库连接池初始化数量
initialSize=10
#数据库连接池中的最大的数据库连接数
maxActive=50
#数据库连接池中的最小的数据库连接数
minIdle=5

DBCPWithConfig.java

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; public class DBCPWithConfig { @SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
BasicDataSourceFactory dataSourceFactory = new BasicDataSourceFactory();
Properties properties = new Properties();
InputStream is = DBCPWithConfig.class.getClassLoader().getResourceAsStream("dbcp-config.properties");
properties.load(is);
DataSource dataSource = dataSourceFactory.createDataSource(properties); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
} }

4.2、Druid

1、基本使用

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.alibaba.druid.pool.DruidDataSource; public class DruidTest { public static void main(String[] args) throws SQLException {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUsername("root");
dataSource.setPassword("root"); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
dataSource.close();
} }

2、高级使用

druid-config.properties

#基本设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mytest
username=root
password=root
#数据库连接池初始化数量
initialSize=10
#数据库连接池中的最大的数据库连接数
maxActive=50
#数据库连接池中的最小的数据库连接数
minIdle=5

DruidWithConfig.java

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DruidWithConfig { @SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
DruidDataSourceFactory dataSourceFactory = new DruidDataSourceFactory();
Properties properties = new Properties();
InputStream is = DruidWithConfig.class.getClassLoader().getResourceAsStream("druid-config.properties");
properties.load(is);
DataSource dataSource = dataSourceFactory.createDataSource(properties); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
} }

4.3、C3P0

1、基本使用

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Test { public static void main(String[] args) throws SQLException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root"); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
dataSource.close();
} }

2、高级使用

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!-- 基本设置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1/mytest</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 数据库连接池初始化数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">100</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">10</property>
</default-config>
</c3p0-config>

C3P0WithConfig.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0WithConfig { public static void main(String[] args) throws SQLException {
ComboPooledDataSource dataSource = new ComboPooledDataSource(); Connection connection = dataSource.getConnection();
String sql = "select * from admin";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
Object id = resultSet.getObject(1);
Object username = resultSet.getObject(2);
Object password = resultSet.getObject(3);
System.out.println(id + ":" + username + ":" + password);
}
resultSet.close();
connection.close();
dataSource.close();
} }

第五章 DButils

1、基本的使用

Admin.java

public class Admin {
private Integer id;
private String username;
private String password; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "Admin [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}

DBUtilsTest.java

import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DBUtilsTest { @Test
public void testQueryOne() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "select * from admin where id = ?";
Admin admin = queryRunner.query(sql, new BeanHandler<Admin>(Admin.class), 1);
System.out.println(admin);
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
} @Test
public void testQueryAll() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "select * from admin";
List<Admin> admins = queryRunner.query(sql, new BeanListHandler<Admin>(Admin.class));
for (Admin admin : admins) {
System.out.println(admin);
}
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
} @Test
public void testInsert() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "insert into admin values(NULL,?,?)";
int rows = queryRunner.update(sql, "xiaojiu", "123456");
if (rows > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
} @Test
public void testUpdate() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "update admin set username = 'xiaoqi' where id = ?";
int rows = queryRunner.update(sql, 4);
if (rows > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
} @Test
public void testDelete() {
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "delete from admin where id = ?";
int rows = queryRunner.update(sql, 6);
if (rows > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }

注意问题:

BeanHandler,查询到的单个数据封装成一个对象
BeanListHandler,查询到的多个数据封装成一个List<对象> ArrayHandler,查询到的单个数据封装成一个数组
ArrayListHandler,查询到的多个数据封装成一个集合,集合里面的元素是数组 MapHandler,查询到的单个数据封装成一个map
MapListHandler,查询到的多个数据封装成一个集合,集合里面的元素是Map ColumnListHandler
KeyedHandler
ScalarHandler

2、自定义实现

ResultSetHandler.java

import java.sql.ResultSet;
import java.sql.SQLException; public interface ResultSetHandler<T> { /**
* 定义数据封装的规则
*
* @param <T>
* @param rs
*/
T handle(ResultSet rs) throws SQLException; }

MyQueryRunner.java

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.sql.DataSource; public class MyQueryRunner { private DataSource dataSource = null; public MyQueryRunner() {
super();
} public MyQueryRunner(DataSource dataSource) {
super();
this.dataSource = dataSource;
} public <T> T query(String sql, ResultSetHandler<T> handler, Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(sql);
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
for (int i = 0; i < parameterMetaData.getParameterCount(); i++) {
preparedStatement.setObject(i + 1, args[i]);
}
ResultSet resultSet = preparedStatement.executeQuery();
return (T) handler.handle(resultSet);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
return null;
} public int update(String sql, Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = dataSource.getConnection();
preparedStatement = connection.prepareStatement(sql);
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
for (int i = 0; i < parameterMetaData.getParameterCount(); i++) {
preparedStatement.setObject(i + 1, args[i]);
}
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.release(connection, preparedStatement);
}
return 0;
} }

Admin.java

public class Admin {
private Integer id;
private String username;
private String password; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "Admin [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}

MyQueryRunnerTest.java

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class MyQueryRunnerTest { @Test
public void testQueryOne() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
MyQueryRunner queryRunner = new MyQueryRunner(dataSource);
String sql = "select * from admin where id = ?";
Admin admin = queryRunner.query(sql, new ResultSetHandler<Admin>() {
@Override
public Admin handle(ResultSet rs) throws SQLException {
while (rs.next()) {
Admin admin = new Admin();
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
admin.setId(id);
admin.setUsername(username);
admin.setPassword(password);
return admin;
}
return null;
}
}, 1);
System.out.println(admin);
dataSource.close();
} @Test
public void testQueryAll() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
MyQueryRunner queryRunner = new MyQueryRunner(dataSource);
String sql = "select * from admin";
List<Admin> admins = queryRunner.query(sql, new ResultSetHandler<List<Admin>>() {
@Override
public List<Admin> handle(ResultSet rs) throws SQLException {
List<Admin> admins = new ArrayList<Admin>();
while (rs.next()) {
Admin admin = new Admin();
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
admin.setId(id);
admin.setUsername(username);
admin.setPassword(password);
admins.add(admin);
}
return admins;
}
});
for (Admin admin : admins) {
System.out.println(admin);
}
dataSource.close();
} @Test
public void testInsert() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
MyQueryRunner queryRunner = new MyQueryRunner(dataSource);
String sql = "insert into admin values(NULL,?,?)";
int rows = queryRunner.update(sql, "xiaoqiang", "123456");
if (rows > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
dataSource.close();
} @Test
public void testUpdate() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
MyQueryRunner queryRunner = new MyQueryRunner(dataSource);
String sql = "update admin set username = 'mingming' where id = ?";
int rows = queryRunner.update(sql, 4);
if (rows > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
dataSource.close();
} @Test
public void testDelete() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mytest");
dataSource.setUser("root");
dataSource.setPassword("root");
MyQueryRunner queryRunner = new MyQueryRunner(dataSource);
String sql = "delete from admin where id = ?";
int rows = queryRunner.update(sql, 7);
if (rows > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
dataSource.close();
} }

学习JDBC这一篇就够了的更多相关文章

  1. 学习Hibernate5这一篇就够了

    配套资料,免费下载 链接:https://pan.baidu.com/s/1i_RXtOyN1e4MMph6V7ZF-g 提取码:8dw6 复制这段内容后打开百度网盘手机App,操作更方便哦 第一章 ...

  2. 学习go语言一篇就够了(持续更新)

    前言:写博客也写了差不多一年了,我更多的时候是记录自己学习的情况,有时也有自己工作上遇到的bug,自己有时候也比较迷茫,不知道怎么去写博文,我也很想别人跟我提提建议,但是有时候觉得写写博客还是很有成就 ...

  3. 学习git这一篇就够了!!!

    git命令操作 本地库操作 初始化本地仓库 初始化命令 git init $ work % cd workspace $ workspace % mkdir WebService //创建文件夹 $ ...

  4. SpringBoot入门学习看这一篇就够了

    1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架. 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和 ...

  5. 学习MySQL这一篇就够了

    MySQL 第一章 数据库概述 1.1.数据库的好处 将数据持久化到本地 提供结构化查询功能 1.2.数据库的常见概念 DB:数据库,存储数据的仓库 DBS:数据库管理系统,又称为数据库软件或者数据库 ...

  6. Vue学习看这篇就够

    Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ...

  7. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  8. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  9. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

随机推荐

  1. 在java中捕获异常时,使用log4j打印出错误堆栈信息

    当java捕获到异常时,把详细的堆栈信息打印出来有助于我们排查异常原因,并修复相关bug,比如下面两张图,是打印未打印堆栈信息和打印堆栈信息的对比: 那么在使用log4j输出日志时,使用org.apa ...

  2. [设计模式]工厂方法模式(Factory Method)

    模式目的 定义一个用于创建对象的接口,让其子类来决定实例化哪个类. 工厂方法模式将类的实例化延迟到了子类中进行. 模式结构 组成部分 产品(Product) - 定义了产品功能的接口 具体产品(Con ...

  3. USTC信息安全期末重点

    一.ARP协议问题1. ARP协议的作用是什么.地址解析协议,即IP地址和MAC地址之间的转换. 2. 引入ARP缓存的功能是什么.将这一映射关系保存在 ARP 缓存中,使得不必重复运行 ARP 协议 ...

  4. Django之 Views组件

    本节内容 路由系统 models模型 admin views视图 template模板 我们已经学过了基本的view写法 单纯返回字符串 1 2 3 4 5 6 7 8 def current_dat ...

  5. CMDB02/ 单例模式、资产采集参考命令、日志处理

    CMDB02/单例模式.资产采集参考命令.日志处理 目录 CMDB02/单例模式.资产采集参考命令.日志处理 1. 单例模式 1.1 多例模式 1.2 单例模式 1.2.1 单例模式/错误 1.2.2 ...

  6. 在spyder中无法import module

    如果在anaconda中下载安装了模块,但是在spyder中无法import,可能是因为两个python环境并不一致,在promote重新conda install spyder即可

  7. unity-编辑器快捷按键

    效果图 代码 [MenuItem("Custom/Run _F1")] static void PlayToggle() { EditorApplication.isPlaying ...

  8. Java多线程原理+基础知识(超级超级详细)+(并发与并行)+(进程与线程)1

    Java多线程 我们先来了解两个概念!!!! 1.什么是并发与并行 2.什么是进程与线程 1.什么是并发与并行 1.1并行:两个事情在同一时刻发生 1.2并发:两个事情在同一时间段内发生 并发与并行的 ...

  9. pyinstall打包资源文件

    相关代码 main.py import sys import os #生成资源文件目录访问路径 #说明: pyinstaller工具打包的可执行文件,运行时sys.frozen会被设置成True # ...

  10. Java基础之Bridge method(桥接方法)

    1.什么是桥接方法 桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法. 判断方法 我们可以通过 Method.isB ...