数据库表的创建

在sqlyog中使用sql语句创建表

回到eclipse

让我们先了解一下项目中的分层:

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

一般项目中的层:

  • view层作用: 视图层,即项目中的界面
  • controller层作用: 控制层, 获取界面上的数据,为界面设置数据; 将要实现的功能交给业务层处理
  • service层作用: 业务层, 功能的实现, 与controller控制层和数据访问层DAO交互,
    将对数据库的操作交给DAO数据访问层来处理
  • dao层作用: 数据访问层, 用来操作数据库表的数据
  • db数据库: 这里指MySQL
  • domain 实体包: 存放JavaBean
  • tools工具包:存放项目中使用到的工具类
  • test 测试包: 存放项目功能测试的代码

首先在在项目中创建六个包:

然后导入以上四个jar包

工程创建及包管理

1.使用Eclipse创建Java工程,命名为gjp 2.创建工程包

  • 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:存放工具类

3.创建lib文件夹,用来存储使用的jar包

当我们把这些包都填满,我们的项目就完成啦~~~~

[1]首先我们现在.domain包下创建.class,命名为Zhangwu.java 把数据库的列名全都添加进来,产生get/set方法。

package cn.xiaozhang.domain;public class Zhangwu {private int zwid;private String flname;private double money;private String zhangHu;private String createtime;private String description;public Zhangwu() {super();}//空参构造器必须给出,使用queryrunner作对象的时候需要使用空参构造器public Zhangwu(int zwid, String flname, double money, String zhangHu, String createtime, String description) {super();this.zwid = zwid;this.flname = flname;this.money = money;this.zhangHu = zhangHu;this.createtime = createtime;this.description = description;}//声明构造器,使用所有成员@Overridepublic String toString() {return "Zhangwu [zwid=" + zwid + ", flname=" + flname + ", money=" + money + ", zhangHu=" + zhangHu+ ", createtime=" + createtime + ", description=" + description + "]";}public int getZwid() {return zwid;}public void setZwid(int zwid) {this.zwid = zwid;}public String getFlname() {return flname;}public void setFlname(String flname) {this.flname = flname;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public String getZhangHu() {return zhangHu;}public void setZhangHu(String zhangHu) {this.zhangHu = zhangHu;}public String getCreatetime() {return createtime;}public void setCreatetime(String createtime) {this.createtime = createtime;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}
}

碎碎念:①先声明构造器,使用所有成员 空参构造器必须得添加(使用queryrunner作对象的时候需要使用空参构造器建立对象)
②tostring 打印结果方便
③再添加一堆get/set方法

[2]我们在tools包下创建.class文件,命名为JDBCUtils.java,这个是工具类用来获取数据库连接的,配置连接池参数

