【JavaWeb】Mysql数据库
(黑马程序员b站课)
这边文章仅仅是记录自己的学习过程,适合有sql注入基础、java基础、html等基础的朋友观看
JavaWeb学习过程
1.数据库
? Mysql
? JDBC
? Maven
? MyBatis
2.前端
? HTML+CSS+JavaScript
? Ajax+Vue+Element
3.JavaWeb核心技术
? Tomat+HTTP+Servlet
? Request+Response
? JSP
? Cookie+Session
? Filter+Listener
? 综合案例
Mysql基础
1.Mysql目录
bin文件夹:放置了一些可执行文件,来操作对应的Mysql。
docs文件夹:放置了一些文档。
include文件夹:放置了.h的头文件信息,因为Mysql是C语言写的。
lib文件夹:放置了一些C语言的库文件。
share文件夹:放置了一些语言和字符集。
data文件夹:放置数据库。
.frm文件:表文件
.MYD文件:数据文件
2.Mysql语句
show database;
单行注释:
多行注释:
DDL操作数据库:
show database;
create database;
create database if not exists;
drop database;
drop database if esists;
select databse();
use 数据库名称;
DDL操作数据表:
show tables;
desc 表名称;
creat table 表名(字段名1 数据类型1,
字段名2 数据类型2);
drop table 表名;
drop table if exists 表名;
alter table 表名 rename to 新表名;
alter table 表名 add 列名 数据类型;
alter table 表名 modify 列名 新数据类型;
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 drop 列名;
DML操作数据表:
insert into 表名(列名1,列名2) values (值1,值2);
update 表名 set 列名=值1,列名2=值2 where 条件;
delete from 表名 where 条件;
sql查询语句
SELECT 字段列表
FROM 表名列表
WHERE 条件查询
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序字段
LIMIT 分页限定
具体查看
3.约束
概念:作用于表中列上的规则,用于限制加入表中的数据,也就是一个条件。
约束是数据更加正确,有效和完整。
分类:
其实就是给对应的列添加一个关键字,没什么东西
creat table 表名(字段名1 数据类型1 关键字,
字段名2 数据类型2 关键字);
creat table 表名(id int PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE);
Mysql不支持检查约束,检查约束可以在代码里实现
外键约束
外键用来让两个表数据之间建立链接。
create table 表名(
列名 数据类型;
constraint 外键名称 foreign key (外键列名) references 主表(主表列名)
)
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 foreign key (外键列名) references 主表(主表列名)
4.数据库设计
1.软件研发步骤
2.数据库设计概念
建立数据库的表结构和表与表之间的关联关系的过程
有什么表,里面有什么字段,有什么关系
3.数据库设计的步骤
1)需求分析
2)逻辑分析
3)物理设计
4)维护设计
4.数据库表之间的关系
多对多实现方式:建立第三张表,中间表至少包含两个外键,分别关联两方的主键。
5.多表查询
内连接查询
SELECT 字典列表 FROM 表1,表2 WHERE 条件;
SELECT 字典列表 FROM 表1 [inner] join 表2 on 条件;
SELECT 字典列表 FROM 表1 left [outer] join 表2 on 条件;
SELECT 字典列表 FROM 表1 right [outer] join 表2 on 条件;
SELECT * FROM emp where salary > (select salary from emp where name="a");
SELECT * from emp where id in (select did from dept where dname ='a' or dname ='b');
把查询到的表的语句放入另一个语句的from里面
5.事务
事务简介:事务是一种机制、一个操作序列,包含了一组数据库操作命令。
事务把所有的命令作为一个整体向系统提交或者撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
事务是一个不可分割的工作逻辑单元。(例子:转账操作的查询余额,扣钱,加钱的操作序列)
start transaction;
或者 begin;
commit;
rollback;
事务的四大特征
Mysql里面事务是自动提交的,也就是说一个单独的sql语句是自动提交了事务。
JDBC操作数据库
JDBC(Java DataBase Connectivity)就是使用java来操作关系型数据库的一套API
JDBC定义了一套标准接口来实现对所有关系型数据库的操作,对应的实现类是Mysql实现类,Oracle实现类,DB2实现类等,真正执行的代码是驱动jar包中的实现类。
JDBC快速入门(jdk1.8版本)
下载jar包,先在IDEA创建一个new——>directory,把jar放在这个directory里面,然后右键这个jar,选择add as library,设置level为Module library就可以
mysql-connector-java-5.1.48.jar
Class.forName("com.mysql.Driver");
Connection conn = DriverManager.getConnection (url,username,password);
String sql ="select...";
Statement stmt = conn.creatStatement();
stmt.executeUpdate(sql);
JDBC API详解
DriverManager
Connection
Statement
ResultSet
PreparedStatement//Statement 的加强版
DriverManager(驱动管理类)
作用:1.注册驱动 2.获取数据库连接
DriverManager是一个工具类,里面的方法都是静态的方法,直接加.就可以调用,两个方法常用:
getConnection()
registerDriver()
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
Driver的源码:
2.获取数据库连接
语法:jdbc:mysql://IP地址:端口号/数据库名称?参数键值对
jdbc:mysql://127.0.0.1:3306/db1
Connection(数据库连接类)
作用: 1.获取执行sql的对象 2.管理事务
1.获取执行sql的对象
Statement creatStatement()
PreparedStatement prepareStatement(sql)
CallableStatement prepareCall(sql)
2.管理事务
这个事务管理和Mysql本身的事务管理不一样,是用类来实现,Mysql默认自动提交事务
Connection接口中定义了3个对应的方法:
开启事务:setAutoCommit(boolean autoCommit)
提交事务:commit()
回滚事务:rollback()
Statement(执行sql类)
作用:执行sql语句
int executeUpdate(sql)
Resultset executeQuery(sql)
Resultset(结果集对象)
作用:1.封装了DQL查询语句的结果
获取查询结果的方法:
boolean next()
xxx getxxx(参数)
使用步骤:游标向下移动,并判断改行有没有数据,再获取数据
while(rs.next()){
int a = rs.getString(参数);
}
小技巧:Alt+Insert可以快速补全构造方法等方法
Java创建集合的语法:把Account对象放入集合list1里面
List<Account> list1 = new ArrayList<>();
PreparedStatement(预编译sql对象)
作用:预编译SQL语句并执行,可以预防sql注入问题
//sql语句中的参数值,使用?占位符替代
String sql = "select * from user where useename = ? and password = ? ";
//通过Connection对象获取对象,并传入对应的sql语句
PreparedStatement pstmt = conn.preparedStatement(sql);
PreparedStatement对象:setxxx(参数1,参数2) 给?赋值
//xxx:数据类型
//参数1:?的位置编号,从1开始 参数2:?的值
executeUpdate();
//executeQuery();
//注意没有参数了,用无参的方法,不需要再传递sql
例子:
//定义sql语句
String sql="update account set money=? where id = ?";
//获取pstmt对象
PreparedStatement pstmt =conn.prepareStatement(sql);
//设置?的值
int money=5000;
int id =1;
pstmt.setInt(1,money);
pstmt.setInt(2,id);
//关键字和字符全部被转义了,然后以文本的形式传入sql语句,预防了sql注入
//执行sql,用无参的方法
int rs = pstmt.executeUpdate();
//判断修改是否成功
if (rs>0)
System.out.println("修改成坤!");
预编译的原理:
-
预编译功能开启:useServerPrepStmts = true -
在获取PreparedStatement对象时,就将sql语句发送给mysql服务器进行检查,编译 -
执行时就不再检查和编译了,模板一样,就只需进行一次检查、编译
数据库连接池
数据库连接池是一个容器,负责分配、管理数据库连接
允许应用程序重复使用一个现有的数据库连接,而不是重新再新建一个
释放空闲时间超过最大空间的数据库连接来避免因为没有释放数据库连接而引起的数据库遗漏
优点:资源重用,提升系统响应速度,避免数据库连接遗漏
连接池实现
标准接口:DataSource
功能:获取连接
Maven
一套标准的项目结构
一套标准化的构建流程
一套依赖管理机制
Maven简介
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<blocked>true</blocked>
</mirror>
</mirrors>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
MyBatis
MyBatis免除了几乎所有的JDBC代码,以及设置参数和获取结果集的工作
|