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

  • 加入接口

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

为 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 写为全局变量
    方法重构:将多个方法的共同代码提炼出来,单独写在一个方法中,然后引入该方法即可
代码结构:

在这里插入图片描述

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 优化版。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值