Featured image of post JDBC进阶

JDBC进阶

714 字

JDBC-进阶

1.实体类与ORM

在使用JDBC操作数据库时,会发现数据库里面的数据是零散的,明明在数据库中是一行完整的数据,到了java中变成了一个一个的变量,不利于维护和管理,而java是面向对象的,一个表对应一个类,一行数据对应java中一个对象,一个列对应的是对象的属性,所以要把数据存储在一个载体里,这个载体是实体类。

ORM(Object Relational Mapping)思想,对象到关系数据库的映射,作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,以面向对象的角度操作数据库中的数据,即一张表对应一个类,一行数据对应一个对象,一个列对应一个属性

JDBC的过程称为手动ORM。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.Chiba.advanced.pojo;

//类名对应的是数据库t_后面的单词全写。 
public class Employee {
    private int empId;
    private String empName;
    private double empSalary;
    private Integer empAge;
    
    //此处写get、set、无参、有参、toString方法
}

封装代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.Chiba.advanced;

import com.Chiba.advanced.pojo.Employee;
import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBCAdvanced {
    @Test
    public void testORM() throws Exception {
        //passowrd修改为mysql设置的密码
        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "password");
        PreparedStatement preparedStatement = connection.prepareStatement("select emp_id,emp_name,emp_salary,emp_age from t_emp where emp_id=?");
        //给占位符赋值然后执行sql语句并返回结果。
        preparedStatement.setInt(1, 4);
        ResultSet resultSet = preparedStatement.executeQuery();
        
        Employee employee = null;
        while (resultSet.next()) {
            employee = new Employee();
            int empId = resultSet.getInt("emp_id");
            String empName = resultSet.getString("emp_name");
            double empSalary = resultSet.getDouble("emp_salary");
            int empAge = resultSet.getInt("emp_age");
            
            employee.setEmpId(empId);
            employee.setEmpName(empName);
            employee.setEmpSalary(empSalary);
            employee.setEmpAge(empAge);
        }
        System.out.println(employee);
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}

输出多个结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.Chiba.advanced;

import com.Chiba.advanced.pojo.Employee;
import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBCAdvanced {
    @Test
    public void testORm() throws Exception {
        //passowrd修改为mysql设置的密码
        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "password");
        PreparedStatement preparedStatement = connection.prepareStatement("select emp_id,emp_name,emp_salary,emp_age from t_emp");
        ResultSet resultSet = preparedStatement.executeQuery();
        Employee employee = null;
        List<Employee> employeeList = new ArrayList<>();
        while (resultSet.next()) {
            employee =new Employee();
            int empId = resultSet.getInt("emp_id");
            String empName = resultSet.getString("emp_name");
            double empSalary = resultSet.getDouble("emp_salary");
            int empAge = resultSet.getInt("emp_age");

            employee.setEmpId(empId);
            employee.setEmpName(empName);
            employee.setEmpSalary(empSalary);
            employee.setEmpAge(empAge);
//            将每次循环封装的一个数据的对象存储在集合里
            employeeList.add(employee);
        }
        for (Employee emp : employeeList) {
            System.out.println(emp);
        }
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
本博客已稳定运行 0
发布了 9 篇文章 | 共 8.8K
Hugo 主题 Stack 由Jimmy设计
Chiba
...