package cn.xiaozhang.tools;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;/** 获取数据库链接的工具类* 实现链接池,dbcp连接池* */
public class JDBCUtils {//创建basicdatasource对象       建立池链接的属性配置对象private static BasicDataSource datasource = new BasicDataSource();//javax.sql的基本实现。通过javabean属性配置的数据源//静态代码块,实现必要的参数设置static{datasource.setUsername("root");datasource.setPassword("123");datasource.setUrl("jdbc:mysql://localhost:3306/mydb3");datasource.setMaxActive(10);datasource.setMaxIdle(5);datasource.setInitialSize(10);}public static DataSource getDataSource(){return datasource;//返回实现类对象}}

【碎碎念:创建basicdatasource对象,建立池链接的属性配置,import javax.sql.DataSource;】

【3】在View包下建立MainView类

package cn.xiaozhang.view;import java.util.List;
import java.util.Scanner;import cn.xiaozhang.controller.ZhangWuController;
import cn.xiaozhang.domain.Zhangwu;/** 视图层,用户看到和操作的界面* 数据传递个controller层实现* 成员为止,创建controller对象  * */public class MainView {private ZhangWuController controller = new ZhangWuController();/** 实现界面效果 接受用户的输入 根据数据,调用不同的功能方法*/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:addZhangwu();break;// 编辑账务case 2:editZhangwu();break;// 删除账务case 3:deleteZhangwu();break;// 查询账务case 4:selectZhangwu();break;// 退出系统case 5:System.out.println("再见");break;default:System.out.println("输入错误");}}}/** 定义方法,实现查询*/public void selectZhangwu() {System.out.println("1.查询所有   2.条件查询");Scanner sc = new Scanner(System.in);int selectchoose = sc.nextInt();switch (selectchoose) {case 1:// 查询所有方法selectall();break;case 2:// 条件查询select();break;}}/** 定义方法,实现条件查询账务数据 提供用户的输入日期,开始日期,结束日期 就2个日期,传递到controller层* 调用controller的方法,传递两个日期的参数 获取到controller查询的结果集,打印出来* */public void select() {// 调用控制层中的方法,查询符合条件的账务数据System.out.println("选择条件查询,输入日期格式:XXXX-XX-XX");Scanner sc = new Scanner(System.in);System.out.println("请输入开始日期");String startdate = sc.nextLine();System.out.println("请输入结束日期");String enddate = sc.nextLine();// 调用controller层的方法,传递日期,获取查询结果集List<Zhangwu> list = controller.select(startdate, enddate);if(list.size()!=0){printZhangwu(list);}else{System.out.println("没有查询到数据错误");}}public void selectall() {// 调用控制层中的查找所有的数据List<Zhangwu> list = controller.selectall();if(list.size()!=0){printZhangwu(list);}else{System.out.println("没有查询到数据错误");}}/** 定义方法,删除查询*/public void deleteZhangwu() {System.out.println("请输入要删除数据的日期:(格式为:XXXX-XX-XX)");//输入所要删除的数据的日期Scanner sc = new Scanner(System.in);String deletedate = sc.nextLine();// 调用控制层中的删除方法List<Zhangwu> list = controller.deleteZhangwu(deletedate);}/** 定义方法,编辑查询*/public void editZhangwu() {// 选择需要编辑的数据的idSystem.out.println("你选择的是编辑功能请,请输入一下内容");Scanner sc = new Scanner(System.in);System.out.println("你想编辑的数据id:");int wzid = sc.nextInt();System.out.println("请输入新的分类名称:");String flname = sc.next();System.out.println("请输入新账户:");String zhangHu = sc.next();System.out.println("请输入新金额:");double money = sc.nextDouble();System.out.println("请输入新时间:");String createtime = sc.next();System.out.println("请输入新说明:");String description = sc.next();//调用controller层的方法,传递参数Zhangwu zw = new Zhangwu(wzid, flname, money, zhangHu, createtime, description);controller.editZhangwu(zw);System.out.println("修改成功!!");}/** 定义方法,添加数据*/public void addZhangwu() {// 键盘输入,五项输入System.out.println("选择的添加账务功能,请输入一下内容");Scanner sc = new Scanner(System.in);System.out.println("请输入分类名称:");String flname = sc.next();System.out.println("请输入金额:");double money = sc.nextDouble();System.out.println("请输入账户:");String zhangHu = sc.next();System.out.println("请输入日期:(格式为:XXXX-XX-XX)");String createtime = sc.next();System.out.println("请输入描述:");String description = sc.next();//将接受到的数据,调用controller层的方法,传递参数//将用户输入的所有参数封装成Zhangwu对象Zhangwu zw = new Zhangwu(0, flname, money, zhangHu, createtime, description);controller.addZhangwu(zw);System.out.println("成功添加!!!!!");}//输出账务数据。接受list集合,便立即和,输出表格private void printZhangwu(List<Zhangwu> list) {// 输出表头System.out.println("ID\t\t类别\t\t账户\t\t金额\t\t时间\t\t\t说明");// 遍历集合,结果输出控制台for (Zhangwu zhangwu : list) {System.out.println(zhangwu.getZwid() + "\t\t" + zhangwu.getFlname() + "\t\t" + zhangwu.getZhangHu() + "\t\t"+ zhangwu.getMoney() + "\t\t" + zhangwu.getCreatetime() + "\t\t" + zhangwu.getDescription());}}}

【碎碎念:可以一个方法一个方法地实现功能,也就是说在view层写完一个方法后再往后面的service,controller,dao层进行实现,一个功能一个功能地测试,反而没那么多出错】

【3】此层为控制层,接受视图层的数据,,传递参数,数据传递给service层,

package cn.xiaozhang.controller;import java.util.List;import cn.xiaozhang.domain.Zhangwu;
import cn.xiaozhang.service.ZhangWuService;/** 控制器层 * 接受视图层的数据,数据传递给service层* 成员位置,创建service对象* * */public class ZhangWuController {private ZhangWuService service = new ZhangWuService();/** * 定义方法,实现条件查询账务* 方法由视图层调用,传递两个日期的字符串* 调用service层的方法,传递两个日期字符串,获取结果集* 结果集返回给视图层* */public List<Zhangwu> select(String startdate,String enddate){return service.select(startdate, enddate);}/** 控制类定义方法,实现查询所有的账务数据* 方法由视图层调用,方法调用service层* * */public List<Zhangwu> selectall(){return service.selectall();}/*定义删除方法,实现删除特点的数据* 方法由视图层调用,方法调用service层* */public List<Zhangwu> deleteZhangwu(String deletedate){return service.deleteZhangwu(deletedate);}/** 定义添加方法,实现添加数据的功能* 方法由视图层调用,传递参数,(传递过来的参数不能是五个数据,传递的是一个zhangwu类型的对象)方法调用service层*方法调用service层的方法,传递zhangwu对象,获取添加后的结果集,(添加成功的行数,int) * */public void addZhangwu(Zhangwu zw){service.addZhangwu(zw);}public void editZhangwu(Zhangwu zw){service.editZhangwu(zw);}}

【4】在service层下创建ZhangWuService.java,此层为业务层,接收上一次的controller的数据,经过计算,操作数据库,调用dao层中的类。

package cn.xiaozhang.service;import java.util.List;import cn.xiaozhang.dao.ZhangWuDao;
import cn.xiaozhang.domain.Zhangwu;/** 业务层类* 接受上一层,控制层contraller的数据* 经过计算,传递给dao层,操作数据库* 调用dao层中的类,类成员位置,创建dao类的对象* * */public class ZhangWuService {private ZhangWuDao dao = new ZhangWuDao();/** 定义方法,实现查询的所有账务数据* 此方法,由控制层调用,去调用dao层的方法* 返回存储zhangwu对象的list集合* */public List<Zhangwu> selectall(){return dao.selectall();}/** 定义方法,实现查询的符合条件的账务数据* 此条件,被控制层调用,传递两个日期字符串,* 去调用dao层的方法,传递两个日期的字符串* 返回存储zhangwu对象的list集合* */public List<Zhangwu> select(String startdate,String enddate){return dao.select(startdate, enddate);}/*删除*/public List<Zhangwu> deleteZhangwu(String deletedate){return dao.deleteZhangwu(deletedate);}/** 定义方法,实现添加账务* 是被控制层调用,调用的是dao层,传递的都是zhangwu对象* */public void addZhangwu(Zhangwu zw){dao.addZhangwu(zw);}/*编辑* 被控制层调用,调用dao层的方法* */public void editZhangwu(Zhangwu zw){dao.editZhangwu(zw);}}

【5】在dao包下建立ZhangWuDao.java,此层为直接与数据库连接的层,使用dbutils工具类,创建queryrunner对象,指定数据源,传递sql语句

package cn.xiaozhang.dao;import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;import cn.xiaozhang.domain.Zhangwu;
import cn.xiaozhang.tools.JDBCUtils;public class ZhangWuDao {/** 实现对数据gjp_zhangwu数据增删改查操作* dbutils工具类完成,类成员创建queryrunner对象,指定数据源* */private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());public  List<Zhangwu> list = null;public List<Zhangwu> select(String startdate,String enddate){try {//sql语句String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";//定义对象数组,存储?占位符Object[] params = {startdate,enddate};//调用qr对象的方法,query查询数据表,获取结果集list = qr.query(sql, new BeanListHandler<>(Zhangwu.class), params);} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println(e);}return list;}public List<Zhangwu> deleteZhangwu(String deletedate){try {//sql语句String sql = "DELETE FROM gjp_zhangwu WHERE createtime=?";//定义对象数组,存储?占位符Object[] params ={deletedate};//打印成功与否int row = qr.update(sql, params);if(row>0){System.out.println("删除成功");}} catch (SQLException e) {System.out.println(e);}return list;}/** 定义方法,查询数据库,获取所有的账务数据* 方法有业务层调用* 结果集,将所有的账务数据,存储到bean对象中,存储到集合中* */public List<Zhangwu> selectall(){try {//sql语句String sql = "SELECT * FROM gjp_zhangwu";//调用qr对象的方法,query方法,结果集beanlisthandlerlist = qr.query(sql, new BeanListHandler<>(Zhangwu.class));return list;} catch (SQLException e) {System.out.println(e);}return list;}/** 定义方法,实现添加账务功能* 有业务调用,传递zhangwu对象* 将Zhangwu对象中的数据,添加到数据表* */public void addZhangwu(Zhangwu zw){try{//拼写sql语句String sql = "INSERT  INTO gjp_zhangwu(flname,money,zhangHu,createtime,description) VALUES (?,?,?,?,?)";//创建对象数组,存储五个占位符的实际参数//实际参数来源是,传递过来的对象ZhangwuObject[] params = {zw.getFlname(),zw.getMoney(),zw.getZhangHu(),zw.getCreatetime(),zw.getDescription()};//调用qr对象中的方法update执行添加qr.update(sql, params);}catch(SQLException e){System.out.println(e);}}/** 编辑* */public void editZhangwu(Zhangwu zw){try {//拼写sql语句String sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhangHu=?,createtime=?,description=?  WHERE zwid=?";//创建对象参数,存储六个占位符的实际参数//实际参数的来源是传递过来的对象zhangwuObject[] params = {zw.getFlname(),zw.getMoney(),zw.getZhangHu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};//调用qr的update执行修改编辑数据qr.update(sql, params);} catch (SQLException e) {System.out.println(e);}}}

【6】主程序类,作用开启软件程序

package cn.xiaozhang.app;import cn.xiaozhang.view.MainView;public class MainApp {/** 主程序类,作用开启软件程序* */public static void main(String[] args) {new MainView().run();}}

【碎碎碎念:其实这里面的增删改查的方法都大同小异①在dao层定义方法,调用query/update方法传递参数对数据库进行增删改查,②在service层定义方法,此方法被控制层调用,调用dao层的方法,③controller层 定义方法,调用service层的方法,结果集返回给视图层。④视图层调用控制层,获取控制层查询到的结果集,并打印出来】

【第一个项目开发】创建domain包中的类相关推荐

  1. java byte 拓展_Java项目中如何扩展第三方jar包中的类?

    有些时候你对第三方得到jar包中的类并不是很满意,想根据实际情况做一些扩展.如果说第三方的jar包已经提供了一些可扩展的类,比如提供了Interceptor,Filter或者其他的类,那么使用原生的比 ...

  2. myeclipse中对jar包中的类热部署调试方法介绍

    在myeclipse代码中调试jar包中的类一般方式是修改了类后把代码替换jar中的class,然后替换系统中的jar文件并重启Web服务器,对jar可以关联源代码,关联后就能够断点跟踪代码. 上面的 ...

  3. Java遍历包中所有类包括jar包(完整转载)

    第一部分转自 :http://blog.csdn.net/wangpeng047/article/details/8124390 第二部分转自:http://blog.csdn.net/wangpen ...

  4. java缺省包详解_Java在其它包中无法引用缺省包中的类

    1.现象 1.1 问题场景 最近,在写测试代码时,将一个类(这里暂且称为ClassA)放在在缺省包中,也就是说,直接放在了src目录下,没有创建包.然后,将这个类打入了jar文件,提供给另外的工程(这 ...

  5. Java遍历包中所有类(完整转载:-))

    第一部分转自 :http://blog.csdn.net/wangpeng047/article/details/8124390 第二部分转自:http://blog.csdn.net/wangpen ...

  6. pbp 读取 mysql数据_pbp: Django项目开发,个人博客网站类。

    pbp 项目介绍 首个Django项目开发,个人博客网站类. 框架模型 Django 运行平台 Linux 安装部署 1.安装Python3环境 CentOS 7 curl -o /etc/yum.r ...

  7. Java遍历包中所有类

    由于项目需要,我想获得某包下所有的类(包括该包的所有子包),从网上找了找,没有什么能用的,即使找到了写的也不怎样,效率低下.索性就自己写吧,正好也锻炼锻炼写代码的功底.特此分享出来,希望能帮到大家.. ...

  8. java 扫描类_Java扫描指定包中所有类

    1. 扫描类 import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.n ...

  9. 从包中导入类的使用 java

    从包中导入类的使用 新建一个包,在包里定义一个类 来一个测试文件,生成这个类的对象 小结: 如果在别的包里定义了类 导入时需要使用import关键词导入包中的类 格式如下: import 包1.包2. ...

最新文章

  1. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_2
  2. c#实现显式的用户自定义类型转换(关键字explicit operator)
  3. 区块链BaaS云服务(5)金丘科技 海星链
  4. Gitlab怎样添加组、创建用户、创建项目与推送代码
  5. xib和storyboard小谈,
  6. SAP Fiori Launchpad pageSet请求的处理原理
  7. vue函数input输入值即请求,优化为用户输入完成之后再请求
  8. es6二进制数组--基础
  9. 不在gopath目录下能使用godoc吗_一文搞懂 Go Modules 前世今生及入门使用
  10. java 图像渲染_对具有大量图像的视图执行本机渲染性能
  11. 作文 —— 景物描写
  12. linux查看文件第三行,学习linux第三课!新手必须掌握的linux命令
  13. cent OS 6.3 yum方式安装openldap,phppldapadmin,lam
  14. 多屏信号服务器,多屏拼接控制器及多屏拼接方案【图文】
  15. Scott Page  斯科特佩奇《模型思维》读书笔记
  16. 语言识别之根据字典矫正文本及其c++代码实现
  17. ubuntu下安装gfortran
  18. SSH登录及失败解决
  19. Pycharm中用Appium框架编写第一个自动化脚本
  20. Learning AV Foundation(三)AVAudioRecorder

热门文章

  1. IOC之bean之间的关系讲解
  2. qbo web接口分析
  3. 爬取起点小说+mongoDB存储
  4. Android launcher 桌面抽屉切换动画
  5. 查找数组中重复的元素
  6. 5码默认版块_速看!在阜阳,“5折乘公交”优惠来了
  7. 如何学习vc++(vc的用处)
  8. Pandas中to_excel实现数据追加或者覆盖到Excel工作表
  9. python和C++语言哪个难学
  10. qcalendarwidget只显示月_本周新股14只连发!明日3只新股可申购,分别是中信博、圣湘生物、瑞晟智能...