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 写为全局变量
方法重构:将多个方法的共同代码提炼出来,单独写在一个方法中,然后引入该方法即可
代码结构:
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 优化版。
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
上一篇: JDK动态代理使用实例