黑马程序员技术交流社区
标题: 【黑马程序员济南】小鲁哥哥白话笔记-管家婆项目(一) [打印本页]
作者: 小鲁哥哥 时间: 2017-11-2 16:01
标题: 【黑马程序员济南】小鲁哥哥白话笔记-管家婆项目(一)
本帖最后由 小鲁哥哥 于 2017-11-2 16:05 编辑
小鲁哥哥白话笔记-管家婆项目
前面我们把java基础的内容给大家用白话的形式简单的讲了讲,今天我们把课堂上的管家婆案例拿出来和大家聊一聊,这一个项目是综合了前面我们所讲的所有技术,让大家把以前所学的知识整合起来,对前面我们所学的技术有一个全面的复习和了解。
项目训练目标
* A: 项目训练目标
* a: 项目目标
* 综合运用前面所学习的知识点
* 熟练View层、Service层、Dao层之间的方法相互调用操作、
* 熟练dbutils操作数据库表完成增删改查
* 了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高同学们独立分析需求与功能实现的能力。
项目中的功能模块
* A: 项目中的功能模块
* a: 五大模块
* 查询账务
* 多条件组合查询账务
* 添加账务
* 编辑账务
* 删除账务
技术的选择和相关jar包
* A: 技术的选择和相关jar包
* a: apache的commons组件:
* commons-dbutils-1.4.jar:封装并简化了JDBC;
* commons-dbcp-1.4.jar:apache commons提供的数据库连接池组件,命名为DBCP;
* b: commons.pool-1.3.jar:DBCP连接池依赖该jar包;
* mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。
项目中的工具类
* A: 项目中的工具类
* a: 工具类的介绍
* 每个项目中都会有很多个工具类,不要求每个工具类对能独立写出来,但是要会使用工具类
* JDBCUtils:用来创建数据库连接池对象
数据表的设计
* A: 数据表的设计
* a: 数据表的设计(详见:day34_source/表关系.JPG)
* 表与表之间是有关系的
* 主表和从表的关系
* 主表中的主键作为从表中的外键
创建数据库数据表写入测试数据
* A: 创建数据库数据表写入测试数据
* a: 创建数据库数据表
/*
创建管家婆的数据库
名字 gjp
*/
CREATE DATABASE gjp;
USE gjp;
/*
创建数据表,表名账务
字段,列
主键
分类名称 可变字符
金额 double
账户 可变字符 (支付,收入方法)
创建日期 date
账务描述 可变字符
*/
CREATE TABLE gjp_zhangwu(
-- 主键
zwid INT PRIMARY KEY AUTO_INCREMENT,
-- 分类名称
flname VARCHAR(200),
-- 金额
money DOUBLE,
-- 账户
zhanghu VARCHAR(100),
-- 创建日期
createtime DATE,
-- 账务描述
description VARCHAR(1000)
);
SELECT * FROM gjp_zhangwu;
* b: 写入数据
-- 写入测试的数据
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工资收入',5000,'交通银行','2016-10-28','又开工资了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'礼金支出',5000,'现金','2016-10-28','朋友结婚');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其他支出',1560,'现金','2016-10-29','丢钱了');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工资收入',1000,'现金','2016-10-30','开资');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'现金','2016-10-30','机票好贵');
INSERT INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工资收入',5000,'现金','2016-10-30','又开资');
项目中的分层设计
* A: 项目中的分层设计
* a: 各层功能介绍
* view层作用: 视图层,即项目中的界面
* controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
* service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
* dao层作用: 数据访问层, 用来操作数据库表的数据
* db数据库: 这里指MySQL
* domain 实体包: 存放JavaBean
* tools工具包:存放项目中使用到的工具类
* test 测试包: 存放项目功能测试的代码
创建项目_分层_导入jar包
* A: 创建项目_分层_导入jar包
* a: 创建工程包
* cn.itcast.gjp.app: 存放main方法类;
* cn.itcast.gjp.domain: 存放JavaBean;
* cn.itcast.gjp.view: 存放界面,及表现层类;
* cn.itcast.gjp.service: 存放业务层类;
* cn.itcast.gjp.dao: 存放数据访问层类;
* cn.itcast.gjp.tools:存放工具类
* b: 导入jar包
* 在项目根路径下建立文件夹lib
* 导入以下jar包
* mysql-connector-java-5.1.37-bin.jar:数据库驱动
* commons-dbutils-1.6.jar:提供QueryRunner类方便进行增删改查操作
* commons-dbcp-1.4.jar:
* commons-pool-1.5.6.jar:提供高效的数据库连接池技术
* 拷贝以上jar包,选定拷贝的jar包/右键/Build Path/Add to Build Path
创建domain包中的类
* A: 创建domain包中的类
* a: 案例代码
public class ZhangWu {
private int zwid;
private String flname;
private double money;
private String zhanghu;
private String createtime;
private String description;
//注意生成空参构造、有参构造、set和get方法、toString方法等
}
创建JDBCUtils工具类
* A:创建JDBCUtils工具类
* a: 案例代码
public class JDBCUtils{
//创建BasicDataSource对象
private static BasicDataSource datasource = new BasicDataSource();
//静态代码块,实现必要参数设置
static{
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3306/gjp");
datasource.setUsername("root");
datasource.setPassword("123");
datasource.setMaxActive(10);
datasource.setMaxIdle(5);
datasource.setMinIdle(2);
datasource.setInitialSize(10);
}
public static DataSource getDataSource(){
return datasource;
}
}
创建其他包中的类
* A: 创建其他包中的类
* a: cn.itcast.gjp.dao包中创建ZhangWuDao类
[Java] 纯文本查看 复制代码
/*
* 实现对数据表 gjp_zhangwu 数据增删改查操作
* dbuils工具类完成,类成员创建QueryRunner对象,指定数据源
*/
public class ZhangWuDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
}
* b: cn.itcast.gjp.service包中创建ZhangWuService类
/*
* 业务层类
* 接收上一层,控制层controller的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/
public class ZhangWuService {
private ZhangWuDao dao = new ZhangWuDao();
}
* c: cn.itcast.gjp.controller包中建立ZhangWuController类
/*
* 控制器层
* 接收视图层的数据,数据传递给service层
* 成员位置,创建service对象
*/
public class ZhangWuController {
private ZhangWuService service = new ZhangWuService();
}
* d: cn.itcast.gjp.view包中建立MainView类
/*
* 试图层,用户看到和操作的界面
* 数据传递给controller层实现
* 成员位置,创建controller对象
*/
public class MainView {
private ZhangWuController controller = new ZhangWuController();
}
* e: cn.itcast.gjp.app包中建立MainApp类
/*
* 主程序类,作用,开启软件程序
*/
public class MainApp {
public static void main(String[] args) {
new MainView().run();
}
}
实现用户的界面菜单
* A: 实现用户的界面菜单
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类中添加run方法
[Java] 纯文本查看 复制代码
/*
* 实现界面效果
* 接收用户的输入
* 根据数据,调用不同的功能方法
*/
public void run(){
//创建Scanner类对象,反复键盘输入
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("---------------管家婆家庭记账软件---------------");
System.out.println("1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统");
System.out.println("请输入要操作的功能序号[1-5]:");
//接收用户的菜单选择
int choose = sc.nextInt();
//对选择的菜单判断,调用不同的功能
switch(choose){
case 1:
// 选择添加账务,调用添加账务的方法
break;
case 2:
// 选择的编辑账务,调用编辑账务方法
break;
case 3:
// 选择的删除账务,调用删除账务方法
break;
case 4:
// 选择的是查询账务,调用查询方法
//selectZhangWu();
break;
case 5:
System.exit(0);
break;
}
}
}
实现查询的界面菜单
* A: 实现查询的界面菜单
* a: 案例核心代码
* cn.itcast.gjp.view包中建立MainView类中添加selectZhangWu方法、selectAll方法、select方法
* 定义方法 selectZhangWu()
* 显示查询的方式 1 所有查询 2 条件查询
* 接收用户的选择
*/
public void selectZhangWu(){
System.out.println("1. 查询所有 2. 条件查询");
Scanner sc = new Scanner(System.in);
int selectChooser = sc.nextInt();
//判断根据用户的选择,调用不同的功能
switch(selectChooser){
case 1:
//选择的查询所有,调用查询所有的方法
selectAll();
break;
case 2:
//选的条件查询,调用带有查询条件的方法
select();
break;
}
}
/*
* 定义方法,实现查询所有的账务数据
*/
public void selectAll(){
}
/*
* 定义方法,实现条件查询账务数据
* 提供用户的输入日期,开始日期结束日期
* 就2个日期,传递到controller层
* 调用controller的方法,传递2个日期参数
* 获取到controller查询的结果集,打印出来
*/
public void select(){
}
今天就和大家聊到这个项目的简单搭建这里,还需要大家在平时多注意总结和复习。
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
作者: Yin灬Yan 时间: 2017-11-7 17:30
我来占层楼啊
作者: fashionkillyou 时间: 2017-11-8 00:29
项目中的分层设计
* A: 项目中的分层设计
* a: 各层功能介绍
* view层作用: 视图层,即项目中的界面
* controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
* service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理
* dao层作用: 数据访问层, 用来操作数据库表的数据
* db数据库: 这里指MySQL
* domain 实体包: 存放JavaBean
* tools工具包:存放项目中使用到的工具类
* test 测试包: 存放项目功能测试的代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |