【无标题】

JDBC

. JDBC就是使用Java语言操作关系型数据库的一套API

【无标题】_第1张图片
步骤
【无标题】_第2张图片

JDBC API详解

DriverManager

1.注册驱动
2.获取连接

static Connection
getconnection (string url,string user,string password)

参数

  1. url:连接路径
    语法: jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对
    2示例: jdbc:mysql://127.0.0.1:3306/db1
    细节:
    如果连接的是本机mysql服务器,并且mysqlI服务默认端口是3306,则uri可以简写为: jdbc:mysql.//数据库名称?参数键值对
    ·配置useSSL=false参数,禁用安全连接方式,解决警告提示

  2. user:用户名

  3. password:密码

//2.获取连接:如果连接的是本机mysql并且端口是默认的3306可以简化书写
String url = "jdbc:mysql:///db1?useSSL=false";

Connection

  1. 获取执行SQL的对象
    ·普通执行SQL对象Statement createStatement()

·预编译SQL的执行SQL对象:防止SQL注入PreparedStatement prepareStaltement (sql)

·执行存储过程的对象CallableStatement prepareCall (sql)

  1. _事务管理
    MySQL事务管理
    开启事务:BEGIN; /STARTTRANSACTION;
    提交事务: COMMIT;
    回滚事务:ROLLBACK;

MySQL默认自动提交事务

. JDBC事务管理:Connection接口中定义了3个对应的方法

  • 开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务;false为手动提交事务,即为开启事务
  • 提交事务: commit()
  • 回滚事务:rollback()

举例

try{
conn.setAutocommit(false);
conn.commit();
}catch (Exception throwables) {
//回滚事务
conn.rollback();
throwables.printStackTrace();
}

Statement

.Statement作用:
1.执行SQL语句

·执行SQL语句

int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0

ResultSet executeQuery(sql):执行DQL语句
返回值: ResultSet结果集对象

ResultSet

. ResultSet(结果集对象)作用:
1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

·获取查询结果

boolean next(): (1)将光标从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:
true:有效行,当前行有数据.
false:无效行,当前行没有数据

xxxgetXxx(参数):获取数据
XXX:数据类型;如: int getInt(参数); String getString(参数)参数:
.int:列的编号,从1开始
. String:列的名称

PreparedStatement

. PreparedStatement作用:
1.预编译SQL语句并执行:预防SQL注入问题
. SQL注入
.SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

  1. 获取PreparedStatement 对象
    //SQL语句中的参数值,使用?占位符替代
    String sql = “select * from user where username = ? and password = ?”;
    //通过Connection对象获取,并传入对应的sql语句
    PreparedStatement pstmt = conn.prepareStatement(sql);
  1. 设置参数值
    PreparedStatement对象: setXxx(参数1,参数2):给﹖赋值
    Xxx:数据类型;如setlnt(参数1,参数2)
    参数:
    参数1:?的位置编号,从1开始
    参数2:? 的值
  1. 执行SQL
    executeUpdate(); / executeQuery();:不需要再传递sql
//定义sql
String sql = "select * from tb_user where username = ? and password = ?";
//获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置?的值
pstmt.setString( parameterIndex: 1, name);
pstmt.setString( parameterIndex: 2, pwd);
//执行squl
Resultset rs= pstmt.executeQuery();

数据库连接池

数据库连接池简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
  • 好处:
    • ·资源重用
    • ·提升系统响应速度·避免数据库连接遗漏

打印当前的路径System.out.println(System.getProperty(“user.dir”));
Driud使用步骤

  1. 导入jar包, druid-1.1.12.jar
  2. 定义配置文件
  3. 加载配置文件
  4. 获取数据库连接池对象
  5. 获取连接

第三天

Maven

. Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

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

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:
如果有,则在项目直接引用;
如果没有,则去中央仓库中下载对应的jar包到本地仓库。
Maven生命周期
Maven构建项目生命周期描述的是一次构建过程经历经历了多少个事件Maven对项目构建的生命周期划分为3套
clean:清理工作
default:核心工作,例如编译,测试,打包,安装等>site:产生报告,发布站点等

MyBatis

什么是MyBatis?
MyBatis是一款优秀的持久层框架,用于简化JDBC开发
MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github官网: https://mybatis.org/mybatis-3/zh/index.html
持久层
负责将数据到保存到数据库的那一层代码JavaEE三层架构:
表现层、业务层、持久层
框架
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

在框架的基础之上构建软件编写更加高效、规范、通用、
可扩展
【无标题】_第3张图片
查询user表中所有数据

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件–>替换连接信息解决硬编码问题
  4. 编写SQL映射文件–>统一管理sql语句,解决硬编码问题

  1. 编码
    1. 定义POJO类
    1. 加载核心配置文件,获取 SqlSessionFactory 对象
    1. 获取SqISession对象,执行SQL语句
    1. 释放资源

48集重要,以后不会就回看,创建mybatis

6.28第四天

使用Mapper代理方式完成入门案例

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值
类型一致
4.编码

  • 1.通过SqlSession的getMapper方法获取Mapper接口的代理对象
  • 2.调用对应方法完成sql的执行
    细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据
起别名:对不一样的列名起别名,让别名和实体类的属性名一样
缺点:每次查询都要定义一次别名
sql片段
缺点:不灵活

resultMap:
1.定义标签
2.在