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:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...
随机推荐
- win7 32位系统 安装node.js最新版本遇到的问题
win7 32位是安装不了10.0以上版本的node.js的 ,因为10.0以上版本的node.js已经不对win7 32位的电脑进行维护更新了,如果你的电脑是win7 32位系统的话,只能下载安 ...
- [leetcode] 38. 报数(Java)(字符串处理)
38. 报数 水题 class Solution { public String next(String num) { String ans = ""; int i = 0; wh ...
- SOLO: 按位置分割对象
SOLO: 按位置分割对象 SOLO: Segmenting Objectsby Locations 论文链接: https://arxiv.org/pdf/1912.04488.pdf 代码链接: ...
- 在cuDNN中简化Tensor Ops
在cuDNN中简化Tensor Ops 在Tesla V100 GPU中引入神经网络模型以来,神经网络模型已迅速利用NVIDIA Tensor Cores进行深度学习.例如,基于Tensor Core ...
- 35 张图带你 MySQL 调优
这是 MySQL 基础系列的第四篇文章,之前的三篇文章见如下链接 138 张图带你 MySQL 入门 47 张图带你 MySQL 进阶!!! 炸裂!MySQL 82 张图带你飞 一般传统互联网公司很少 ...
- mongodb的ObjectId最后三个字节有趣的地方
ObjectId 由12个字节组成,其中组成如下: a 4-byte timestamp value, representing the ObjectId's creation, measured i ...
- STS或eclipse中导入新项目出现红色感叹号红色叉叉的问题
maven项目 原因: jar包缺失 没有正确配置Maven仓库 解决: Window->Preferences->Maven->Installations->Add 添加你的 ...
- 【SQLite】教程06-SQLite表操作
创建表: CREATE TABLE 语句用于在任何给定的数据库创建一个新表.命名表.定义列.定义每一列的数据类型 查看表: 详细查看表: 重命名表: 删除表: 创建表并添加7条记录(第七条记录用了第二 ...
- 不使用synchronized和lock,如何实现一个线程安全的单例
单例,大家肯定都不陌生,这是Java中很重要的一个设计模式.稍微了解一点单例的朋友也都知道实现单例是要考虑并发问题的,一般情况下,我们都会使用synchronized来保证线程安全. 那么,如果有这样 ...
- iNeuOS工业互联网平台,在高校教学实训领域的应用
目 录 1. 概述... 2 2. 实训柜... 2 3. 培训内容... 4 4. 二次开发培训... 5 1. 概述 中国工业互联网从 0 ...