网页后端开发(基础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接口中的方法名一致,并保持返回类型一致。

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

相关推荐
守城小轩2 分钟前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
尽兴-7 分钟前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
小小不董25 分钟前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba
胚芽鞘6811 小时前
查询依赖冲突工具maven Helper
java·数据库·maven
宇钶宇夕1 小时前
SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
运维·服务器·数据库·程序人生·自动化
LuckyLay2 小时前
1.1.1数据类型与变量——AI教你学Django
数据库·django·sqlite
汤姆大聪明3 小时前
Redis 持久化机制
数据库·redis·缓存
brevity_souls3 小时前
什么是时序数据库?——原理、特点与应用
数据库·时序数据库
SelectDB3 小时前
Apache Doris 实时更新技术揭秘:为何在 OLAP 领域表现卓越?
数据库·数据分析·apache
淮北4943 小时前
最简单的实验室资产管理系统,使用Flask,mysql,html(四、知识补充)
mysql·flask·html