项目描述
项目名称
供应商采购审批系统
项目技术
- 数据库 MySQL
- 开发工具 Idea、Maven
- 数据库连接技术 JDBC
- 数据库连接池技术 Druid
- 其他技术 md5加密 junit单元测试
项目功能
项目中包含三种员工角色:人事专员、采购专员、财务专员。其中,人事专员具有添加员工,员工离职功能,采购专员具有登录系统,修改密码,提交采购,修改采购,提交申诉等功能,财务专员具有独立系统,修改密码,采购审批,申诉审批等功能。
项目收获
通过这个项目,掌握了JDBC数据库编程、数据库连接池,md5加密,junit单元测试等技术。并能够独立开发实现审批系统的业务功能。启发了Java分层编程思想,深入理解项目中的service业务层和dao数据库层的职责。
项目模块描述
entity模块
该模块存放数据库表对应的实体对象
dao模块
该模块用于对接数据库,编写sql语句,执行一些对数据库的操作
service模块
该模块主要用于处理具体的业务逻辑;
util模块
该模块用于存放一些工具类,如德鲁伊连接池、加密工具等
test模块
该模块用于编写对应的测试用例
功能实现细节
添加供应商
业务流程
代码实现
package org.example.dao;
import org.example.entity.Emp;
import org.example.entity.Provider;
import java.sql.Connection;
import java.sql.SQLException;
/**
* @author wenZhen
* @create 2024-07-20 9:05
*/
public interface EmpDao {
/**
* 添加员工信息
* @param conn 数据库连接对象
* @param emp 员工对象
* @return 返回修改行数
* @throws SQLException 抛出数据库异常
*/
int insert(Connection conn, Emp emp) throws SQLException;
/**
* 用于检查员工是否已存在
* @param conn 数据库连接对象
* @param emp 员工对象
* @return 返回是否存在
* @throws SQLException 抛出数据库异常
*/
boolean exists(Connection conn,Emp emp) throws SQLException;
}
添加员工
业务流程
代码实现
package org.example.dao;
import org.example.entity.Emp;
import org.example.entity.Provider;
import java.sql.Connection;
import java.sql.SQLException;
public interface EmpDao {
/**
* 添加员工信息
* @param conn 数据库连接对象
* @param emp 员工对象
* @return 返回修改行数
* @throws SQLException 抛出数据库异常
*/
int insert(Connection conn, Emp emp) throws SQLException;
/**
* 用于检查员工是否已存在
* @param conn 数据库连接对象
* @param emp 员工对象
* @return 返回是否存在
* @throws SQLException 抛出数据库异常
*/
boolean exists(Connection conn,Emp emp) throws SQLException;
}
@Override
public int insert(Connection conn, Emp emp) throws SQLException {
//防SQL注入的写法
String sql="insert into emp(account, password, real_name, role_name) VALUES (?,?,?,?)";
//预编译
PreparedStatement preparedStatement = conn.prepareStatement(sql);
//填充 ?
preparedStatement.setObject(1,emp.getAccount());
preparedStatement.setObject(2, DigestUtils.md5Hex(emp.getPassword()));
preparedStatement.setObject(3,emp.getRealName());
preparedStatement.setObject(4,emp.getRoleName());
//执行sql
return preparedStatement.executeUpdate();
}
public boolean exists(Connection conn, Emp emp) throws SQLException {
String sql="select count(*) from emp where account= ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setObject(1,emp.getAccount());
ResultSet resultSet = preparedStatement.executeQuery();
boolean exists=false;
if (resultSet.next()){
exists= resultSet.getInt(1)!=0; //已存在
}
return exists; //不存在
}
/**
* 保存供应商
* @param emp 供应商对象
*/
void save(Emp emp);
EmpDao empDao;
public EmpServiceImpl() {