Day42
今日主要内容:
- 用类封装数据
- properties配置文件,通过读取配置文件获取其驱动,数据库的url,user,password;
- sql注入问题 通过预编译解决,并且省区拼接字符串的操作,而是改成了?,通过设置索引属性为?赋值
- 综合案例:银行添加账户,转账功能(提及事务有关操作)
综合案例步骤:
-
-
-
-
放封装
-
-
AccountDao接口
- 增删改查 根据卡号,根据用户名查询
-
实现类,实现接口
- 连接,预编译...
- 删除里面加入事务管理 关闭自动提交事务,手动提交出异常 回滚,无异常 提交;
-
-
添加账户
- 用户名必须存在 查询数据库,有返回结果代表存在 存在不能再添加
- 必须设置密码 不为空,不能传空字符串
-
转账
- 参数 from从哪个人身上转出去 to转到谁身上 money转多少钱
- 首先 from和to必须存在,根据用户名查询就可以了
- 用户余额是否足够
- 一方扣钱,一方加钱
- 写更新方法 password money 根据用户名更新
-
-
测试添加
- 测试转账
事务:
关于事务
按照单一职责来说需要写在DAO中
但是业务中会执行多次DAO,并且异常可能发生在service中,也就是说DAO无法知道发生异常了
如果DAO不知道发生异常,就不回滚事务
而且下面还有更多的DAO操作,他们需要在一个事务中
我们发现,如果把事务写在DAO中,再一个业务中多次调用DAO的时候会产生多个事务,会导致业务结果不一致
按照我们的需求,多个DAO操作需要在一个事务中,发现需要在DAO操作之前开启事务,在执行之后提交事务,那就意为着我们需要把事务代码写在service中
这样就打破了单一职责要求
如何解决?未完待续...
idea注释//TODO,高亮,快捷键alt+6快速定位
回顾综合案例步骤:
- 加入依赖包lib
- 写配置文件properties
- 编写工具类,工具类读取配置文件,获得连接,关闭资源
- 对于类的封装(idea自动生成 pojo)
- 写接口,写接口实现类(dao)
- 写服务,要实现的业务(service)
- 写测试类,开始测试
各个层完成什么样的工作:
- utils层: 存放工具类,封装了可重用的一些代码,如:读取配置文件,获得数据库连接,关闭资源等....
- pojo(简单的java对象)层: 放一些封装类(数据库里的一些字段,这些私有的参数作为对象的属性,还有get-set方法等,是一个简单普通的java对象)
- dao(数据访问对象)层: 接口,接口实现
- service(服务)层: 放一些业务,处理pojo对象,进行事务管理
- test(测试)层: 用于测试功能

浙公网安备 33010602011771号