个人理解:

  项目分层分包适合多人开发合作的,最好一个界面设置一个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. 结合Django+celery二次开发定时周期任务

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  2. Linux User

    1.用户的工作目录,在/etc/passwd中查看 2.如果shell=bin/false(正常为bin/bash)代表禁止登录,这样就无法登录以及通过su进行切换: 3.修改,usermod -d ...

  3. SimpliciTI协议地址分配

    1.多个ED节点和AP正确连接后,AP都会给ED分配一个相应的地址.当某个ED出现意外,比如电源问题,和AP断开连接,AP并不将该ED节点的地址消除.当该ED恢复正常,重新申请加入网络时,AP会检测该 ...

  4. => in Scala

    What does => mean in Scala? 操作符=>在Scala中什么意思? 百度了下,有个论坛给出了比较全面的回答,请参见http://stackoverflow.com/ ...

  5. DataTable批量插入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

  6. MS SQL JSON类型type

    在MS SQL Server 2016,已经支持JSON处理. 执行下面代码,将获取ms sql server对象类型以及其说明: IF OBJECT_ID('tempdb.dbo.#json_typ ...

  7. Jsoncpp写“鱘”的json数据,报错。

    最近在用Json::FastWriter生成json数据时,发现一个问题.含有“鱘”字的json字段会多出一个斜杠,不知道是不是编码的问题. C++要使用JSON来解析数据,一般采用jsoncpp. ...

  8. js 实现ajax(get和post)

    get和post的区别:1.GET产生一个TCP数据包:POST产生两个TCP数据包. 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据): 而 ...

  9. android基础复习

    http://www.cnblogs.com/aimeng/archive/2012/03/13/2393244.html android体系介绍 http://blog.chinaunix.net/ ...

  10. 关于unity中BindChannels的理解

    http://blog.csdn.net/wpapa/article/details/51794277 官方文档:http://docs.unity3d.com/Manual/SL-BindChann ...