JavaWeb Basics

数据库驱动(驱动jar包, 下载后放到项目下的lib目录并添加到libraries): 对于JDBC中定义接口(一套操作所有关系型数据库的规则)的实现类JavaWeb Basics

创建一个Empty Project; 在Project Structure中设置Project SDK和Project language level; 在Project Structure中Add New Module, 然后选中Java即可; 新建lib目录, 将jar包放在该目录, 右键jar包, 选中Add as Library, 在level处选中Module Library

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// 注册驱动
// MySQL5之后的驱动包, 可以省略注册驱动的步骤
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/mydb1"
String username = "zyliang"
String password = "test123"
Connection conn = DriverManager.getConnection(url, username, password);
// 定义SQL语句
String sql = "update account set money=20000 where id=1";
String sql2 = "update account set money=20000 where id=2";
// 获取执行SQL的对象
Statement stmt = conn.createStatement();
// 预编译的执行SQL的对象, 防止注入
// PreparedStatement stmt = conn.prepareStatement(sql);
// 执行存储过程的对象
// CallableStatement stmt = conn.prepareCall(sql);
// 执行SQL
// 开启事务--
try{
conn.setAutoCommit(false);
int count = stmt.executeUpdate(sql); // 返回的count为执行语句受影响的行数
int count2 = stmt.executeUpdate(sql2);
// 处理返回结果
System.out.println(count);
System.out.println(count2);
// 提交事务--
conn.commit();
}catch(Exception throwables){
conn.rollback();
throwables.printStackTrace();
}
// 释放资源
stmt.close();
conn.close();
// 开启事务
setAutoCommit(boolean autoCommit) // true为自动提交, false为手动提交
// 提交事务
commit()
// 回滚事务
rollback()
// 执行DML(修改表)、DDL语句(修改库)
executeUpdate(sql) // 返回int
// 执行DQL(查询表)语句
executeQuery(sql) // 返回ResultSet
public class Account{
private int id;
private String name;
private double money;
}

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://127.0.0.1:3306/mydb1"
String username = "zyliang"
String password = "test123"
Connection conn = DriverManager.getConnection(url, username, password);

String sql = "select * from account";
Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);
List<Account> list = new ArrayList();

while(rs.next()){ // 光标向下移动一行, 并判断当前行是否有数据
Account account = new Account();
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
account.setId(id);
account.setName(name);
account.setMoney(money);
list.add(account);
}

System.out.println(list);

// 释放资源
rs.close();
stmt.close();
conn.close();

目录文件: application.properties, sql.jar; 可能要修改application.properties文件中的username和password

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
jar包启动: java -jar .\\sql.jar

String url = "jdbc:mysql://127.0.0.1:3306/mydb1"
// 通过设置useServerPrepStmts=true开启预编译功能
String url = "jdbc:mysql://127.0.0.1:3306/mydb1?useSSL=false&useServerPrepStmts=true"
String username = "zyliang"
String password = "test123"
Connection conn = DriverManager.getConnection(url, username, password);

String name = "zhangsan";
String pwd = "123"; // sql注入: "'' or '1' = '1'"
String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'";
// 防止sql注入
//String sql = "select * from tb_user where username = ? and password = ?";
// PreparedStatement pstmt = conn.prepareStatement(sql); // 预编译SQL性能更高
// pstmt.setString(1, name);
// pstmt.setString(2, pwd);
// pstmt.executeQuery();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
System.out.println("登陆成功");
}else{
System.out.println("登录失败");
}

rs.close();
stmt.close();
conn.close();

// 配置MySQL执行日志(重启MySQL服务后生效) (通过services.msc)
log-output=FILE
general-log=1
general_log_file="D:\\mysql.log"
slow-query-log=1
slow_query_log_file="D:\\mysql_slow.log"
long_query_time=2
  • 数据库连接池

优点: 资源重用; 提升系统响应速度; 避免数据库连接遗漏(设置了最大空闲时间)

