不同层次,使用不同的包表示

1.com.gongsi 公司域名倒写
2.com.itheima.dao dao层
3.com.itheima.service service层
4.com.itheima.domain javabean/domain
5.com.itheima.utils 工具
6. com. itheima. web /view web层
如下图

web层

public class ShangpinView {public static void main(String[] args) throws Exception {//1.显示菜单System.out.println("欢迎登录商品管理系统");while(true){System.out.println("--------------------------------------------------");System.out.println("C:新增|U:修改|D:删除|DA:批量删除|FI:查询|FA:查询所有|Q:退出");//2.键盘输入System.out.println("请按键操作");System.out.println("--------------------------------------------------");Scanner sc=new Scanner(System.in);String str=sc.nextLine();switch(str.toUpperCase()){case "C":addShangpin();break;case "U":updateShangpin();break;case "D":deleteShangpin();break;case "DA":deleteShangpins();break;case "FI":findShangpin();break;case "FA":findAllShangpin();break;case "Q":System.out.println("退出成功,欢迎下次使用");System.exit(0);break;default:System.out.println("输入有误,请重新输入");break;}}}//查询所有商品private static void findAllShangpin() {// TODO Auto-generated method stubSystem.out.println("当前选择查看所有商品");ShangpinService service =new ShangpinService();//注意这个地方要创建的是list集合List<Shangpin> sps=service.findAllShangpin();if(sps.isEmpty()){System.out.println("数据库暂无数据");}else{for (Shangpin sp : sps) {System.out.println(sp);}System.out.println("已查询到所有商品");}}//查询商品private static void findShangpin() {// TODO Auto-generated method stubSystem.out.println("当前选择查询商品");Scanner sc=new Scanner(System.in);//1.请输入要修改的商品的编号System.out.println("请输入要查询的商品的编号");int id=Integer.parseInt(sc.nextLine());//2.调用service层的查询方法ShangpinService service=new ShangpinService();Shangpin sp=service.findShangpin(id);//3.返回信息if(sp==null){System.out.println("输入的编号有误,请重新输入");}else{System.out.println("已查询到商品");System.out.println(sp);}}//批量删除商品private static void deleteShangpins() {// TODO Auto-generated method stubSystem.out.println("当前选择批量删除商品");//先建一个集合存放待删商品的编号List<Integer> ids=new ArrayList<Integer>();Scanner sc=new Scanner(System.in);ShangpinService service =new ShangpinService();//循环输入,按-1完成选择while(true){//1.输入要删除的商品编号System.out.println("输入要删除的商品编号,按-1完成选择");int id=Integer.parseInt(sc.nextLine());//先判断是否按了-1if(id==-1&&ids.size()>0){                              System.out.println("选择完成,即将删除");break;}if(id==-1&&ids.isEmpty()){System.out.println("未选中任何商品");}//2.查询数据库有没有Shangpin sp=service.findShangpin(id);if(sp==null){//输入的编号没有System.out.println("输入有误");}else{//输入的编号有,加入集合ids.add(id);System.out.println("当前选中"+ids.size()+"个商品");}}//3.选中了几个商品后,进行删除操作System.out.println("确定要删除吗?Y/N");String yOrN=sc.nextLine();if(yOrN.toUpperCase().equals("Y")){//批量删除商品service.deleteShangpins(ids);System.out.println("已删除选中商品");}else{System.out.println("取消操作");}}//删除商品private static void deleteShangpin() {// TODO Auto-generated method stubSystem.out.println("当前选择删除商品");//1.输入要删除的商品编号Scanner sc=new Scanner(System.in);System.out.println("输入要删除的商品编号");int id=Integer.parseInt(sc.nextLine());//2.查询数据库中是否有该商品ShangpinService service =new ShangpinService();Shangpin sp=service.findShangpin(id);//3.根据查询结果if(sp==null){System.out.println("输入有误");}else{System.out.println("将要删除的商品为:"+sp);System.out.println("确定要删除商品?Y/N");String yOrN=sc.nextLine();if(yOrN.toUpperCase().equals("Y")){service.deleteShangpin(id);System.out.println("已删除选中商品");}else{System.out.println("取消删除商品");}}}//修改商品private static void updateShangpin() {// TODO Auto-generated method stubSystem.out.println("当前选择修改商品");Scanner sc=new Scanner(System.in);//1.请输入要修改的商品的编号System.out.println("请输入要修改的商品的编号");int id=Integer.parseInt(sc.nextLine());//2.先查询一下输入的商品有没有ShangpinService service=new ShangpinService();Shangpin sp= service.findShangpin(id);if(sp==null){//如果不存在...System.out.println("输入的编号有误,请重新输入");}else{//如果存在System.out.println("当前商品的信息为:"+sp);System.out.println("请输入要修改的名字");String pname=sc.nextLine();System.out.println("请输入要修改的价格");int price=Integer.parseInt(sc.nextLine());//3.pname和price存入shangpin sp对象sp.setPname(pname);sp.setPrice(price);//4.修改service.updateShangpin(sp);           System.out.println("已修改选中商品");}}//新增商品private static void addShangpin() {// TODO Auto-generated method stubSystem.out.println("当前选择新增商品");Scanner sc=new Scanner(System.in);//1.请输入商品名字System.out.println("请输入商品名字");String pname=sc.nextLine();//2.请输入商品价格System.out.println("请输入商品价格");//3.integer下的一个字符串转整数的方法int price=Integer.parseInt(sc.nextLine());//4.调用自定义类Shangpin p=new Shangpin(pname, price);//5.调用ProductService的新增商品的方法ShangpinService service=new ShangpinService();//6.把自定义类获取的pname和price传给service层service.addShangpin(p);System.out.println("已新增商品");}
}

Service层

public class ShangpinService {// service层只是调用dao层的方法public void addShangpin(Shangpin p) {// TODO Auto-generated method stub// 调用dao层的新增方法ShangpinDao dao = new ShangpinDao();try {dao.addShangpin(p);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}// service层只是调用dao层的方法public Shangpin findShangpin(int id) {// TODO Auto-generated method stub// 调用dao层的查询方法ShangpinDao dao = new ShangpinDao();Shangpin sp = null;try {sp = dao.findShangpin(id);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return sp;}//修改商品public void updateShangpin(Shangpin sp) {// TODO Auto-generated method stubShangpinDao dao = new ShangpinDao();try {dao.updateShangpin(sp);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//查询所有商品public List<Shangpin> findAllShangpin() {// TODO Auto-generated method stubShangpinDao dao = new ShangpinDao();List<Shangpin> sps = null;try {sps = dao.findAllShangpin();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return sps;}// 删除商品public void deleteShangpin(int id) {// TODO Auto-generated method stubShangpinDao dao = new ShangpinDao();try {dao.deleteShangpin(id);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// 批量删除商品public void deleteShangpins(List<Integer> ids) {// TODO Auto-generated method stubtry {//自定义工具事务类,开启事务ConnectionManager.start();        for (int id : ids) {ShangpinDao dao = new ShangpinDao();dao.deleteShangpins(id);//↓↓↓↓↓模拟出错用↓↓↓↓↓//System.out.println(1/0);}//自定义事务工具类,提交事务ConnectionManager.commit();}catch (Exception e) {System.out.println("出错,即将回滚");//自定义工具事务类,回滚事务try {ConnectionManager.rollback();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}
}

dao层

public class ShangpinDao {//新增商品public void addShangpin(Shangpin p) throws Exception {//1.创建query对象QueryRunner qr=new QueryRunner(C3P0Utils.lianjie());//执行新增商品操作Object[] params={p.getPname(),p.getPrice(),"1","c002"};qr.update("insert into shangpin (pname,price,flag,leimu) values(?,?,?,?)", params);}//查询商品public Shangpin findShangpin(int id) throws Exception {// TODO Auto-generated method stubQueryRunner qr=new QueryRunner(C3P0Utils.lianjie());     Shangpin sp= qr.query("select *from shangpin where pid=?",new BeanHandler<Shangpin>(Shangpin.class), id);return sp;}//修改商品public void updateShangpin(Shangpin sp) throws Exception {// TODO Auto-generated method stubQueryRunner qr=new QueryRunner(C3P0Utils.lianjie());qr.update("update shangpin set pname=?,price=? where pid=?", sp.getPname(),sp.getPrice(),sp.getPid());}//查詢所有商品public List<Shangpin> findAllShangpin() throws SQLException {// TODO Auto-generated method stubQueryRunner qr=new QueryRunner(C3P0Utils.lianjie());List<Shangpin> sps= qr.query("select *from shangpin",new BeanListHandler<Shangpin>(Shangpin.class));return sps;}//删除商品public void deleteShangpin(int id) throws SQLException {// TODO Auto-generated method stubQueryRunner qr=new QueryRunner(C3P0Utils.lianjie());qr.update("delete from shangpin where pid=?", id);}//批量删除商品public void deleteShangpins(int id) throws Exception {// TODO Auto-generated method stubQueryRunner qr=new QueryRunner();//注意:如果用事务来操作,这里也要获取事务工具类中的连接,确保和service层里的是同一个连接qr.update(ConnectionManager.getConnection(), "delete from shangpin where pid=?", id);}}

domain/javabean层(标准的自定义类)

public class Shangpin {private int pid;private String pname;private int price ;private int flag;private String leimu;public Shangpin() {super();// TODO Auto-generated constructor stub}public Shangpin(int pid, String pname, int price, int flag, String leimu) {super();this.pid = pid;this.pname = pname;this.price = price;this.flag = flag;this.leimu = leimu;}public Shangpin(String pname, int price) {super();this.pname = pname;this.price = price;}@Overridepublic String toString() {return "Product [pid=" + pid + ", pname=" + pname + ", price=" + price + ", flag=" + flag + ", leimu=" + leimu+ "]";}public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public String getPname() {return pname;}public void setPname(String pname) {this.pname = pname;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getFlag() {return flag;}public void setFlag(int flag) {this.flag = flag;}public String getLeimu() {return leimu;}public void setLeimu(String leimu) {this.leimu = leimu;}}

C3P0Utils工具类(src文件夹里还要放个xml文件)

public class C3P0Utils {static DataSource ds=new ComboPooledDataSource();public static DataSource lianjie(){return ds;}public static Connection getConnection() throws Exception{Connection con =ds.getConnection();return con;}public static void closeAll(PreparedStatement ps,Connection con,ResultSet rs){//关闭各种资源if(ps != null){try{ps.close();  }catch(Exception e){e.printStackTrace();}}if(ps != null){try{con.close();  }catch(Exception e){e.printStackTrace();}}if(ps != null){try{rs.close();   }catch(Exception e){e.printStackTrace();}}          }
}

连接管理工具类

public class ConnectionManager {
/*
*   ThreadLocal:底层是一个Map<Thread,Object>
*               set(Object 值);==> map.set(当前线程对象,值)
*               get();===>map.get(当前线程对象)
*               remove();====>map.remove(当前线程对象)
*///1.定义集合对象ThreadLocal,保存连接private static ThreadLocal<Connection> tl=new ThreadLocal<Connection>();//2.建一个连接public static Connection getConnection() throws Exception{//从tl中取一个连接Connection conn=tl.get();//如果为空,说明是第一次获取if(conn==null){//从连接池拿一个连接conn=C3P0Utils.getConnection();//加入tl集合tl.set(conn);}//不为空,则返回connreturn conn;}//3.开启事务public static void start() throws Exception{ConnectionManager.getConnection().setAutoCommit(false);}//4.提交事务public static void commit() throws  Exception{ConnectionManager.getConnection().commit();}//5.回滚事务public static void rollback() throws Exception{ConnectionManager.getConnection().rollback();}//6.关闭连接public static void close() throws Exception{ConnectionManager.getConnection().close();}}

使用三层思想完成商品管理系统相关推荐

