1.JDBC快速入门

执行jdbc_data.sql文件(链接:https://pan.baidu.com/s/1kPsGzA8osTeGlKKHFzES6A 提取码:4izs)

1.JDBC概述

1.JDBC的概念:
JDBC是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成

2.JDBC的本质
其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接

2.JDNC快速入门程序

步骤:
1.导入jar包
2.注册驱动
3.获取数据库连接
4.获取执行者对象
5.执行sql语句并返回结果
6.处理结果
7.释放资源

jar包下载官网:https://dev.mysql.com/downloads/file/?id=510648

1.导入jar包:
点击“File”然后点“Project Structure”
请添加图片描述

点击“Modules”,选择需要添加jar包的项目,点加号后选择第一个导入jar包
请添加图片描述

载入本地jar包后打钩确认
请添加图片描述

import java.sql.*;

public class JDBCDemo {
    public static void main(String[] args) throws Exception{
        //1.导入jar包
        //2.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //3.获取连接
        Connection con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/test", "root", "123456");

        //4.获取执行者对象
        Statement stat = con.createStatement();

        //5.执行sql语句,并接受结果
        String sql = "select id,name from user";
        ResultSet rs = stat.executeQuery(sql);

        //6.处理结果
        while(rs.next()){
            System.out.println(rs.getInt("id") + '\t' + rs.getString("name"));
        }

        //7.释放资源
        con.close();
        stat.close();
        rs.close();
    }
}

3.JDBC功能详解

3.1 DriverManager

DriverManager驱动管理对象
① 注册驱动

  • 注册给定的驱动程序 static void registerDriver(Driver driver);
  • 写代码使用:Class.forName(“com.mysql.cj.jdbc.Driver”)
  • 在com.mysql.cj.jdbc.Driver类存在静态代码块
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

注意:
1.我们不需要通过DriverManager调用静态方法registerDriver(),因为只要Driver类被使用,则汇之星其静态代码块完成注册驱动
2.mysql5之后可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.cj.jdbc.Driver

② 获取数据库连接
获取数据库连接对象:static Connection getConnection(String url,String user,String password);
返回值:Connection数据库连接对象
参数:

  • url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
  • user:用户名
  • password:密码

3.2 Connection

Connection数据库连接对象
① 执行者对象
获取普通执行者对象:Statement createStatement();
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);

② 管理事务
开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务
提交事务:commit();
回滚事务:rollback();

③ 释放资源
立即将数据库连接对象释放:void close();

3.3 Statement

Statement执行sql语句的对象
① 执行DML语句:int executeUpdate(String sql);
返回值int:返回影响的行数。
参数sql:可以执行insert、update、delete语句

② 执行DQL语句:ResultSet executeQuery(String sql);
返回值ResultSet:封装查询的结果
参数sql:可以执行select语句

③ 资源释放
立即将执行者对象释放:void close();

3.4 ResultSet

ResultSet结果集对象
① 判断结果集中是否有数据:boolean next();
有数据返回true,并将索引向下移动一行
没有数据返回false

② 获取结果集中的数据:XXX getXxx(“列名”);
XXX代表数据类型(要获取某列数据,这一列的数据类型)
例如:
int getInt(“id”); String getString(“name”);

③ 资源释放
立即将执行者对象释放:void close();

案例需求

使用JDBC完成对student表的CRUD操作

1.数据准备

#创建db14数据库
CREATE DATABASE db14;

#使用db14数据库
USE db14;

#创建student表
CREATE TABLE student(
	sid INT PRIMARY KEY AUTO_INCREMENT,	#学生id
	NAME VARCHAR(20),	#学生姓名
	age INT,	#学生年龄
	birthday DATE 	#学生生日
);

#添加数据
INSERT INTO student(NAME,age,birthday) 
VALUES('张三',23,'1999-09-23'),
('李四',24,'1998-08-10'),
('王五',25,'1997-06-06'),
('赵六',26,'1996-10-20');

2.创建Student类

public class Student{
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;
}

注意:自定义类的功能是为了封装类汇总每列数据,成员变量和列保持一致
所有基本数据类型需要使用对应的包装类,一面表中null值无法赋值

3.需求实现
需求1:查询所有学生信息
需求2:根据id查询学生信息
需求3:新增学生信息
需求4:修改学生信息
需求5:删除学生信息

添加测试用的jar包(和添加jdbc的jar包一样)
下载jar包(junit.jar、hamcrest-core.jar)
https://github.com/junit-team/junit4/wiki/Download-and-Install

domain文件夹下(Student.java)

package jdbc01.domain;

import java.util.Date;

public class Student {
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;

    public Student() {
    }

    public Student(Integer sid, String name, Integer age, Date birthday) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
}

controller文件夹下(StudentController.java)

package jdbc01.controller;

import jdbc01.domain.Student;
import jdbc01.service.StudentService;
import jdbc01.service.StudentServiceImpl;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;

public class StudentController {
    private StudentService service = new StudentServiceImpl();

    //查询所有学生信息
    @Test
    public void findAll(){
        ArrayList<Student> list = service.findAll();
        for (Student stu : list) {
            System.out.println(stu);
        }
    }

    //条件查询,根据id查询学生信息
    @Test
    public void findById(){
        Student stu = service.findById(3);
        System.out.println(stu);
    }