标准接口: DataSource

Connection getConnection()

常用的数据库连接池: DBCP; C3P0; Druid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 1.导入jar包(e.g druid-1.1.12.jar)
// 2.定义配置文件
// druid.properties, 内容如下
// driverClassName=com.mysql.jdbc.Driver
// url=jdbc:mysql://127.0.0.1:3306/mydb1
// username=zyliang
// password=123123
// initialSize=5 // 初始化连接数量
// maxActive=10 // 最大连接数
// maxWait=3000 // 最大等待时间
// 3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
// 4.获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
// 5.获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
  • Maven: 专门用于管理和构建Java项目的工具

poe.xml: Maven的配置文件

提供了一套标准化的项目结构、构建流程(编译、测试、打包、发布)、依赖管理机制

不同IDE之间创建的项目结构不一样

main/java: 源代码Java文件目录; main/resources: 源代码配置文件目录

Run Maven → compile / package …

1
2
3
4
5
6
7
8
// 通过Maven来导入jar包
<dependencies>
<dependency>
<groupId>mysql<groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
</dependencies>

本地仓库: 本机上的一个目录

中央仓库: 由Maven团队维护的全球唯一的仓库

地址: https://repo1.maven.org/maven2/

远程仓库(私服): 一般由公司团队搭建的私有仓库

若搭建远程仓库, 则jar包的查找顺序变为: 本地仓库→远程仓库→中央仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Maven安装配置
// 1.解压apache-maven-3.6.1.rar (或.zip)
// 解压完成即安装成功
// bin目录: 一些二进制的可执行文件; boot: Maven需要用到的一个jar包
// conf目录: 一些配置文件; lib: Maven依赖的一些jar包
// 2. 配置环境变量MAVEN_HOME为安装路径的bin目录
// 新建系统变量MAVEN_HOME(变量名), 变量值为apache-maven-3.6.1的路径
// 编辑环境变量, 新建%MAVEN_HOME%\\bin
// 在cmd在查看版本: mvn -version
// 3.配置本地仓库: 修改conf/settings.xml中的<localRepository>为一个指定目录
// 4.配置阿里云私服: 修改conf/settings.xml中的<mirror>标签, 为其添加如下的子标签:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url><http://maven.aliyun.com/nexus/content/groups/public/></url>
<mirrorOf>central</mirrorOf>
</mirror>
// 常用命令 (maven-project目录下有src目录和poe.xml文件)
mvn compile
// 执行后在maven-project目录下会出现一个target目录, 若为初次执行, 则还会下载插件
mvn clean
// 执行后会删除target目录
mvn package
// 执行后在maven-project目录下会出现一个target目录, 目录下有项目内容的jar包
mvn test
// 执行test目录下的代码
mvn install
// 将当前项目的jar包安装到本地仓库

// Maven对项目构建的生命周期划分为3套
// clean(清理工作): pre-clean, clean, post-clean
// default(核心工作): compile, test, package, install
// site(产生报告, 发布站点): pre-site, site, post-site

IDEA配置Maven: File→setting→搜索Maven→选择Maven中的Maven home path、User settings file→Apply

Maven坐标(资源的唯一标识)的主要组成:

groupId: 当前Maven项目隶属组织的名称

artifactId: 当前Maven项目的名称

version: 当前项目版本号

创建Maven项目: Project Structure中选中Modules→选择Maven项目, 即可创建

导入Maven项目: 点击Maven界面中的”+“(Add Maven Projects), 找到需要导入的项目的poe.xml文件, 双击即可导入

若没有Maven界面: View→Appearance→Tool Window Bars

好用的Maven插件: Maven Helper

配置自动生效: File→Settings→Build Tools→Any changes

导入本地仓库jar包的快捷方式: 在poe.xml文件中按Alt+Insert

  • JavaEE的三层架构: 表现层、业务层、持久层(负责将数据保存到数据库的那一层代码)