个人理解:

  项目分层分包适合多人开发合作的,最好一个界面设置一个view,同时注释一定设置好,按照顺序:从前向后进行传递参数,从后向前进行传递返回值来进行判断是否真正的执行了sql语句(可以不返回),异常是在Service层处理,若是处理多个sql语句则也在Service层进行整合处理到一起。

一、作用:

  当程序规模小的时候,可以一个人全部完成;但程序规模大的时候,一个人难以完成,这时,要采用多人合作的方式来完成程序开发。

多人合作方式将会碰到工作任务分配问题,这时我们会想,每个人负责完成项目的一块内容就可以了。那么,这一块块内容的划分,就需要我们采用分层(分包)的方式完成了。

通过下图(用户注册功能)来讲解下,项目中常见的分层(分包)。

   

1、view层作用: 视图层,即项目中的界面(输入、输出语句)

2、controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理(向后面传值---对用户输入的信息进行封装,向后台请求)

3、service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互, 将对数据库的操作交给DAO数据访问层来处理(通常处理dao层抛出的异常)

4、 dao层作用: 数据访问层, 用来操作数据库表的数据(JDBC负责和数据库打交道,返回的行号 row 不要这层处理)

5、 db数据库: 这里指MySQL

6、domain 实体包: 存放JavaBean(实体类,一个表一个类,最好创建的实体类与数据库里的表的名字和数量都一样)

7、 tools工具包:存放项目中使用到的工具类(比如JDBC里的相同的部分封装成的工具类)

8、test 测试包: 存放项目功能测试的代码(main方法)

view层:

package com.oracle.view;

