一、项目介绍
1.1 项目目标
本项目为JAVAEE基础和数据库的综合项目,包含了若干个知识点,达到将从基础班到现在所学的知识综合使用,提高了我们对项目的理解与知识点的运用。 熟练View层、Service层、Dao层之间的方法相互调用操作 熟练使用工具类操作数据库表完成增删改查以及登录的功能 通过本项目,让我们了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高同学们独立分析需求与功能实现的能力。
二、项目环境搭建
2.1 数据准备
/* 创建账务管理的数据库 */ CREATE DATABASE account CHARACTER SET utf8; USE account; /* 用户表 字段: 用户id 用户名 username 密码 password */ CREATE TABLE ac_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), password VARCHAR(20), isManager int -- 1.管理员;0:普通用户; ); INSERT ac_user(username,password,isManager) values('admin','admin',1), ('user','user',0) /* 创建数据表,表名账务 字段,列 主键 分类名称 可变字符 金额 double 支付方式 可变字符 (支付,收入方法) 创建日期 date 账务描述 可变字符 */ CREATE TABLE ac_account( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 sortname VARCHAR(200),-- 分类名称 money decimal(10,2),-- 金额 type VARCHAR(100),-- 支付方式 createtime DATE,-- 创建日期 desp VARCHAR(1000)-- 账务描述 ); SELECT * FROM ac_account; -- 写入测试的数据 INSERT INTO ac_account(id,sortname,money,type,createtime,desp) VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐'); INSERT INTO ac_account(id,sortname,money,type,createtime,desp) VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了'); INSERT INTO ac_account(id,sortname,money,type,createtime,desp) VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服'); INSERT INTO ac_account(id,sortname,money,type,createtime,desp) VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐'); INSERT INTO ac_account(id,sortname,money,type,createtime,desp) VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');
2.2 技术选型
每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术。在今后的学习过程中,我们会逐渐对这些专业组织有所了解。本项目中使用的技术如下:
- DruidDruid数据连接池依赖该jar包
- druid-1.0.9.jar
- 数据库驱动MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。
- mysql-connector-java-5.1.37-bin.jar
2.3 JDBC工具类
每个项目都会用到一些工具类,本项目也不例外。JDBC工具类之前也讲过,在这里就不在详细描述!
package cn.yh.util; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * druid的通用类; * 1.导入jar和配置文件; * 2.创建一个通用类,static,读取文件; * 3.工厂来获取?连接池--->连接; */ public class DruidUtil { //成员变量 static DataSource ds=null; static Connection conn=null; static PreparedStatement pst=null; static ResultSet rs=null; static { try { InputStream fis = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"); //FileInputStream fis=new FileInputStream("src/db.properties"); Properties prop=new Properties(); prop.load(fis); //通过工厂,来获取连接池对象ds ds= DruidDataSourceFactory.createDataSource(prop); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } //获取连接:DriverManager public static Connection getConnection(){ try { conn= ds.getConnection(); } catch (SQLException throwables) { throwables.printStackTrace(); } return conn; } //3.通用的增删改,easy;注意理解思想:可变参;由于也不清楚,具体的类型,所以,写Object; ... :可变参; //可变参:本质是数组;注意:当没有参数的时候,可以直接写update(sql,null),update(sql); public static int update(String sql,Object ... params){ int result=0; //3.2 获取预编译语句对象; try { conn=getConnection(); //从本类来调用一下; System.out.println(conn); pst = conn.prepareStatement(sql); //针对?赋值; if(params!=null){ for (int i = 0; i < params.length; i++) { pst.setObject(i+1,params[i]); } } result=pst.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { close(null,pst,conn); } return result; } //4.通用封装查询 //5.通用封装等; //6. public static void close(ResultSet r, Statement s, Connection c){ if (c!=null){ try { c.close(); } catch (SQLException e) { e.printStackTrace(); } } if (r!=null){ try { r.close(); } catch (SQLException e) { e.printStackTrace(); } } if (s!=null){ try { s.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
2.4 项目分层(分包)
项目分层,分包好处是方便管理,各自负责各自的功能,也方便我们找错改问题!
- view层作用: 视图层,即项目中的界面
- controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
- service层作用(可省略): 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
- dao层作用: 数据访问层, 用来操作数据库表的数据
- entity 实体包: 存放JavaBean
- util工具包:存放项目中使用到的工具类
- test 测试包: 存放项目功能测试的代码
2.5 工程创建
三、相关类编写
3.1 相关类创建
主界面类:
public class TestUtil { @Test public void test01(){ MainView mv=new MainView(); mv.login(); } }
基于JDBC的账务管理系统(二)https://developer.aliyun.com/article/1433677