  1. Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。

    我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...

  2. ASP.NET 三层架构技术 人力资源管理系统项目HR (深入WebServic

    白菜价, 想要的联系QQ:867635458,非诚勿扰! ASP.NET MVC Linq 技术  企业级通用OA系统  全程开发 大型企业级别OA项目实战全新上线啦!本项目由小孔子讲师全程录制.小孔 ...

  3. PHP+mysql商品管理系统-计算机毕业设计源码19895

    摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台.商品管理系统每天都有大量的信息需要通过网络来管理,为此,本人开发了一个基于B/S(浏览器/服务器)模式的商品管理系统商品管理平台. 该系 ...

  4. Java课程设计——仓库商品管理系统

    在现今信息时代,生活速度的加快,使得人们越来越向信息化.数字化发展.随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,尤其是学生的考试成绩数据.面对庞大的学生的成绩,需要有学生 ...

  5. java swing mysql实现的仓库商品管理系统

    运行背景: Java swing实现的一款简单的仓库商品管理系统,数据库采用的是mysql,本系统实现了两个角色层面的功能,管理员可以管理用户.仓库.商品信息等.普通用户登录后可以查看商品.仓库信息及 ...

  6. java最终考核项目(实现商品管理系统)

    文章目录 首先声明一点,java这门语言其实博主是个小白,有很多小细节没考虑进去,大家有需要的私下各自完善一下,还请各位大佬多多谅解,谢谢,祝大家取得好成绩,冲冲冲,加油!!! 第一步: 第二步: 第 ...

  7. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...

    [实例简介] JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统 [实例截图] [核心代码] f48fd612-281d-454e-97d3-20c8f775879f └── Prod ...

  8. c语言编写的商品管理程序,C语言编写的商品管理系统

    C语言编写的商品管理系统 商品的增删改查 #include #include #include #define K 5 int m=2; //商品种数 /*定义商品结构体*/ struct goods ...

  9. c语言商品管理系统文件,c语言商品管理系统(文件应用).doc

    c语言商品管理系统(文件应用) //编制于2012.11.4-5号/************************库文件包含************************/ #include//输 ...

最新文章

  1. 学JS的心路历程 -数组常见处理方法
  2. TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流
  3. 做乘法c语言,【code】C语言_实现输入的矩阵的乘法运算
  4. cesium学习之环境搭建
  5. 快速排序【记录一下代码】
  6. css3 flex布局九宫格,css3最全flex布局结构整理
  7. 51nod 1133 不重叠的线段
  8. 基于SpringBoot/SSM的旅游论坛
  9. 【MySQL】 GTID使用
  10. js导出WORD设置分页
  11. c语言指针藏头,2020中秋节的藏头诗_关于中秋节的藏头诗词
  12. 微信支付--付款到零钱(java后端)
  13. 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟
  14. 将两个递增的有序链表合并成一个递增的有序链表(CPP版)
  15. 实用创意马赛克效果短视频转场过渡pr模板
  16. 如何修改MySQL数据库的密码?
  17. 如何区分虚拟网卡和物理网卡?
  18. Ublox-F9P USB接口
  19. 氢os android 7.0,迄今最干净的国产安卓7.0系统 氢OS体验
  20. 虹科分享 | 简单实用的CANopen介绍,看完你就明白了(1)——CANopen基础概念

热门文章

  1. 如何将PDF文件转换成Excel呢?
  2. 查询无限级/三级分销的简单易用SQL
  3. 社会实践活动报告—06暑假饭店打工
  4. UI设计必备工具之活学活用
  5. 推荐算法_02_协同过滤算法(ItemCF和UserCF)
  6. 在excel中某些单元格内批量增加相同的内容
  7. python 点击tree目录、执行下一个操作_如何使用python解决下一个iter(xml.etree.ElementTree)?...
  8. 一个并不“艰难”的决定—一个程序员的成长史(3)
  9. 深度 | 白帽汇赵武:以安徒生之名打造企业威胁感知神器
  10. 大明宫发动机和个人的考虑发达国家