欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java Web 三层架构案例优化 信息管理系统

程序员文章站 2022-04-19 17:16:30
...
  • 加入接口

建议面向接口开发:先接口 -> 再实现类

为 service、dao 层设置接口

interface 命名: IStudentService、IStudentDao
接口所在的包命名:xxx.service、xx.dao

implements 命名: StudentServiceImpl、StudentDaoImpl
实现类所在的包:xxx.service.impl、xx.dao.impl

  • 在使用接口/实现时的写法:

接口 x = new 实现类();
例:IStudentDao studentDao = new StudentDaoImpl();

  • DBUtil:通用的数据库帮助类,可以降低 Dao 层的代码冗余

  • DBUtil 有很高的可移植性
    Dao 层的增删改中的 SQL 语句
    关于查询,在 DaoImp 中关闭 DBUtil 的 Connection,需要将 DBUtil 中的 Connection 写为全局变量
    方法重构:将多个方法的共同代码提炼出来,单独写在一个方法中,然后引入该方法即可

代码结构:

Java Web 三层架构案例优化 信息管理系统

DBUtil 代码:

// 通用的数据库操作方法
// 通用的增删改查
// Object 数组的强大

package com.zjy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.zjy.entity.Student;

public class DBUtil {

	private static final String URL = "jdbc:mysql://localhost:3306/threetiresample";
	private static final String USER = "root";
	private static final String PASSWORD = "root";
	public static Connection connection = null;
	public static PreparedStatement pst = null;
	public static ResultSet rs = null;
	
	// 获取数据库连接
	public static Connection getConnection() throws ClassNotFoundException, SQLException {
		Class.forName("org.gjt.mm.mysql.Driver");	// 加载数据库驱动
		return connection = DriverManager.getConnection(URL, USER, PASSWORD);	// 获取连接对象
	}
	
	// 构造语句
	public static PreparedStatement creatPreparedStatement(String sql, Object[] params) throws ClassNotFoundException, SQLException {
		pst = getConnection().prepareStatement(sql);	// 使用prepareStatement接口
		if(params != null) {
			for(int i = 0; i < params.length; i++) {
				pst.setObject(i+1, params[i]);
			}	
		}
		return pst;
	}
	
	// 关闭所有pst和conn连接
	public static void closeAll(ResultSet rs, Statement st, Connection connecion) {
		try {
			if(pst != null) pst.close();
			if(connection != null) connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	// 通用的增删改
	public static boolean executeUpdate(String sql, Object[] params) {
		try {
			// pst = 连接 + 构造SQL语句
			pst = creatPreparedStatement(sql, params);
			int result = pst.executeUpdate();
			if(result > 0) {
				 return true;
			} else {
				return false;
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			closeAll(null, pst, connection);
		}
	}
	
	// 通用的查:返回值是一个集合 (Student, List<Student>, null)
	// 使用集合可以表示任何类型
	// 通用:表示适合于任何查询
	// 查询的结果集传递结束后,不能进行关闭
	public static ResultSet executeQuery(String sql, Object[] params) {
		List<Student> students = new ArrayList<>();
		Student studentbean = null;
		try {
			pst = creatPreparedStatement(sql, params);
			rs = pst.executeQuery();
			return rs;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		} 
	}
}

完整代码我将会上传到我的资源,可以免费下载。进入我的个人主页,就可看到我上传的资源。 ThreeTreeSample.zip 优化版。

说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

相关标签: 网页设计