网页后端开发(基础5--JDBC VS Mybatis)

JDBC

JDBC: Java DataBase Connectivity),就是使用ava语言操作关系型数据库的一套API。

JDBC本质:

sun公司官方定义的一套操作所有关系型数据库的规范,即接口。

各个数据库厂商去实现这套接口,提供数据库驱动jar包。

我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

JDBC连接数据库:

java 复制代码
package com.cyyWeb;

import com.cyyWeb.pojo.User;
import org.junit.jupiter.api.Test;

import java.sql.*;

public class jdbcTest {
    @Test // 单元测试
    public void testUpdate() throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.连接数据库
        String url = "jdbc:mysql://localhost:3306/webjdbc618";
        String user = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, user, password);
        //3.获取sql语句执行对象
        Statement statement =connection.createStatement();
        //4.执行sql语句
        int i =statement.executeUpdate("update user set age =25 where id = 1");
        System.out.println("Sql执行完影响的记录数"+i);
        //5.释放资源
        statement.close();
        connection.close();
    }
}

优化代码:

java 复制代码
@Test
    public void testSelect() throws Exception {
        /**
         * 你是一名java开发工程师,帮我基于JDBC程序来操作数据库,执行如下SQL语句:
         * select id,username,password,name,age from user where username = 'daqiao' and password = '123456';
         * 并将查询的每一行记录,都封装到实体类User中,然后将User对象的数据输出到控制台中。
         */
        String url = "jdbc:mysql://localhost:3306/webjdbc618";
        String user = "root";
        String password = "1234";
        String sql = "SELECT id, username, password, name, age FROM user WHERE username = 'daqiao' AND password = '123456'";
        String sql1 = "SELECT id, username, password, name, age FROM user ";

        Connection connection =null;
        Statement statement =null;
        ResultSet rs =null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.连接数据库
            connection = DriverManager.getConnection(url, user, password);
            //3.获取sql语句执行对象
            statement = connection.createStatement();
            //4.执行sql语句,进行查询.ResultSet是查询结果集
            rs = statement.executeQuery(sql1);//将查询结果保存在ResultSet对象中
            //5.处理查询结果
            while (rs.next()) {
                Integer id = rs.getObject("id", Integer.class);
                String username = rs.getObject("username", String.class);
                String pwd = rs.getObject("password", String.class);
                String name = rs.getObject("name", String.class);
                Integer age = rs.getObject("age", Integer.class);
                //将查询结果封装为User对象
                User userObj = new User(id, username, pwd, name, age);
                System.out.println(userObj);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {//finally代码块,无论否发生异常,都会执行
            try {
                if (connection != null) {connection.close();}
                if (statement != null) {statement.close();}
                if (rs != null) {rs.close();}
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

运行结果:

总结:

JDBC程序执行DML语句?DQL语句?

DML语句:int rowsAffected = statement·executeUpdateO;

DOL语句:Resultset rs = statement·executeQuery();

DOL语句执行完毕结果集ResultSet解析?

resultSet.next():光标往下移动一行

resultSet.getXxx():获取字段数据

数据操纵语言(DML)

数据操纵语言全程是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。

数据查询语言(DQL)

数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句

预编译SQL

预编译SQL更加安全,性能更高。

预编译SQL优势:

1.可以防止SQL注入,更安全。

SQL注入:通过控制输入来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法

后台管理系统。

静态SQL

select count(*)from emp where username ='sjdkfikdjfksfand password =or1=1

运行结果是:数据库所有信息的个数。成功进入登录系统。

SQL注入攻击:

预编译SQL

有效防止SQl注入。

2.性能更高

静态SQL,需要缓存多次,进行多次 SQL语法解析检查->优化SQL->编译SQL。

预编译SQL:只需要缓存一次,然后直接通过缓存在?处填写数据,后直接执行。预编译SQL较静态SQL减少缓存次数,提高效率。

Mybatis

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。

MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis,2013年11月迁移到Github。

JDBC

MvBatis

MvBatis更加简洁,优雅。

入门程序

1.创建SpringBoot工程

2.数据库表user和User实体类

3.配置MyBatis

4.编写MyBatis程序

5.在Test代码中调用mapper代码。

总结:

注:Mybatis的持久层接口命名规范为XxxMapper,也称为Mapper接口

JDBC VS Mybatis

数据库连接池

数据库连接池:

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

标准接口:DataSource

官方(sun)提供的数据库连接池接口,由第三方组织实现此接口

功能:获取连接

Connection getConnection) throw SQLException;

数据库连接池常见种类:

默认使用Hikari连接池


Druid(德鲁伊)

Druid连接池是阿里巴巴开源的数据库连接池项目

功能强大,性能优秀,是Java语言最好的数据库连接池之

切换连接池

1.添加依赖

2.配置mapper

切换成功


总结:

数据库连接池

是一个容器,负责分配、管理数据库连接(Connection)

优势:资源复用、提升系统响应速度

接口:DataSource

产品:C3PO、DBCP、Druid、Hikari(默认)

增删改查操作

步骤

1.配置mapper

2.在Test中编写测试代码。

1.配置mapper

2.在Test中编写测试代码。

1.配置mapper

2.在Test中编写测试代码。

1.配置mapper

2.在Test中编写测试代码。

1.配置mapper

2.在Test中编写测试代码。

XML映射配置

在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句。

默认规则

1.XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下**(同包同名)**

2.XML映射文件的namespace属性为Mapper接口全限定名一致。

3XML映射文件中sqL语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

创建多级目录用/,创建多级包用.

相关推荐
DONG91316 分钟前
《三驾马车:MySQL、MongoDB、Redis对比与融合实战》
数据库·redis·sql·mysql·mongodb·database
程序边界41 分钟前
从 Oracle 到 KingbaseES:企业信创改造的“抄作业”模板,直接套用!
数据库·oracle
funfan05171 小时前
奇怪的“bug”--数据库的“隐式转换”行为
数据库·bug
Jasonakeke1 小时前
【重学MySQL】八十八、8.0版本核心新特性全解析
android·数据库·mysql
comeoffbest1 小时前
PostgreSQL 能存万物:从安装到高级功能实战
数据库·postgresql
时序数据说2 小时前
IoTDB如何解决海量数据存储难题?
大数据·数据库·物联网·时序数据库·iotdb
小楓12013 小时前
MySQL數據庫開發教學(二) 核心概念、重要指令
开发语言·数据库·mysql
花果山总钻风3 小时前
MySQL奔溃,InnoDB文件损坏修复记录
数据库·mysql·adb
TDengine (老段)4 小时前
TDengine IDMP 运维指南(管理策略)
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
Full Stack Developme5 小时前
PostgreSQL interval 转换为 int4 (整数)
数据库·postgresql