【数据库】第四章 JDBC、MyBatis

第四章 JDBC、MyBatis

一、JDBC

1.介绍

JDBC(Java Data Base Connectivity),官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的 Java API,根本上说 JDBC 是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。可以用 JAVA 来写不同类型的可执行文件:JAVA 应用程序、JAVA Applets、Java Servlet、JSP 等,不同的可执行文件都能通过 JDBC 访问数据库,又兼备存储的优势。简单说它就是 JAVA 与数据库的连接的桥梁或者插件,用 JAVA 代码就能操作数据库的增删改查、存储过程、事务等

2.架构

分为双层架构和三层架构

双层架构
在这里插入图片描述

  • 作用:此架构中,Java Applet 或应用直接访问数据源
  • 条件:要求 Driver 能与访问的数据库交互
  • 机制:用户命令传给数据库或其他数据源,随之结果被返回
  • 部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S 配置(可以是内联网或互联网)

三层架构
在这里插入图片描述
次架构特殊之处在于引入了中间层服务
流程:命令和结构都会经过中间层
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势
历史趋势:以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码转为高效的特定机器码)和技术的发展,如 EJB,Java 开始用于中间层的开发,这也让 Java 的优势凸显出来,使用 Java 作为服务器代码语言,JDBC 随之被重视

3.常用接口

  • JAVA API:提供对JDBC的管理链接
  • JAVA Driver API:支持JDBC管理到驱动器连接
  • DriverManager:这个类管理数据库驱动程序的列表,查看加载的驱动是否符合JAVA Driver API的规范
  • Connection:与数据库中的所有的通信是通过唯一的连接对象
  • Statement:把创建的SQL对象,转而存储到数据库当中
  • ResultSet:它是一个迭代器,用于检索查询数据

4.操作流程

在这里插入图片描述

package com.sisyphus.test;

import java.sql.*;

/**测试 JDBC 的入门案例
 * @Description: $
 * @Param: $
 * @return: $
 * @Author: Sisyphus
 * @Date: 7/30$
 */
public class Test1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动 Driver
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接(user,password,port,databasename)
        String url = "jdbc:mysql://localhost:3306/demo";
        Connection c = DriverManager.getConnection(url, "root", "root");
        //3.获取传输器
        Statement s = c.createStatement();
        //4.执行 SQL
        ResultSet r = s.executeQuery("select * from demo");
        //5.处理结果集
        while(r.next()){    //next() 判断有没有数据,有数据就返回 true
            String a = r.getString(1);//获取第一列的数据
            String b = r.getString("id");//获取指定字段名的值
            System.out.println(a+","+b);
        }
        //6.释放资源
        r.close();//结果集
        s.close();//传输器
        c.close();//连接
    }
}

5.模拟登录功能

package com.sisyphus.test;

import java.sql.*;
import java.util.Scanner;

/**测试 JDBC 的入门案例
 * @Description: $
 * @Param: $
 * @return: $
 * @Author: Sisyphus
 * @Date: 7/30$
 */
public class Test1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        String url = "jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8&serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "123456";
        System.out.println("请输入用户名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入密码:");
        String pwd = scanner.nextLine();
        Connention(url,user,password,name,pwd);
    }

    private static void Connention(String url,String user,String password,String name, String pwd) throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取链接
        Connection connection = DriverManager.getConnection(url, user, password);


        //3.获取传输器
        Statement statement = connection.createStatement();
        //4.执行 SQL
        String sql = "select id from user where name = ? and password = ?";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setString(1,name);
        ps.setString(2,pwd);
        ResultSet resultSet = ps.executeQuery();


        //5.处理结果集
        if (resultSet.next()){
            System.out.println("登录成功!");
        }else{
            System.out.println("用户名或密码错误!");
        }
        //6.关闭资源
        resultSet.close();
        ps.close();
        connection.close();
    }
}

一、MyBatis

整体结构
在这里插入图片描述

1.导入 pom.xml

在这里插入图片描述

2.配置 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    指定使用哪个环境(数据库)-->
    <environments default="test">
        <environment id="test">
<!--            使用的事务管理器-->
            <transactionManager type="JDBC"/>
<!--            配置数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai" />
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

3.写 pojo

package com.sisyphus.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @Description: $
 * @Param: $
 * @return: $
 * @Author: Sisyphus
 * @Date: $
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors
public class User {
    private Integer id;
    private String name;
    private String addr;
    private Integer age;
}

4.写 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="userMapper">
    <select id="get" resultType="com.sisyphus.pojo.User">
        select * from user where id = 1
    </select>
</mapper>

5.在配置文件中引入 UserMapper.xml

在这里插入图片描述

5.Test

package com.sisyphus.test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Description: $
 * @Param: $
 * @return: $
 * @Author: Sisyphus
 * @Date: $
 */
public class Test1 {
    @Test
    public void get() throws IOException {
        //1.创建 SqlSessionFactory 对象,线程非安全,用来产生 SqlSession
        //2.创建 SqlSession,用来执行 sql
        //3.定位 SQL:namespace 的值 + id 的值
        //4.打印结果
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        Object o = session.selectOne("userMapper.get");
        System.out.println(o);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

313YPHU3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值