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();
}
}
|