一、封装作用
提高代码复用性,降低应用程序开发难度
二、封装分类
- 基于流程封装
- 基于特征封装
- 基于功能封装
三、基于流程封装
- 如果一个服务实现步骤超过了三步以上,那么这个服务实现代码就应该封装到一个方法中。
- DAO类:
DAO:DataBase Access Object;数据库访问对象/数据库操作对象
DAO对象在应用程序开发过程中提供对数据库操作细节实现
一个DAO类应该提供一张表操作细节,如:
dept——DeptDao
emp——EmpDao
DeptDao类:
package com.bjpowernode.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeptDao {
//封装插入操作流程
public int insert(String deptNo, String dname, String loc){
String sql = "insert into dept values(?,?,?)";
Connection con = null;
PreparedStatement car = null;
int flag = 0;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
car = con.prepareStatement(sql);
car.setString(1,deptNo);
car.setString(2,dname);
car.setString(3,loc);
flag = car.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(car != null) {
try {
car.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return flag;
}
//封装删除操作流程
public int delete(String deptNo){
String sql = "delete from dept where deptNo = ?";
Connection con = null;
PreparedStatement car = null;
int flag = 0;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
car = con.prepareStatement(sql);
car.setString(1,deptNo);
flag = car.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(car != null) {
try {
car.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return flag;
}
//封装更新操作流程
public int update(String deptNo, String dname, String loc){
String sql = "update dept set dname = ?,loc = ? where deptNo = ?";
Connection con = null;
PreparedStatement car = null;
int flag = 0;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
car = con.prepareStatement(sql);
car.setString(1,dname);
car.setString(2,loc);
car.setString(3,deptNo);
flag = car.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(car != null) {
try {
car.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return flag;
}
}
优化后的部门管理系统:
package com.bjpowernode.test;
import com.bjpowernode.dao.DeptDao;
import java.util.Scanner;
public class 部门管理应用程序 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int flag = 0;
String deptNo, dname, loc;
DeptDao dao = new DeptDao();
//操作界面
System.out.println("*****1.部门注册*****");
System.out.println("*****2.部门查询*****");
System.out.println("*****3.部门删除*****");
System.out.println("*****4.部门更新*****");
System.out.println("请选择");
flag = scanner.nextInt();
if(flag == 1){
System.out.println("请输入新部门编号");
deptNo = scanner.next();
System.out.println("请输入新部门名称");
dname = scanner.next();
System.out.println("请输入新部门位置");
loc = scanner.next();
flag = dao.insert(deptNo,dname,loc);
if(flag == 1){
System.out.println("新部门注册成功");
}else {
System.out.println("新部门注册失败");
}
}else if(flag == 2){
}else if(flag == 3){
System.out.println("请输入需要删除的部门编号");
deptNo = scanner.next();
dao.delete(deptNo);
}else if(flag == 4){
}
}
}
四、基于特征封装_实体类(entity class)
- 一个实体类用于描述一张表
- 实体类类名应该与表名相同
- 实体类中属性名应该与表中字段名相同
- 表中一个数据行由一个实体类对象进行描述
Dept类:
package com.bjpowernode.entity;
public class Dept {
//实体类属性的数据类型必须是高级封装类型
private Integer deptNo;
private String dname;
private String loc;
public Integer getDeptNo() {
return deptNo;
}
public void setDeptNo(Integer deptNo) {
this.deptNo = deptNo;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public Dept(Integer deptNo, String dname, String loc) {
this.deptNo = deptNo;
this.dname = dname;
this.loc = loc;
}
public Dept() {
}
}
优化后的部门管理系统:
package com.bjpowernode.test;
import com.bjpowernode.dao.DeptDao;
import com.bjpowernode.entity.Dept;
import java.util.Scanner;
public class 部门管理应用程序 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int flag = 0;
String deptNo, dname, loc;
DeptDao dao = new DeptDao();
//操作界面
System.out.println("*****1.部门注册*****");
System.out.println("*****2.部门查询*****");
System.out.println("*****3.部门删除*****");
System.out.println("*****4.部门更新*****");
System.out.println("请选择");
flag = scanner.nextInt();
if(flag == 1){
System.out.println("请输入新部门编号");
deptNo = scanner.next();
System.out.println("请输入新部门名称");
dname = scanner.next();
System.out.println("请输入新部门位置");
loc = scanner.next();
Dept dept = new Dept(Integer.valueOf(deptNo),dname,loc);
flag = dao.insert(dept);
if(flag == 1){
System.out.println("新部门注册成功");
}else {
System.out.println("新部门注册失败");
}
}else if(flag == 2){
}else if(flag == 3){
System.out.println("请输入需要删除的部门编号");
deptNo = scanner.next();
dao.delete(deptNo);
}else if(flag == 4){
}
}
}
五、基于功能封装_工具类
- 功能:一行命令就是一个功能
- 功能实现难度:涉及方法使用较难
- 功能封装:将一行很长命令封装到一个简短的方法
JdbcUtil类:
package com.bjpowernode.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcUtil {
Connection con = null;
PreparedStatement car = null;
//简化获得连接通道的难度
public Connection getCon(){
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","123456");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//简化获得交通工具的难度
public PreparedStatement getCar(String sql){
try {
car = getCon().prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return car;
}
//简化PreparedStatement和Connection销毁难度
public void close(){
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(car != null){
try {
car.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
优化后的部门管理系统:
package com.bjpowernode.test;
import com.bjpowernode.dao.DeptDao;
import com.bjpowernode.entity.Dept;
import java.util.Scanner;
public class 部门管理应用程序 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int flag = 0;
String deptNo, dname, loc;
DeptDao dao = new DeptDao();
//操作界面
System.out.println("*****1.部门注册*****");
System.out.println("*****2.部门查询*****");
System.out.println("*****3.部门删除*****");
System.out.println("*****4.部门更新*****");
System.out.println("请选择");
flag = scanner.nextInt();
if(flag == 1){
System.out.println("请输入新部门编号");
deptNo = scanner.next();
System.out.println("请输入新部门名称");
dname = scanner.next();
System.out.println("请输入新部门位置");
loc = scanner.next();
Dept dept = new Dept(Integer.valueOf(deptNo),dname,loc);
flag = dao.insert(dept);
if(flag == 1){
System.out.println("新部门注册成功");
}else {
System.out.println("新部门注册失败");
}
}else if(flag == 2){
}else if(flag == 3){
System.out.println("请输入需要删除的部门编号");
deptNo = scanner.next();
dao.delete(deptNo);
}else if(flag == 4){
}
}
}