项目代码重构
本专栏为系列文章,如果想要系统学习JDBC,作者建议从第一篇文章,顺序读完全部文章。
文中项目源码地址:https://github.com/bethanwang/jdbc-study
新建App类作为程序的启动类(main方法),通过分包实现代码分层:view、service、dao、db、model。
1. 调整代码结构
重构前代码结构:
现在代码结构比较混乱,全部的类都平铺在同一个包里面,如果项目功能越多,这个包里面的类就越多,最后就没法看啦,所以需要重构代码。
结合MVC模式,将系统中代码分为几个层次:显示层,业务处理层,数据访问层;再结合各种类的作用,将其放到不同的包:view、service、dao、db、model,增加service层主要用于处理复杂业务流程和事务,新建程序启动类App.java
放到包com.study.cs.demo
下。
重构后代码结构:
com.study.cs.demo.service.StudentService
类:
package com.study.cs.demo.service;
import com.study.cs.demo.model.Student;
import java.util.List;
public interface StudentService {
/**
* 根据学生姓名查找学生列表
* @return
*/
List<Student> queryByName(String name);
}
com.study.cs.demo.service.impl.StudentServiceImpl
类:
package com.study.cs.demo.service.impl;
import com.study.cs.demo.dao.StudentDao;
import com.study.cs.demo.db.DBUtil;
import com.study.cs.demo.model.Student;
import com.study.cs.demo.service.StudentService;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
public class StudentServiceImpl implements StudentService {
@Override
public List<Student> queryByName(String name) {
List<Student> list = new ArrayList<Student>();
try {
list = stuDao.query(name);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public StudentServiceImpl() {
conn = DBUtil.getInstance().getConnection();
stuDao = new StudentDao(conn);
}
private StudentDao stuDao;
private Connection conn;
}
运行App
中的main
方法,验证程序可以执行。
2. 提取BasicDao
利用
commons-dbutils
工具包,封装BasicDao
基类,将公共的数据库访问方法封装到BasicDao
类中。
-
添加
Maven
依赖。在
pom
增加配置:<dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency>
-
编写
BasicDao
类,将一些通用的数据库访问的封装其中,对应的具体model
类,以泛型方式传给被调用的方法,其他具体dao
类继承BasicDao
。com.study.cs.demo.dao.BasicDao
类:package com.study.cs.demo.dao; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import java.sql.Connection; import java.util.List; public abstract class BasicDao<T> { /** * 查询 * @param sql * @param params * @param clazz * @return * @throws Exception */ public List<T> query(String sql, Object[] params, Class<T> clazz) throws Exception { QueryRunner runner = new QueryRunner(); List<T> list = runner.query(conn, sql, new BeanListHandler<T>(clazz), params); return list; } /** * 更新数据库,写操作,包含:update, insert, delete * @param sql * @param params * @return * @throws Exception */ public boolean update(String sql, Object[] params) throws Exception { QueryRunner runner = new QueryRunner(); int cou = runner.update(conn, sql, params); if (cou > 0) { return true; } else { return false; } } /** * 批量更新,批量对数据库写操作 * @param sql * @param params * @return * @throws Exception */ public boolean updateBatch(String sql, Object[][] params) throws Exception { QueryRunner runner = new QueryRunner(); int cou = runner.batch(sql, params).length; if (cou > 0) { return true; } else { return false; } } public BasicDao(Connection connection){ this.conn = connection; } private Connection conn; }
上一篇:实现动态窗口——新建DBUtil类
下一篇:jdbc中使用Properties配置数据库链接
受作者水平限制,文中难免有不足之处,若读者阅读过程中发现问题,还望及时指正,感谢支持!
作者邮箱:547317812@qq.com