文章目录
JavaWeb-书城项目总结
这是web的项目结构,目前还没利用到框架,开发流程就是:
在数据库内创建需要的对象对应的表
如图分为储存:
- 书信息:每本书的名字,作者,价钱等属性
- 订单信息:订单生成的时间,订单号,订单金额,订单项(哪些书)
- 订单项信息:和书的属性差不多,多了一个订单号的标识,表示属于哪个订单
- 用户信息:用户名和密码
建立Bean对象
在web项目下建立pojo类,建立由表格转换成的javabean对象,也就是java的属性对应表格的属性
这里购物车的Cart我们没有创建数据库表,是因为我们存放在Session域中,不用存放在数据库内,作为临时存放的数据
建立Jdbc.Util工具类
方便Dao层后续连接数据库
我们利用了druil类工具
建立BaseDao类
这个类是后面建立各种Dao可以继承的一个工具性质的类对象,通用
public abstract class BaseDao {
//使用DbUtils操作数据库
private QueryRunner queryRunner = new QueryRunner();
//用来执行 Insert/Update/Delete语句
public int update(String sql,Object ... args){
Connection connection = JdbcUtils.getConnection();
try {
//连接对象,sql语句,占位符数据值
return queryRunner.update(connection,sql,args);
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new RuntimeException(throwables);
}
}
/**
* 查询返回一个javaBean的sql语句
* @param type 返回的对象类型
* @param sql 执行的sql语句
* @param args 占位符数据值
* @param <T> 返回的类型值
* @return
*/
public <T> T queryForOne(Class<T> type,String sql,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanHandler<T>(type),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new RuntimeException(throwables);
}
}
/**
* 查询返回多个javaBean的sql语句
* @param type 返回的对象类型
* @param sql 执行的sql语句
* @param args 占位符数据值
* @param <T> 返回的类型值
* @return
*/
public <T> List<T> queryForList(Class<T> type, String sql, Object ... args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanListHandler<T>(type),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new RuntimeException(throwables);
}
}
/**
* 执行返回一行一列的sql语句
* @param sql sql语句
* @param args 占位符数据值
* @return 对应的参数值
*/
public Object queryForSingleValue(String sql,Object... args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new ScalarHandler(),args);
} catch (SQLException throwables) {
throwables.printStackTrace();
throw new RuntimeException(throwables);
}
}
}
建立操作各个数据库表格数据的Dao层代码
先建立接口,然后建立实现类实现接口方法
建立各个功能的Service,实现对各个Dao对象的功能调用
建立各个功能的Servlet程序,实现对Service的方法调用
BaseServlet是工具Servlet,利用反射功能使得复用doget方法,后面的servlet都直接继承BaseServlet即可,代码如下:
public abstract class BaseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String action = req.getParameter("action"); //获取隐藏域对象的值,处理不同的请求
try {
//通过获取到的方法名称反射获取到java类方法
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
//激活类方法,传入运行的对象和参数
method.invoke(this,req,resp);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e); //抛给过滤器
}
}
}
加入Filter优化
ManagerFilter实现对每个页面进行权限判断
TranSactionFliter实现对每个操作进行事务管理,出错即回滚事务
项目需要的jar包
开发功能实现的流程图
分页功能:
找到价格区间的书:
订单功能: