Java实验项目六——使用DAO模式实现对职工表的操作
Program:
利用JDBC访问职工信息表,实现对职工信息的添加、更新、删除、按照职工号查找、查找全部职工的功能。
Description:在这里我采用了DAO设计模式完成对职工表的操作,下面介绍一下我的项目目录的组成(包.类)
com.vo.Worker:定义职工类,其中的Field名字和数据库中表的属性名字对应
com.db.DBConnection:实现控制数据库的连接和关闭,
com.dao.WorkerDao:定义接口,接口中定义与实际业务相对应的的数据库操作方法,具体操作由实现它的类完成
com.daoimpl.WorkerDaoImpl:数据层,实现WorkerDao接口,并覆写接口中的方法,实现对数据库的操作
com.daoimpl.WorkerService:业务逻辑层,实现WorkerDao接口,结合WorkerDaoImpl完成相应的业务操作
com.factory.Factory:定义工厂类,获得业务操作的对象,即WorkerService的实例化对象
main.TestDemo:测试类,测试业务逻辑操作
具体代码如下:
com.vo.Worker
1 /*
2 * Description:定义职工类
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package com.vo; //vo即为(Value Object 值对象 )
11
12 import java.util.Date;
13
14 public class Worker {
15
16 String workerId; //职工号
17 String workerName; //职工姓名
18 String workerSex; //职工性别
19 String workerPartment; //职工部门
20 Date workerBirthday; //职工出生日期
21
22
23 //定义构造方法
24 public Worker() {
25
26 }
27
28 public Worker(String id,String name,String sex,String partment,Date birthday) {
29
30 this.workerId = id;
31 this.workerName = name;
32 this.workerSex = sex;
33 this.workerPartment = partment;
34 this.workerBirthday = birthday;
35 }
36
37
38 //定义setter()和getter()方法
39 public String getWorkerId() {
40 return workerId;
41 }
42
43 public void setWorkerId(String workerId) {
44 this.workerId = workerId;
45 }
46
47 public String getWorkerName() {
48 return workerName;
49 }
50
51 public void setWorkerName(String workerName) {
52 this.workerName = workerName;
53 }
54
55 public String getWorkerSex() {
56 return workerSex;
57 }
58
59 public void setWorkerSex(String workerSex) {
60 this.workerSex = workerSex;
61 }
62
63 public String getWorkerPartment() {
64 return workerPartment;
65 }
66
67 public void setWorkerPartment(String workerPartment) {
68 this.workerPartment = workerPartment;
69 }
70
71 public Date getWorkerBirthday() {
72 return workerBirthday;
73 }
74
75 public void setWorkerBirthday(Date workerBirthday) {
76 this.workerBirthday = workerBirthday;
77 }
78
79 //覆写toString方法
80 @Override
81 public String toString() {
82 return "Worker [workerId=" + workerId + ", workerName=" + workerName
83 + ", workerSex=" + workerSex + ", workerPartment="
84 + workerPartment + ", workerBirthday=" + workerBirthday
85 + ", workerBeginDate=" + "]";
86 }
87
88 }
com.db.DBConnection
1 /*
2 * Description:定义数据库连接类。只负责数据库的连接和关闭
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package com.db;
11
12 import java.sql.Connection;
13 import java.sql.DriverManager;
14
15 public class DBConnection {
16
17 //定义数据库驱动类
18 private static final String DBDRIVER = "com.mysql.jdbc.Driver";
19 //定义数据库URL
20 private static final String DBURL = "jdbc:mysql://localhost:3306/Workers?characterEncoding=utf8&useSSL=true";
21 //定义数据库连接用户名
22 private static final String DBUSER = "root";
23 //定义数据库连接指令
24 private static final String DBPASS = "Cz123";
25
26 //声明数据库连接对象
27 Connection con = null;
28
29 //定义构造方法,并实例化数据库连接对象
30 public DBConnection() throws Exception {
31
32 try {
33
34 Class.forName(DBDRIVER);
35 this.con = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
36 }catch(Exception e) {
37
38 throw e;
39 }
40 }
41
42
43 //取得数据库连接对象
44 public Connection getConnection() throws Exception {
45
46 return this.con;
47 }
48
49 //关闭数据库连接
50 public void close() throws Exception{
51
52 if( this.con != null ) {
53
54 try {
55
56 con.close();
57 }catch(Exception e) {
58
59 throw e;
60 }
61 }
62 }
63
64 }
com.dao.WorkerDao
1 /*
2 * Description:定义DAO接口,在该接口中只是定义对员工的操作,
3 * 具体操作需要实现该接口的类完成
4 *
5 * Written By:Cai
6 *
7 * Date Written:2017-10-19
8 *
9 * */
10
11
12 package com.dao;
13
14 import java.util.List;
15
16 import com.vo.Worker;
17
18 public interface WorkerDao {
19
20 //向职工表中添加职工信息
21 public boolean add(Worker worker) throws Exception;
22
23 //根据职工号删除职工表中对应的职工
24 public boolean remove(String id) throws Exception;
25
26 //按照职工号查找职工
27 public Worker search(String id) throws Exception;
28
29 //查找全部职工
30 public List<Worker> getWorkers() throws Exception;
31
32 //更新职工信息
33 public boolean update(Worker worker) throws Exception;
34
35 }
com.daoimpl.WorkerDaoImpl
1 /*
2 * Description:实现DAO接口,完成具体数据库操作
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package com.daoimpl;
11
12 import java.sql.Connection;
13 import java.sql.PreparedStatement;
14 import java.sql.ResultSet;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.Date;
18 import com.dao.WorkerDao;
19 import com.vo.Worker;
20
21 public class WorkerDaoImpl implements WorkerDao {
22
23 private Connection con = null; //定义数据库连接对象
24 private PreparedStatement state = null; //当以数据库操作对象
25
26 //定义构造方法,并实例化数据路连接对象
27 public WorkerDaoImpl(Connection con) {
28
29 this.con = con;
30 }
31
32 //覆写插入方法
33 @Override
34 public boolean add(Worker worker) throws Exception {
35
36 boolean flag = false;
37 //如果数据库中不存在相同id的员工,则可插入数据
38 if( worker != null ) {
39
40 //定义插入的sql语句
41 String insertSql = " insert into worker(workerId,workerName,workerSex,workerPartment,workerBirthday) "
42 + " values(?,?,?,?,?) ";
43
44 //转换日期类型:util.Date -> sql.Date
45 Date date = worker.getWorkerBirthday();
46 java.sql.Date d = new java.sql.Date(date.getTime());
47
48 //取得操作数据库的对象
49 this.state = this.con.prepareStatement(insertSql);
50
51 this.state.setString(1, worker.getWorkerId());
52 this.state.setString(2, worker.getWorkerName());
53 this.state.setString(3, worker.getWorkerSex());
54 this.state.setString(4, worker.getWorkerPartment());
55 this.state.setDate(5, d);
56
57 if( this.state.executeUpdate() > 0 ) { //成功插入数据
58
59 flag = true;
60 }
61
62 this.state.close(); //关闭数据库操作对象
63 }
64
65 return flag; //返回判断标志
66 }
67
68 //覆写删除方法
69 @Override
70 public boolean remove(String id) throws Exception {
71
72 boolean flag = false; //判断是否删除成功
73
74 //定义用于删除的sql语句
75 String removeSql = " delete from worker where workerId = ? ";
76
77 this.state = this.con.prepareStatement(removeSql);
78 this.state.setString(1, id);
79
80 if( this.state.executeUpdate() > 0 ) { //删除成功
81
82 flag = true;
83 }
84
85 this.state.close(); //关闭连接
86
87 return flag;
88
89 }
90
91 //覆写查询方法
92 @Override
93 public Worker search(String id) throws Exception {
94
95 Worker worker = null; //接受查询返回的对象
96 ResultSet rs = null; //接受查询结果
97
98 //id不为空,且不为""
99 if( id != null && !"".equals(id) ) {
100
101 //定义用于查询的sql语句
102 String selectSql = "select workerId,workerName,workerSex,workerPartment,workerBirthday"
103 +" from worker where workerId=? ";
104
105 this.state = this.con.prepareStatement(selectSql);
106 this.state.setString(1, id);
107 rs = this.state.executeQuery();
108
109 //查询成功
110 if( rs.next() ) {
111
112 worker = new Worker(); //实例化Worker类对象
113 worker.setWorkerId(rs.getString(1));
114 worker.setWorkerName(rs.getString(2));
115 worker.setWorkerSex(rs.getString(3));
116 worker.setWorkerPartment(rs.getString(4));
117 worker.setWorkerBirthday(new Date( rs.getDate(5).getTime() ));
118 }
119
120 this.state.close(); //关闭连接
121 }
122
123 return worker;
124 }
125
126 //覆写取得所有Worker类对象的方法
127 @Override
128 public List<Worker> getWorkers() throws Exception {
129
130 //保存所有职工对象
131 List<Worker> list = new ArrayList<Worker>();
132 //保存返回的的查询结果
133 ResultSet rs = null;
134 //定义用于查询的sql语句
135 String selectSql = " select * from worker ";
136
137 this.state = this.con.prepareStatement(selectSql);
138 rs = this.state.executeQuery();
139
140
141 while( rs.next() ) {
142
143 Worker worker = new Worker(); //实例化职工对象
144
145 worker.setWorkerId(rs.getString(1));
146 worker.setWorkerName(rs.getString(2));
147 worker.setWorkerSex(rs.getString(3));
148 worker.setWorkerPartment(rs.getString(4));
149 worker.setWorkerBirthday(new Date( rs.getDate(5).getTime() ));
150
151 list.add(worker); //加入集合
152 }
153
154 this.state.close(); //关闭连接
155
156 return list; //返回集合
157
158 }
159
160 //覆写更新员工信息方法
161 @Override
162 public boolean update(Worker worker) throws Exception {
163
164 boolean flag = false; //标记是否更新成功
165
166 if( worker != null ) {
167
168 //定义更新语句
169 String updateSql = " update worker set workerName = ?,workerSex = ?,workerPartment = ?, "
170 + " workerBirthday = ? where workerId = ?";
171
172 //转换日期类型:util.Date -> sql.Date
173 Date date = worker.getWorkerBirthday();
174 java.sql.Date d = new java.sql.Date(date.getTime());
175
176 this.state = this.con.prepareStatement(updateSql);
177 this.state.setString(1, worker.getWorkerName());
178 this.state.setString(2, worker.getWorkerSex());
179 this.state.setString(3, worker.getWorkerPartment());
180 this.state.setDate(4, d);
181 this.state.setString(5, worker.getWorkerId());
182
183 if( this.state.executeUpdate() > 0 ) { //更新成功
184
185 flag = true;
186 }
187
188 this.state.close(); //关闭连接
189 }
190
191 return flag;
192 }
193
194
195 }
com.daoimpl.WorkerService
1 /*
2 * Description:实现具体的业务逻辑
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package com.daoimpl;
11
12 import java.util.List;
13
14 import com.dao.WorkerDao;
15 import com.db.DBConnection;
16 import com.vo.Worker;
17
18 public class WorkerService implements WorkerDao {
19
20 DBConnection dbc = null; //声明负责数据库连接关闭对象
21 WorkerDao workerDao = null; //声明业务逻辑操作接口对象
22
23 //定义构造方法,并实例化属性
24 public WorkerService() throws Exception {
25
26 this.dbc = new DBConnection(); //实例化数据库连接和关闭对象
27 this.workerDao = new WorkerDaoImpl(this.dbc.getConnection()); //实例化数据库操作对象
28 }
29
30 //添加职工信息
31 public boolean add(Worker worker) throws Exception {
32
33 boolean flag = false;
34
35 try {
36 if( this.workerDao.search(worker.getWorkerId()) == null ) {
37
38 flag = this.workerDao.add(worker); //调用WorkerDaoImpl类中add()方法
39 }
40
41 }catch(Exception e) {
42
43 throw e;
44 }finally {
45
46 this.dbc.close(); //关闭数据库连接
47 }
48
49 return flag;
50 }
51
52 //删除职工信息
53 public boolean remove(String workerId) throws Exception {
54
55 boolean flag = false;
56
57 try {
58 if( this.workerDao.search(workerId) != null ) {
59
60 flag = this.workerDao.remove(workerId); //调用WorkerDaoImpl类中的remove()方法
61 }
62 }catch(Exception e) {
63
64 throw e;
65 }finally {
66
67 this.dbc.close(); //关闭数据库连接
68 }
69
70 return flag;
71 }
72
73 //查询职工信息
74 public Worker search(String workerId) throws Exception {
75
76 Worker worker = null;
77
78 try {
79
80 worker = this.workerDao.search(workerId); //调用WorkerDaoImpl类中的search()方法
81 }catch(Exception e) {
82
83 throw e;
84 }finally {
85
86 this.dbc.close(); //关闭数据库连接
87 }
88
89 return worker;
90 }
91
92 //取得所有职工信息
93
94 public List<Worker> getWorkers() throws Exception {
95
96 List<Worker> list = null;
97
98 try {
99
100 list = this.workerDao.getWorkers(); //调用WorkerDaoImpl类中的getWorkers()方法
101 }catch(Exception e) {
102
103 throw e;
104 }finally {
105
106 this.dbc.close(); //关闭数据库连接
107 }
108
109 return list;
110 }
111
112 //更新员工信息
113 public boolean update(Worker worker) throws Exception {
114
115 boolean flag = false;
116
117 try {
118 if( this.workerDao.search(worker.getWorkerId()) != null ) {
119
120 flag = this.workerDao.update(worker); //调用WorkerDaoImpl类中的update()方法
121 }
122 }catch(Exception e) {
123
124 throw e;
125 }finally {
126
127 this.dbc.close(); //关闭数据库连接
128 }
129
130 return flag;
131 }
132
133 }
com.factory.Factory
1 /*
2 * Description:定义工厂类,获得WorkerService类的实例
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package com.factory;
11
12 import com.dao.WorkerDao;
13 import com.daoimpl.WorkerService;
14
15 public class Factory {
16
17 //定义静态方法,返回实例化的WorkerService类对象
18 /*
19 * 通过工厂类的静态方法,获得业务处理类实例化对象,可以让我们不用在表现层再去new对象,
20 * 并且当我们的业务操作层需要换一种方法实现时,同时又想保留原来的业务层的实现,这样我们直接可以
21 * 修改静态方法中的代码,不用去表现层中再一个一个的修改new对象的类型
22 *
23 * */
24 public static WorkerDao getWorkerServiceInstance() throws Exception {
25
26 return new WorkerService();
27 }
28
29 }
main.TestDemo
1 /*
2 * Description:定义测试类,测试Dao模式下,对数据库中职工表的一系列操作
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-10-19
7 *
8 * */
9
10 package main;
11
12 import java.util.Date;
13 import java.util.Iterator;
14 import java.util.List;
15
16 import com.factory.Factory;
17 import com.vo.Worker;
18
19 public class TestDemo {
20
21 public static void main(String args[]) {
22
23 List<Worker> list = null;
24
25 try {
26
27 //为了演示简单。所有的日期都直接new了
28 Factory.getWorkerServiceInstance().add(new Worker("0001","大象","male","办公室",new Date()));
29 Factory.getWorkerServiceInstance().add(new Worker("0002","狮子","male","办公室",new Date()));
30 Factory.getWorkerServiceInstance().add(new Worker("0003","老虎","male","办公室",new Date()));
31 Factory.getWorkerServiceInstance().add(new Worker("0004","蚂蚁","male","办公室",new Date()));
32
33 //演示插入相同id的职工信息,此处打印false,(插入失败)
34 System.out.println(Factory.getWorkerServiceInstance().add(new Worker("0004","蚂蚁","male","办公室",new Date())));
35 //根据id找到对应员工,此处打印对应id的员工信息
36 System.out.println(Factory.getWorkerServiceInstance().search("0004") );
37 //删除指定id编号的员工信息,此处打印true(删除成功)
38 System.out.println(Factory.getWorkerServiceInstance().remove("0004") );
39 //删除指定不存在的id编号的员工信息,此处打印false(删除失败)
40 System.out.println( Factory.getWorkerServiceInstance().remove("0004") );
41 //更新员工信息,将办公室改成厕所(恶搞。。。),此处打印true(更新成功)
42 System.out.println(Factory.getWorkerServiceInstance().update(new Worker("0003","老虎","male","办公室",new Date())) );
43 //获取所有职工的信息
44 list = Factory.getWorkerServiceInstance().getWorkers();
45
46 }catch(Exception e) {
47
48 e.printStackTrace();
49 }
50
51 //迭代输出职工信息
52 Iterator<Worker> ite = list.iterator();
53 while( ite.hasNext() ) {
54
55 System.out.println( ite.next() );
56 }
57
58
59 }
60
61 }
Java实验项目六——使用DAO模式实现对职工表的操作的更多相关文章
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
- Java实验项目三——采用面向对象的方式设计线性表
Program: 采用面向对象的方法设计一个线性表,目的是为其他需要用线性表的应用提供线性表对象. 1.list包中,定义线性表类 1 /* 2 * Description:定义线性表类 3 * 4 ...
- Java实验项目二——二维数组实现九九乘法表
Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法 ...
- JAVA / MySql 编程——第八章 DAO 模式
1. 数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2. 持久化的实现方式:数据库.普通文件.XML文件: 3. JDBC封装: ...
- Java笔记——面向接口编程(DAO模式)
1.DAO模式 DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来.DAO在数据库与业务逻辑(Service)之间. l 实体域,即操作的对象,例如 ...
- java实验项目报告
JAVA课程项目报告 题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200 利用JAVA实现一个时钟的小程序 1 ...
- java设计模式(六) 命令模式
[命令模式]将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作. 1,定义命令接口 package com.pattern.comm ...
- Java实验项目二——打印某年某月日历
Program:打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一), 要 求: (1)编写一个方法判断闰年: (2)编写一个方法判断某年某月有多少天: (3)编写一个方法计算 ...
- Java实验项目三——宠物商店
Program:宠物商店的设计(继承,接口,线性线性表) Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...
随机推荐
- sprintf和snprintf函数
printf()/sprintf()/snprintf()区别 先贴上其函数原型 printf( const char *format, ...) 格式化输出字符串,默认输出到终端-----s ...
- 3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev
3.14 wc:统计文件的行数.单词数或字节数 wc命令用于统计文件的行数.单词数或字节数. -c 统计字节数 -w 统计单词数 -l 统计行数 -L 打印最长行的长度 -m 统计字符数 ...
- ssh远程主机执行命令或脚本
1.执行单一命令 [root@vps ~]# ssh user@192.168.9.243 "pwd; ls; rm -f Cent* ;echo --------; ls"/ho ...
- Jenkins 基础篇-凭证配置
我们在正式开始使用 Jenkins 之前还要先配置一些凭证,这些凭证的作用主要是用于认证,例如我们要从代码仓库拉取代码,就需要用到代码仓库的账号密码或者密钥:我们要登录远程服务器也需要用户名密码或者密 ...
- Step By Step(Lua环境)
Step By Step(Lua环境) Lua将其所有的全局变量保存在一个常规的table中,这个table被称为"环境".它被保存在全局变量_G中. 1. 全局变量声明: ...
- Lua学习高级篇
Lua学习高级篇 之前已经说了很多,我目前的观点还是那样,在嵌入式脚本中,Lua是最优秀.最高效的,如果您有不同的观点,欢迎指正并讨论,切勿吐槽.这个系列完全来自于<Programming in ...
- 自定义pass编写
自定义pass编写 TVM是一个框架,抽象了机器学习加速器的异质性.有时,用户可能需要自定义一些分析和IR转换,使TVM适应自己的专用硬件.本文可帮助用户在TVM中编写自定义pass. 先决条件 ...
- NVIDIA DeepStream 5.0构建智能视频分析应用程序
NVIDIA DeepStream 5.0构建智能视频分析应用程序 无论是要平衡产品分配和优化流量的仓库,工厂流水线检查还是医院管理,要确保员工和护理人员在照顾病人的同时使用个人保护设备(PPE),就 ...
- 《python网络数据采集》笔记2
1.网页表单与登陆窗口 Requests 库擅长处理那些复杂的 HTTP 请求.cookie.header(响应头和请求头)等内容. 1)表单提交 import requests #字段 params ...
- Spring Cloud05: Zuul 服务网关
一.什么是Zuul 服务网关 Zuul 是 Netflix 提供的⼀个开源的 API ⽹关服务器,是客户端和⽹站后端所有请求的中间层,对外开放 ⼀个 API,将所有请求导⼊统⼀的⼊⼝,屏蔽了服务端的具 ...