    //添加学生信息
    @Test
    public void insert(){
        Student stu = new Student(5,"周七",27,new Date());
        int result = service.insert(stu);
        if(result!=0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    }

    //修改学生信息
    @Test
    public void update(){
        Student stu = service.findById(5);
        stu.setName("周七七");

        int result = service.update(stu);

        if(result!=0){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败");
        }
    }

    //删除学生信息
    @Test
    public void delete(){
        int result = service.delete(5);

        if(result!=0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }
}

dao文件夹下(StudentDao.java,StudentDaoImpl.java)

package jdbc01.dao;

import jdbc01.domain.Student;

import java.util.ArrayList;

public interface StudentDao {
    //查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student findById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);
}


package jdbc01.dao;

import jdbc01.domain.Student;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class StudentDaoImpl implements StudentDao{
    //查询所有学生信息
    @Override
    public ArrayList<Student> findAll() {
        ArrayList<Student> list = new ArrayList<>();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并接受返回的结果集
            String sql = "select * from student";
            rs = stat.executeQuery(sql);

            //5.处理结果集
            while(rs.next()){
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");

                //封装Student对象
                Student stu = new Student(sid, name, age, birthday);

                //将student对象保存到集合中
                list.add(stu);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return list;
    }

    //条件查询,根据id查询学生信息
    @Override
    public Student findById(Integer id) {
        Student stu = new Student();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并接受返回的结果集
            String sql = "select * from student where sid='" + id + "'";
            rs = stat.executeQuery(sql);

            //5.处理结果集
            while(rs.next()){
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");

                //封装Student对象
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return stu;
    }

    //添加学生信息
    @Override
    public int insert(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并接受返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "insert into student values('"+stu.getSid()+"','"+stu.getName()+ "','"+stu.getAge()+"','"+birthday+"')";
            result = stat.executeUpdate(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }

    //修改学生信息
    @Override
    public int update(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并接受返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "update student set sid='"+stu.getSid()+"',name='"+stu.getName()+"',age='"+stu.getAge()+"',birthday='"+birthday+"' where sid='"+stu.getSid()+"'";
            result = stat.executeUpdate(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }

    //删除学生信息
    @Override
    public int delete(Integer id) {
        Connection con = null;
        Statement stat = null;
        int result =0;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.1.224:3306/db14", "root", "123456");

            //3.获取执行者对象
            stat = con.createStatement();

            //4.执行sql语句,并接受返回的结果集
            String sql = "delete from student where sid='"+id+"'";
            result = stat.executeUpdate(sql);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //5.释放资源
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stat != null){
                try {
                    stat.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        //将集合对象返回
        return result;
    }
}

service文件夹下(StudentService.java,StudentServiceImpl.java)

package jdbc01.service;

import jdbc01.domain.Student;

import java.util.ArrayList;

public interface StudentService {
    //查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student findById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);
}


package jdbc01.service;

import jdbc01.dao.StudentDao;
import jdbc01.dao.StudentDaoImpl;
import jdbc01.domain.Student;

import java.util.ArrayList;

public class StudentServiceImpl implements StudentService{
    private StudentDao dao = new StudentDaoImpl();

    //查询所有学生信息
    @Override
    public ArrayList<Student> findAll() {
        return dao.findAll();
    }

    //条件查询,根据id查询学生信息
    @Override
    public Student findById(Integer id) {
        return dao.findById(id);
    }

    //添加学生信息
    @Override
    public int insert(Student stu) {
        return dao.insert(stu);
    }

    //修改学生信息
    @Override
    public int update(Student stu) {
        return dao.update(stu);
    }

    //删除学生信息
    @Override
    public int delete(Integer id) {
        return dao.delete(id);
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种持久化框架,可以帮助开发人员管理数据库访问,提供了一种简化SQL语句编写和数据访问的方法。在这里,我将为您提供一个快速入门指南,以帮助您开始使用MyBatis。 1. 环境设置 在开始使用MyBatis之前,您需要在计算机上安装Java和MyBatis。您可以在MyBatis官网上下载MyBatis,并按照步骤进行安装。 2. 创建数据库表 在使用MyBatis之前,您需要创建一个数据库表来存储数据。在这里,我将创建一个名为“用户”的表,其中包含id、姓名和年龄字段。 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 3. 创建POJO类 在使用MyBatis之前,您需要创建一个POJO类来表示数据库表中的数据。在这里,我将创建一个名为“User”的类,并在其中添加id、name和age字段的getter和setter方法。 public class User { private int id; private String name; private int age; // getter and setter methods } 4. 创建Mapper接口和XML文件 在MyBatis中,Mapper是一个接口,它定义了与数据库进行交互的方法。在这里,我将创建一个名为“UserMapper”的接口,并在其中添加一个名为“selectUserById”的方法,该方法将返回具有指定ID的用户。 public interface UserMapper { User selectUserById(int id); } 接下来,我们需要创建一个名为“UserMapper.xml”的XML文件,该文件将包含与Mapper接口中方法对应的SQL语句。 <?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="com.example.mapper.UserMapper"> <select id="selectUserById" parameterType="int" resultType="com.example.pojo.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> 5. 配置MyBatis 现在,我们需要将MyBatis配置为使用我们创建的Mapper接口和XML文件。我们需要创建一个名为“mybatis-config.xml”的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="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> 在这里,我们为MyBatis配置了一个数据源,该数据源将连接到MySQL数据库,并指定了Mapper文件的位置。 6. 测试MyBatis 现在,我们已经准备好使用MyBatis了。我们可以在Java代码中使用MyBatis来获取具有指定ID的用户。在这里,我将提供一个简单的示例: public class Main { public static void main(String[] args) { SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession session = sessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.selectUserById(1); System.out.println(user.getName()); } } 在这里,我们使用SqlSessionFactoryBuilder类从mybatis-config.xml文件中创建SqlSessionFactory对象。然后,我们打开一个SqlSession对象并获取UserMapper接口的实例。最后,我们调用selectUserById方法并打印用户的名称。 这就是MyBatis的快速入门指南。希望这能帮助您开始使用MyBatis,并为您提供一个更好的方法来管理数据库访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值