个人理解:
项目分层分包适合多人开发合作的,最好一个界面设置一个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层:
packagecom.oracle.view;importjava.util.ArrayList;importjava.util.Scanner;importcom.oracle.controller.GoodsController;importcom.oracle.controller.UserController;importcom.oracle.domain.Goods;public classMainView {private GoodsController goodsController=newGoodsController();private UserController userController=newUserController();//一级菜单
public voidfirstshow(){
System.out.println(“========欢迎光临超市========”);
System.out.println(“1.用户注册”);
System.out.println(“2.用户登录”);
System.out.println(“3.退出”);
System.out.println(“请输入您的选择:”);
}//一级菜单功能
public voidshow1(){while(true){
firstshow();
Scanner sc=newScanner(System.in);int choose=sc.nextInt();//对用户输入的选择进行判断
switch(choose){case 1://用户注册
break;case 2://用户登录
login();break;case 3:return;default:
System.out.println(“您的输入有误,请重新输入:”);break;
}
}
}//二级菜单页面
public voidsecondshow(){
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 voidshow2(){while(true){
secondshow();
Scanner sc=newScanner(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 voidaddGoods(){
System.out.println(“========新增商品页面========”);
System.out.println(“请输入新增商品的名称:”);
Scanner sc=newScanner(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 voidupdateGoods(){
System.out.println(“========修改页面========”);//查询所有商品
getGoods();
System.out.println(“请输入您要修改的商品编号:”);
Scanner sc=newScanner(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 voidgetGoods(){
System.out.println(“========所有商品页面========”);
System.out.println(“商品编号\t商品名称\t商品价格\t生产日期”);//调用Controller方法getGoods()获取集合
ArrayList arr=goodsController.getGoods();for(Goods g:arr){
System.out.println(g.getGid()+”\t”+g.getGname()+”\t”+g.getPrice()+”\t”+g.getGdate());
}
}//删除商品
public voiddeleteGoods(){
System.out.println(“========删除商品页面========”);
getGoods();
System.out.println(“请输入您要删除的商品编号:”);
Scanner sc=newScanner(System.in);int gid=sc.nextInt();//调用Controller方法删除商品
int row=goodsController.deleteGoods(gid);if(row>0){
System.out.println(“删除成功!”);
}else{
System.out.println(“删除失败!”);
}
}//用户登录
public voidlogin(){
System.out.println(“用户登录页面”);
System.out.println(“请输入用户名:”);
Scanner sc=newScanner(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层:
packagecom.oracle.controller;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importcom.oracle.domain.Goods;importcom.oracle.service.GoodsService;public classGoodsController {private GoodsService goodsService=new GoodsService();//掉方法需要创建对象//新增商品
public int addGoods(String gname,doubleprice,String date){//封装Goods对象
Goods goods=newGoods();
goods.setGname(gname);
goods.setGdate(date);
goods.setPrice(price);//调用Service层的新增方法
int row=goodsService.addGoods(goods);returnrow;
}//查询所有商品
public ArrayListgetGoods(){returngoodsService.getGoods();
}//修改商品
public int updateGoods(int gid,String gname,doubleprice,String gdate){//封装Goods对象
Goods goods=newGoods();
goods.setGid(gid);
goods.setGdate(gdate);
goods.setGname(gname);
goods.setPrice(price);//调用Service方法修改商品
int row=goodsService.updateGoods(goods);returnrow;
}//删除商品
public int deleteGoods(intgid){//封装Goods对象
Goods goods=newGoods();
goods.setGid(gid);//调用Service方法删除商品
int row=goodsService.deleteGoods(goods);returnrow;
}
}
service层:
packagecom.oracle.service;importjava.sql.SQLException;importjava.util.ArrayList;importcom.oracle.dao.GoodsDao;importcom.oracle.domain.Goods;public classGoodsService {private GoodsDao goodsDao=new GoodsDao();//私有化是只能Service层调用Dao层,不能跨层//新增商品
public intaddGoods(Goods goods){int row=0;try{
row=goodsDao.addGoods(goods);
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnrow;
}//查询所有商品
public ArrayListgetGoods(){
ArrayList arr=null;try{
arr=goodsDao.getGoods();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnarr;
}//修改商品
public intupdateGoods(Goods goods){int row=0;try{
row=goodsDao.updateGoods(goods);
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnrow;
}//删除商品
public intdeleteGoods(Goods goods){int row=0;try{
row=goodsDao.deleteGoods(goods);
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnrow;
}
}
Dao层:
packagecom.oracle.dao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importcom.oracle.domain.Goods;importcom.oracle.tools.JDBCUtils;public classGoodsDao {//新增商品
public int addGoods(Goods goods) throwsSQLException{//获取连接对象
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);returnrow;
}//查询所有商品
public ArrayList getGoods() throwsSQLException{//获取连接对象
Connection conn=JDBCUtils.getConn();//获取语句连接平台
String sql=”select * from goods”;
PreparedStatement pst=conn.prepareStatement(sql);//执行sql;
ResultSet rs=pst.executeQuery();//处理结果集
ArrayList arr=new ArrayList();while(rs.next()){
Goods goods=newGoods();
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);returnarr;
}//修改商品
public int updateGoods(Goods goods) throwsSQLException{//获取连接对象
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);returnrow;
}//删除商品
public int deleteGoods(Goods goods) throwsSQLException{//获取连接对象
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);returnrow;
}
}