Day42

今日主要内容:

  1. 用类封装数据
  2. properties配置文件,通过读取配置文件获取其驱动,数据库的url,user,password;
  3. sql注入问题 通过预编译解决,并且省区拼接字符串的操作,而是改成了?,通过设置索引属性为?赋值
  4. 综合案例:银行添加账户,转账功能(提及事务有关操作)

综合案例步骤:

    • 放封装

    • AccountDao接口

      • 增删改查 根据卡号,根据用户名查询
    • 实现类,实现接口

      • 连接,预编译...
      • 删除里面加入事务管理 关闭自动提交事务,手动提交出异常 回滚,无异常 提交;
    • 添加账户

      • 用户名必须存在 查询数据库,有返回结果代表存在 存在不能再添加
      • 必须设置密码 不为空,不能传空字符串
    • 转账

      • 参数 from从哪个人身上转出去 to转到谁身上 money转多少钱
      • 首先 from和to必须存在,根据用户名查询就可以了
      • 用户余额是否足够
      • 一方扣钱,一方加钱
      • 写更新方法 password money 根据用户名更新
  • 测试添加

    • 测试转账

事务:

关于事务

按照单一职责来说需要写在DAO中

但是业务中会执行多次DAO,并且异常可能发生在service中,也就是说DAO无法知道发生异常了

如果DAO不知道发生异常,就不回滚事务

而且下面还有更多的DAO操作,他们需要在一个事务中

我们发现,如果把事务写在DAO中,再一个业务中多次调用DAO的时候会产生多个事务,会导致业务结果不一致

按照我们的需求,多个DAO操作需要在一个事务中,发现需要在DAO操作之前开启事务,在执行之后提交事务,那就意为着我们需要把事务代码写在service中

这样就打破了单一职责要求

如何解决?未完待续...

idea注释//TODO,高亮,快捷键alt+6快速定位

回顾综合案例步骤:

  1. 加入依赖包lib
  2. 写配置文件properties
  3. 编写工具类,工具类读取配置文件,获得连接,关闭资源
  4. 对于类的封装(idea自动生成 pojo)
  5. 写接口,写接口实现类(dao)
  6. 写服务,要实现的业务(service)
  7. 写测试类,开始测试

各个层完成什么样的工作:

  • utils层: 存放工具类,封装了可重用的一些代码,如:读取配置文件,获得数据库连接,关闭资源等....
  • pojo(简单的java对象)层: 放一些封装类(数据库里的一些字段,这些私有的参数作为对象的属性,还有get-set方法等,是一个简单普通的java对象)
  • dao(数据访问对象)层: 接口,接口实现
  • service(服务)层: 放一些业务,处理pojo对象,进行事务管理
  • test(测试)层: 用于测试功能
posted @ 2021-08-22 22:26  CN_Darren  阅读(37)  评论(0)    收藏  举报