import java.util.ArrayList;
import java.util.Scanner; import com.oracle.controller.GoodsController;
import com.oracle.controller.UserController;
import com.oracle.domain.Goods; public class MainView {
private GoodsController goodsController=new GoodsController();
private UserController userController=new UserController();
//一级菜单
public void firstshow(){
System.out.println("========欢迎光临超市========");
System.out.println("1.用户注册");
System.out.println("2.用户登录");
System.out.println("3.退出");
System.out.println("请输入您的选择:");
} //一级菜单功能
public void show1(){
while(true){
firstshow();
Scanner sc=new Scanner(System.in);
int choose=sc.nextInt();
//对用户输入的选择进行判断
switch(choose){
case 1://用户注册
break;
case 2://用户登录
login();
break;
case 3:
return;
default:
System.out.println("您的输入有误,请重新输入:");
break;
}
}
}
//二级菜单页面
public void secondshow(){
System.out.println("========欢迎光临超市======");
System.out.println("1.新增商品");
System.out.println("2.修改商品");
System.out.println("3.删除商品");
System.out.println("4.查询所有商品");
System.out.println("5.返回上一级");
System.out.println("请输入您的选择:");
}
//二级菜单功能页面
public void show2(){
while(true){
secondshow();
Scanner sc=new Scanner(System.in);
int choose=sc.nextInt();
switch(choose){
case 1://新增商品
addGoods();
break;
case 2://修改商品
updateGoods();
break;
case 3://删除商品
deleteGoods();
break;
case 4://查询商品
getGoods();
break;
case 5:
return;//不能用exit
default:
System.out.println("您的输入有误,请重新输入:");
break; }
}
}
//新增商品页面
public void addGoods(){
System.out.println("========新增商品页面========");
System.out.println("请输入新增商品的名称:");
Scanner sc=new Scanner(System.in);
String gname=sc.next();
System.out.println("请输入商品价格:");
double price=sc.nextDouble();
System.out.println("请输入生产日期(XXXX-XX-XX):");
String date=sc.next();
//调用Controller层的add方法新增商品
int row=goodsController.addGoods(gname, price, date);
if(row>0){
System.out.println("新增成功!");
}else{
System.out.println("新增失败!");
}
}
//修改页面
public void updateGoods(){
System.out.println("========修改页面========");
//查询所有商品
getGoods();
System.out.println("请输入您要修改的商品编号:");
Scanner sc=new Scanner(System.in);
int gid=sc.nextInt();
System.out.println("请输入您要修改后的商品名称:");
String gname=sc.next();
System.out.println("请输入您要修改后的商品价格:");
Double price=sc.nextDouble();
System.out.println("请输入您要修改后的商品的生产日期(XXXX-XX-XX):");
String gdate=sc.next();
//调用Controller方法修改商品
int row=goodsController.updateGoods(gid, gname, price, gdate);
if(row>0){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
} }
//查询页面
public void getGoods(){
System.out.println("========所有商品页面========");
System.out.println("商品编号\t商品名称\t商品价格\t生产日期");
//调用Controller方法getGoods()获取集合
ArrayList<Goods> arr=goodsController.getGoods();
for(Goods g:arr){
System.out.println(g.getGid()+"\t"+g.getGname()+"\t"+g.getPrice()+"\t"+g.getGdate());
}
}
//删除商品
public void deleteGoods(){
System.out.println("========删除商品页面========");
getGoods();
System.out.println("请输入您要删除的商品编号:");
Scanner sc=new Scanner(System.in);
int gid=sc.nextInt();
//调用Controller方法删除商品
int row=goodsController.deleteGoods(gid);
if(row>0){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
}
// 用户登录
public void login(){
System.out.println("用户登录页面");
System.out.println("请输入用户名:");
Scanner sc=new Scanner(System.in);
String uname=sc.next();
System.out.println("请输入密码:");
String pwd=sc.next();
//调用UserController方法登录
int count=userController.login(uname,pwd);
if(count>0){
System.out.println("登录成功!");
show2();
}else{
System.out.println("用户名或密码错误,请重新登录!");
}
}
}

controller层:

package com.oracle.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import com.oracle.domain.Goods;
import com.oracle.service.GoodsService; public class GoodsController {
private GoodsService goodsService=new GoodsService();//掉方法需要创建对象
//新增商品
public int addGoods(String gname,double price,String date){
//封装Goods对象
Goods goods=new Goods();
goods.setGname(gname);
goods.setGdate(date);
goods.setPrice(price);
//调用Service层的新增方法
int row=goodsService.addGoods(goods);
return row;
}
//查询所有商品
public ArrayList<Goods> getGoods(){
return goodsService.getGoods();
}
//修改商品
public int updateGoods(int gid,String gname,double price,String gdate){
//封装Goods对象
Goods goods=new Goods();
goods.setGid(gid);
goods.setGdate(gdate);
goods.setGname(gname);
goods.setPrice(price);
//调用Service方法修改商品
int row=goodsService.updateGoods(goods);
return row;
}
//删除商品
public int deleteGoods(int gid){
//封装Goods对象
Goods goods=new Goods();
goods.setGid(gid);
//调用Service方法删除商品
int row=goodsService.deleteGoods(goods);
return row;
} }

service层:

package com.oracle.service;

import java.sql.SQLException;
import java.util.ArrayList; import com.oracle.dao.GoodsDao;
import com.oracle.domain.Goods; public class GoodsService {
private GoodsDao goodsDao=new GoodsDao();//私有化是只能Service层调用Dao层,不能跨层
//新增商品
public int addGoods(Goods goods){
int row=0;
try {
row=goodsDao.addGoods(goods);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return row;
}
//查询所有商品
public ArrayList<Goods> getGoods(){
ArrayList<Goods> arr=null;
try {
arr=goodsDao.getGoods();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arr;
}
//修改商品
public int updateGoods(Goods goods){
int row=0;
try {
row=goodsDao.updateGoods(goods);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return row;
}
//删除商品
public int deleteGoods(Goods goods){
int row=0;
try {
row=goodsDao.deleteGoods(goods);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return row;
}
}

Dao层:

package com.oracle.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList; import com.oracle.domain.Goods;
import com.oracle.tools.JDBCUtils; public class GoodsDao {
//新增商品
public int addGoods(Goods goods) throws SQLException{
//获取连接对象
Connection conn=JDBCUtils.getConn();
//获取语句执行平台
String sql="insert into goods(gname,price,gdate) values(?,?,?)";
PreparedStatement pst=conn.prepareStatement(sql);
//执行sql
pst.setString(1, goods.getGname());
pst.setDouble(2, goods.getPrice());
pst.setString(3, goods.getGdate());
int row=pst.executeUpdate();
//释放资源
JDBCUtils.close(conn, pst);
return row;
}
//查询所有商品
public ArrayList<Goods> getGoods() throws SQLException{
//获取连接对象
Connection conn=JDBCUtils.getConn();
//获取语句连接平台
String sql="select * from goods";
PreparedStatement pst=conn.prepareStatement(sql);
//执行sql;
ResultSet rs=pst.executeQuery();
//处理结果集
ArrayList<Goods> arr=new ArrayList<Goods>();
while(rs.next()){
Goods goods=new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getDouble("price"));
goods.setGdate(rs.getString("gdate"));
arr.add(goods);
}
//释放资源
JDBCUtils.close(conn, pst,rs);
return arr;
}
//修改商品
public int updateGoods(Goods goods) throws SQLException{
//获取连接对象
Connection conn=JDBCUtils.getConn();
//获取语句平台
String sql="update goods set gname=?,price=?,gdate=?where gid=?";
PreparedStatement pst=conn.prepareStatement(sql);
//执行sql语句
pst.setString(1, goods.getGname());
pst.setDouble(2, goods.getPrice());
pst.setString(3, goods.getGdate());
pst.setInt(4, goods.getGid());
int row=pst.executeUpdate();
//释放资源
JDBCUtils.close(conn, pst);
return row;
}
//删除商品
public int deleteGoods(Goods goods) throws SQLException{
//获取连接对象
Connection conn=JDBCUtils.getConn();
//获取语句平台
String sql="delete from goods where gid=?";
PreparedStatement pst=conn.prepareStatement(sql);
//执行sql语句
pst.setInt(1, goods.getGid());
int row=pst.executeUpdate();
//释放资源
JDBCUtils.close(conn, pst);
return row;
} }

JAVA基础之项目分包的更多相关文章

  1. JAVA基础-----Maven项目的搭建

    Maven项目的搭建 一.前言 maven官网:http://maven.apache.org/, 文章简介:本文章从三个模块来了解Maven,分别是 Maven的基本概念~, Maven项目的安装和 ...

  2. Java基础-新建项目、包和类

    1,新建项目

  3. Java开发之项目分包

    在我们开始准备写一个大点规模的项目时,我们不能随便地从main函数就开始往下写,要有清晰的逻辑思路和各个层面上的数据的传递和交互. 同时在我们写项目时也应该分出不同的包来做不同的事情,比如view包就 ...

  4. java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天一. 关键问题(理论):1. 简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系2. 简述Hero类构造 ...

  5. Java基础学习笔记二十八 管家婆综合项目

    本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...

  6. 自学转行JAVA,没有项目经历怎么找工作?

    应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...

  7. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  8. Java基础学习总结(70)——开发Java项目常用的工具汇总

    要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...

  9. 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写

    延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...

随机推荐

  1. CF 908D New Year and Arbitrary Arrangement——期望dp

    题目:http://codeforces.com/contest/908/problem/D 注意是子序列.加一个a对ab个数无影响:加一个b使ab个数多出它前面的a那么多个.所以状态里记录有多少个a ...

  2. Asp.Net 无法获取IIS拾取目录的解决办法[译]

    Asp.Net 无法获取IIS拾取目录的解决办法 作者:Jason Doucette  [MCP] 翻译:彭远志 原文地址:Fixing the cannot get IIS pickup direc ...

  3. docker学习 (二)基本概念

    基本概念: Docker包括三个基本概念: 镜像(Image): 特殊的文件系统,提供容器运行时所需的程序.库.资源.配置文件.镜像不包含动态数据,内容在构建后不会被改变. 容器(Container) ...

  4. matlab新手入门(一)(翻译)

    桌面基础知识 启动MATLAB®时,桌面将以其默认布局显示. 桌面包括以下面板: 当前文件夹 - 访问您的文件. 命令窗口 - 在命令行中输入命令,由提示符(>>)指示. 工作区 - 浏览 ...

  5. John 尼姆博弈

    John Little John is playing very funny game with his younger brother. There is one big box filled wi ...

  6. 699. Falling Squares

    On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ...

  7. Unity 5.6中的混合光照(上)

    https://mp.weixin.qq.com/s/AbWM21sihHw5pFdMzENDPg 在Unity 5中,光照得到了很大的改进.现在,创建高度逼真的游戏已成为可能.但是,出于对性能的考虑 ...

  8. 2014-10-6 NOIP模拟赛

    1. 锻炼计划(exercise.pas) 身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题.小x设计了自己的锻炼计划,但他不知道这个计划是否可行,换句话说如果计划不当可能 ...

  9. 洛谷P3110 [USACO14DEC]驮运Piggy Back

    P3110 [USACO14DEC]驮运Piggy Back 题目描述 贝西和她的妹妹艾尔斯白天在不同的地方吃草,而在晚上他们都想回到谷仓休息.聪明的牛仔,他们想出了一个计划,以尽量减少他们在步行时花 ...

  10. Maven项目已启动但是报异常访问webapp下所有资源都404