本来觉得还差一点点,结果 15 个小时了还没有弄完,说好的不熬夜的呢???!!!
一个破超市的项目,废了我这么长时间,搞什么飞机啊?!!!
喝了 6 罐 '乐虎' 了,这是我的常态吗?想做一个不熬夜的程序员,真的这么难吗?
每一个模块都是那么的墨迹,到处报错,我觉得吧,我不是前台弱,是前台和中间那块就是 servlet 比较弱,jQuery 好一点了,el 表达式 ajax,json,好难过的。
java 到数据库这边是我最熟练的,而且也比较好写,主要是分层开发嘛,从下往上写呗,sql 现在也不是那么的难了。主要就是 servlet,我的痛!!!
小豆腐年前就让我写的,本打算看完视频再写,可是年后回来,又搞了框架,一拖再拖,现在是该还旧账的时候了,没办法,自己欠下的。上周身体确实不适,感觉没有那么多精力,总是累,我觉得我保养的还行啊,就是睡眠少了点。
还差两个模块呢,sl 会员商城还没写呢,娜女士都写的差不多了吧,好气人啊!!!
项目笔记
- ==========================系统功能============================
- 登录 退出
- 用户管理
- 修改密码
- 添加用户
- 修改用户
- 删除用户
- 查看用户
- 供应商管理
- 添加供应商
- 修改供应商
- 删除供应商
- 查看供应商
- 账单管理
- 添加账单
- 修改账单
- 删除账单
- 查看账单
- ==========================数据库设计============================
- 用户表:
- 主键ID
- 用户账号(用户编码)
- 用户密码
- 用户名
- 性别(1 男 2 女)
- 出生日期
- 用户电话
- 用户地址
- 用户类型(1 系统管理员 2 经理 3 普通员工)
- 创建时间
- 创建者(userId)
- 更新时间
- 更新者(userId)
- 供应商表:
- 主键ID
- 供应商编码
- 供应商名称
- 供应商描述
- 供应商联系人
- 联系电话
- 地址
- 传真
- 创建时间
- 创建者(userId)
- 更新时间
- 更新者(userId)
- 账单表:
- 主键ID
- 账单编码
- 商品名称
- 商品描述
- 商品单位
- 商品数量
- 总金额
- 供应商(providerID)
- 是否付款(1 未支付 2 已支付)
- 创建时间
- 创建者(userId)
- 更新时间
- 更新者(userId)
- decimal(20,2)
- 12.668 12.67
- 12.248 12.24
- BigDecimal 12.248 12.24 12.66
- ==========================系统框架搭建============================
- (java开发环境/运行时环境)bildpath 要高于或者等于 Compliler(编译时环境)
- 修改字符集
- MVC:
- jsp
- servlet
- jdbc
- mysql
- 事务:3张表 1 insert 2 update 3 detele
- ------------------------src-------------------------
- pojo:数据实体(完成与数据库表的映射)
- dao:数据访问接口(与数据库操作)
- service:业务逻辑层(处理业务逻辑,调用dao接口)--- 事务控制是跟业务相关,只有复杂的业务才有事务控制
- servlet:控制层 (control)
- ------------------------webroot-------------------------
- jsp:数据展示(view)
- js images CSS (静态资源文件)
- ======单例======:运行期间有且仅有一个实例
- 关键点:
- 1、一个类只有一个实例---最基本的---(只提供私有的构造器)
- 2、它必须自行创建这个实例---(定义了静态的该类的私有对象)
- 3、它必须自行向整个系统提供这个实例 -----(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象)
- lazy loading 延迟加载
- 以时间换空间
- 懒汉模式:(线程不安全--1、同步 2、双重校验锁)
- 比较懒,在类加载的时候,不创建实例,运行调用的时候创建。
- 类加载快,在运行时获取对象速度慢
- 以空间换时间
- 饿汉模式:(线程安全)
- 类加载的时候,就完成了初始化。所以类加载慢,但是在运行时获取对象
- 静态内部类(保证了lazy loading的特性)
- 方法的重载体现了面向对象多态的思想
- =================JDBC=================
- 1、service (try catch)
- connection.setAutoCommit(false);
- dao.add()...update()...delete()
- connection.commit();
- connection.rollback();
- close(connection、null、null);
- 2、dao(throws Exception)
- executeUpdate()......
- close(null、prepareStatement、resultSet)
- 3、BaseDao(操作数据库的基类)静态类
- 获取连接(connection)throws Exception
- 查询操作(sql、params、connection、prepareStatement、resultSet)
- 更新操作(sql、params、connection、prepareStatement)
- 关闭资源(connection、prepareStatement、resultSet)
- ====页面结构
- css
- html
- js
- ===登录、注销、查询====
- ===用户管理----增加用户======
- 修改,查看,删除
- 修改,查看====根据ID 获取ID 获取user信息(getUserInfoById)
- 保存修改信息
- dao service
- =====修改密码=====
- 1、验证旧密码是否正确(输入的旧密码和当前用户的密码)--ajax
- 2、保存新密码(数据库)--form
- ====供应商管理=====
- dao================================//1 增加供应商
- booleanadd(Connection connection, Provider provider)throws Exception
- //2 修改供应商
- booleanmodify(Connection connection, Provider provider)throws Exception;
- //3 删除供应商
- booleandeleteProviderById(Connection connection, String delId)throws Exception;
- delete from smbms_provider where id=
- 扩展:如果根据供应商类型进行批量删除的话
- booleandeleteProviderByProType(Connection connection, String proType)throws Exception;
- delete from smbms_provider where proType=//封装的删除方法
- deleteProvider (Connection connection, Provider provider)
- sql语句要进行拼接
- StringBuffer sql=new StringBuffer();
- sql.append("delete from smbms_provider");
- if(!StringUtils.isNULLorEmpty(provider.getId())){
- sql.append(" where id=?");
- }else if(!StringUtils.isNULLorEmpty(provider.getProType())){
- sql.append(" where proType=?");
- }
- 如果并存的情况
- if(!StringUtils.isNULLorEmpty(provider.getId())){
- sql.append(" where id=?");
- }
- if(!StringUtils.isNULLorEmpty(provider.getProType())){
- sql.append(" where proType=?");
- }
- 。。。。。。。
- userService.deleteProvider(Provider provider);
- //根据ID删除provider.setId("2")
- //根据供应商类别删除provider.setProType("3")
- //4 获取供应商列表List getProviderList(Connection connection,String proName)throws Exception;
- select * from smbms_provider where proName= like
- List getProviderList(Connection connection,Provider provider)throws Exception;
- select * from smbms_provider where proName= like and...and...
- 原则:
- 凡是需要用户输入的查询都是模糊查询,凡是需要用户选择的查询都是精确查询(传到后台的是id)
- //5 根据ID获取供应商详细信息Provider getProviderById(Connection connection, String id)throws Exception;
- ====订单管理======//增加订单
- booleanadd(Connection connection, Bill bill)throws Exception;
- //修改订单
一定要搞完!!!!
来源: http://www.cnblogs.com/xtdxs/p/6687274.html