(十八)JDBC优化使用(一)
一、将增删改方法合并,优化代码
第十七篇的UserPOImpl.java类代码可以进行优化,因为增删改方法用的都是同一种执行方法executeUpdate(),对十七篇的例子进行优化如下:
2.1 搭建实验环境
A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。
B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):
2.2 创建一个web工程,并导入数据库驱动包。
2.3 编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。
UserPO.java
package po; public class UserPO {
private String userName;
private String passWd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
} }
解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。
2.4 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。
- UserPOI.java
package dao; import java.util.List; import po.UserPO; public interface UserPOI {
public boolean addUser(UserPO user); //增
public boolean delUser(String userName); //删
public boolean uptUser(UserPO user); //修改
public List<UserPO> gets(); //查
}
- UserPOImpl.java()
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values('"+user.getUserName()+"','"+user.getPassWd()+"') ";
return cud(sql);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName='"+userName+"'"; return cud(sql);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd='"+user.getPassWd()+"'where userName='"+user.getUserName()+"'";
return cud(sql);
} public List<UserPO> gets() { //查找全部
List<UserPO> list=new ArrayList<UserPO>();
Connection conn=null;
Statement stat=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
stat=conn.createStatement();
res=stat.executeQuery("select * from user");
while(res.next()){ //不能是if
UserPO user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
list.add(user); } } catch (Exception e) { e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
if(res!=null && res.isClosed()){
res.close();
}
}catch(Exception e){
e.printStackTrace();
} } return list;
} public boolean cud(String sql){ //增删改方法合并
boolean flag=false;
Connection conn=null;
Statement stat=null;
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
stat=conn.createStatement(); int res=stat.executeUpdate(sql);
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && !stat.isClosed()){
stat.close();
}
}catch(Exception e){
e.printStackTrace();
}
} return flag;
} }
解析: 把增删改方法合并为cud方法,使代码更简便。
2.5 创建测试类进行测试。
- UserTest.java
package test; import java.util.List; import org.junit.Test; import dao.userPOImpl;
import po.UserPO; public class UserTest {
@Test
public void UserPOTest(){
userPOImpl im=new userPOImpl(); UserPO user=new UserPO();
user.setUserName("张三");
user.setPassWd("123");
im.addUser(user);
} @Test
public void userPOget(){
userPOImpl im=new userPOImpl();
List<UserPO> list=im.gets();
for(int i=0;i<list.size();i++)
System.out.println(list.get(i).getUserName()); } @Test
public void delUserTest(){
userPOImpl im=new userPOImpl();
im.delUser("张三");
}
@Test
public void uptUserTest(){
userPOImpl im=new userPOImpl();
UserPO user=new UserPO();
user.setUserName("张三");
user.setPassWd("456");
im.uptUser(user);
}
}
二、使用预处理prepareStatement语句优化
2.1 编写javabean
UserPO.java
package po; public class UserPO {
private String userName;
private String passWd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
} }
2.2 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。
- UserPOI.java
1 package dao;
2
3 import java.util.List;
4
5 import po.UserPO;
6
7 public interface UserPOI {
8 public boolean addUser(UserPO user); //增
9 public boolean delUser(String userName); //删
10 public boolean uptUser(UserPO user); //修改
11 public List<UserPO> gets(); //查
12 }
- 一般我们专门编写一个DBUtil工具类,以实现数据库的各种操作方法:
DButils.java
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.List; public class DButils {
public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
Connection conn=null;
PreparedStatement stat=null;
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && !stat.isClosed()){
stat.close();
}
}catch(Exception e){
e.printStackTrace();
}
} return flag;
}
}
- 编写实现类(UserPOImpl.java)
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values(?,?)";
18 List<Object> list=new ArrayList<Object>();
19 list.add(user.getUserName());
20 list.add(user.getPassWd());
21 return DButils.cud(sql,list);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName=?";
27 List<Object> list=new ArrayList<Object>();
28 list.add(userName);
29 return DButils.cud(sql,list);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd=? where userName=?";
35 List<Object> list=new ArrayList<Object>();
36 list.add(user.getPassWd());
37 list.add(user.getUserName());
38 return DButils.cud(sql,list); } public List<UserPO> gets() { //查找全部
List<UserPO> list=new ArrayList<UserPO>();
Connection conn=null;
Statement stat=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
stat=conn.createStatement();
res=stat.executeQuery("select * from user");
while(res.next()){ //不能是if
UserPO user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
list.add(user); } } catch (Exception e) { e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
if(res!=null && res.isClosed()){
res.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
return list;
}
}
2.3 创建测试类进行测试。
- UserTest.java
1 package test;
2
3 import java.util.List;
4
5 import org.junit.Test;
6
7 import dao.userPOImpl;
8 import po.UserPO;
9
10 public class UserTest {
11 @Test
12 public void UserPOTest(){
13 userPOImpl im=new userPOImpl();
14
15 UserPO user=new UserPO();
16 user.setUserName("张三");
17 user.setPassWd("123");
18 im.addUser(user);
19 }
20
21 @Test
22 public void userPOget(){
23 userPOImpl im=new userPOImpl();
24 List<UserPO> list=im.gets();
25 for(int i=0;i<list.size();i++)
26 System.out.println(list.get(i).getUserName());
27
28 }
29
30 @Test
31 public void delUserTest(){
32 userPOImpl im=new userPOImpl();
33 im.delUser("张三");
34 }
35 @Test
36 public void uptUserTest(){
37 userPOImpl im=new userPOImpl();
38 UserPO user=new UserPO();
39 user.setUserName("张三");
40 user.setPassWd("456");
41 im.uptUser(user);
42 }
43 }
- 本例中的DBUtils代码可以优化为:
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List; public class DButils { /**
* 单例模式
*
*/
public static Connection conn=null;
static{
/*
* 把常量和公用的放在static块里加载
* */
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
}catch(Exception e){
e.printStackTrace();
} } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
try{
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null && !conn.isClosed()){
conn.close();
if(stat!=null && !stat.isClosed()){
stat.close();
}
if(res!=null && !res.isClosed()){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } }
三、使用连接池优化jdbc
- 上个例子的DBUtils可以优化为:
package dao; import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DButils { /**
* 连接池
*/
static ComboPooledDataSource dateSource;
static{
dateSource=new ComboPooledDataSource();
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD="";
final String DRIVER="com.mysql.jdbc.Driver";
try {
dateSource.setDriverClass(DRIVER);
dateSource.setJdbcUrl(URL);
dateSource.setUser(USER);
dateSource.setPassword(PASSWORD);
dateSource.setMaxPoolSize(100);
dateSource.setMinPoolSize(10);
dateSource.setMaxStatements(10000);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} /**
* 单例模式
*/
// public static Connection conn=null;
// static{
// /*
// * 把常量和公用的放在static块里加载
// * */
// final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
// final String USER="root";
// final String PASSWORD="";
//
// try{
// Class.forName("com.mysql.jdbc.Driver");
// conn=DriverManager.getConnection(URL,USER,PASSWORD);
// }catch(Exception e){
// e.printStackTrace();
// }
//
// } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
Connection conn=null;
try{
conn=dateSource.getConnection();
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null && !conn.isClosed()){
conn.close();
if(stat!=null && !stat.isClosed()){
stat.close();
}
if(res!=null && !res.isClosed()){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } }
- 使用C3P0连接池需要导入相应的jar包。
四、优化总结
4.1 搭建实验环境
A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。
B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):
4.2 创建一个web工程,并导入数据库驱动包。
4.3 编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。
UserPO.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package po; public class UserPO { private String userName; private String passWd; public String getUserName() { return userName; } public void setUserName(String userName) { this .userName = userName; } public String getPassWd() { return passWd; } public void setPassWd(String passWd) { this .passWd = passWd; } } |
解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。
4.4 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类和工具类。
- UserPOI.java
package dao; import java.util.List; import po.UserPO; public interface UserPOI {
public boolean addUser(UserPO user); //增
public boolean delUser(String userName); //删
public boolean uptUser(UserPO user); //修改
public List<UserPO> gets(); //查全部
public UserPO getByName(String userName); //按名字查人
}
- UserPOImpl.java()
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values(?,?)";
List<Object> list=new ArrayList<Object>();
list.add(user.getUserName());
list.add(user.getPassWd());
return DButils.cud(sql,list);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(userName);
return DButils.cud(sql,list);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd=? where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(user.getPassWd());
list.add(user.getUserName());
return DButils.cud(sql,list); } public List<UserPO> gets() { //查找全部 String sql="select * from user";
return DButils.get(sql, null);
} public UserPO getByName(String userName){ //按名字找人
String sql="select * from user where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(userName);
return (DButils.get(sql, list).size()==1)?DButils.get(sql, list).get(0):null; }
}
DButils.java
package dao; import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import com.mchange.v2.c3p0.ComboPooledDataSource; import po.UserPO; public class DButils { /**
* 连接池
*/
static ComboPooledDataSource dateSource;
static{
dateSource=new ComboPooledDataSource();
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD="";
final String DRIVER="com.mysql.jdbc.Driver";
try {
dateSource.setDriverClass(DRIVER);
dateSource.setJdbcUrl(URL);
dateSource.setUser(USER);
dateSource.setPassword(PASSWORD);
dateSource.setMaxPoolSize(100);
dateSource.setMinPoolSize(10);
dateSource.setMaxStatements(10000);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} /**
* 单例模式
*/
// public static Connection conn=null;
// static{
// /*
// * 把常量和公用的放在static块里加载
// * */
// final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
// final String USER="root";
// final String PASSWORD="";
//
// try{
// Class.forName("com.mysql.jdbc.Driver");
// conn=DriverManager.getConnection(URL,USER,PASSWORD);
// }catch(Exception e){
// e.printStackTrace();
// }
//
// } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
Connection conn=null;
try{
conn=dateSource.getConnection();
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null ){
conn.close();
if(stat!=null ){
stat.close();
}
if(res!=null ){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } /**
* 获取连接池中的连接
*/
public static Connection getConn(){
try {
return dateSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} /**
* 数据库查找
* @param sql
* @param list
* @return
*/
public static List<UserPO> get(String sql,List<Object> list){
List<UserPO> users=new ArrayList<UserPO>(); Connection conn=getConn();
PreparedStatement stat=null;
ResultSet res=null;
try {
stat=conn.prepareStatement(sql); //sql语句预处理 if(list!=null){
for(int i=0;i<list.size();i++){
stat.setObject(i+1, list.get(i)); //预处理语句?赋值
}
} res=stat.executeQuery(); //执行sql语句
UserPO user=null;
while(res.next()){
user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
users.add(user);
} } catch (SQLException e) {
e.printStackTrace();
}finally{
close(conn,stat,res);
}
return users;
}
}
2.5 创建测试类进行测试。
- UserTest.java
1 package test;
2
3 import java.util.List;
4
5 import org.junit.Test;
6
7 import dao.userPOImpl;
8 import po.UserPO;
9
10 public class UserTest {
11 @Test
12 public void UserPOTest(){
13 userPOImpl im=new userPOImpl();
14
15 UserPO user=new UserPO();
16 user.setUserName("张三");
17 user.setPassWd("123");
18 im.addUser(user);
19 }
20
21 @Test
22 public void userPOget(){
23 userPOImpl im=new userPOImpl();
24 List<UserPO> list=im.gets();
25 for(int i=0;i<list.size();i++)
26 System.out.println(list.get(i).getUserName());
27
28 }
29
30 @Test
31 public void delUserTest(){
32 userPOImpl im=new userPOImpl();
33 im.delUser("张三");
34 }
35 @Test
36 public void uptUserTest(){
37 userPOImpl im=new userPOImpl();
38 UserPO user=new UserPO();
39 user.setUserName("张三");
40 user.setPassWd("456");
41 im.uptUser(user);
42 }
43 }
(十八)JDBC优化使用(一)的更多相关文章
- 燕十八MySQL优化学习笔记
观察 show status; 里面的这三个参数;Queries Threads_connected Threads_running判断周期性变化 -------------------------- ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...
- 我的MYSQL学习心得(十六) 优化
我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 最全的MySQL基础【燕十八传世】
1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- NeHe OpenGL教程 第二十八课:贝塞尔曲面
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- COS访谈第十八期:陈天奇
COS访谈第十八期:陈天奇 [COS编辑部按] 受访者:陈天奇 采访者:何通 编辑:王小宁 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习.他曾获得KDD CUP 20 ...
- Java进阶(三十八)快速排序
Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...
随机推荐
- 阿里云 centos7 安装mysql数据库
环境:阿里云ECS服务器,系统为centos7.2 删除原来的数据库: centos7中默认安装了数据库MariaDB,如果直接安装MySQL的话,会直接覆盖掉这个数据库,当然也可以手动删除一下: [ ...
- ElementUI2.0组件库el-table表格组件如何自定义表头?
效果图: npm run dev 编译项目之后,报错,要使用jsx语法需要先安装编译插件 1.安装下列安装包 npm install babel-plugin-syntax-jsx --save-de ...
- VMWARE许可文件
VMware 14 Pro 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWD
- QProgressBar 样式
setStyleSheet( "QProgressBar{border:1px solid #FFFFFF;" "height:30;" "backg ...
- [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)
题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑Ny=1∑Mlim(x, ...
- 学习了武沛齐讲的Day11-完
DAY11 老师讲了很多,理解了一个方法 当有复杂的问题时,先拆解很小的单元(10行),测试通过了,再简化(3行) len range 感悟:其实不用计记代码(主要是记不动),,当遇到问题时:找出 ...
- centos7的redis加哨兵系统
三台服务器 1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gztar -zxvf redis-5.0.3.tar.gzcd r ...
- vue中router-link的详细用法
官网文档地址:https://router.vuejs.org/zh/api/#to 今天项目突然有需求,让vue中的一个页面跳转到另一个页面 // 字符串 <router-link to=&q ...
- js自动访问数据库
js自动访问数据库 maven依赖 <dependencies> <dependency> <groupId>junit</groupId> <a ...
- Spring Cloud Gateway(三):网关处理器
1.Spring Cloud Gateway 源码解析概述 API网关作为后端服务的统一入口,可提供请求路由.协议转换.安全认证.服务鉴权.流量控制.日志监控等服务.那么当请求到达网关时,网关都做了哪 ...