• 三层架构的学习和实例


    思维导图:

     实例测试

    通过对上述三层架构的学习,下面大家在上面这个案例的基础之上完成 学生的注册功能,分析:

    1. 注册相当于往数据库表中添加一条数据。

    2. 注意用代码判断输入的信息是否有误。

    过程:

    一、根据实体类属性创建学生表student并添加数据

    注意:因为是从jdbc库下创建的表,所以配置文件的url要改,password不同也要改

     更改后:

    可以看到展示层UI缺少对应的方法,添加注册方法

    业务逻辑层BLL也没有对应方法

     数据访问层添加注册方法:

    在数据访问层中将对数据库表进行操作的方法写在接口 StudentDao 中,然后通过实现类 StudentImpl 写具体操作数据库表的逻辑代码。

     先将需要用到的方法都封装好,不写方法的实现,用到某一个方法,写这个方法的具体实现。这里我们要做的是学生注册,所以我们封装了注册方法 register ,接下来我们分析:注册肯定需要学生先输入id、name、sex、age、password,有了这些信息后之后去数据库表中添加对应的数据。经过分析我们知道方法的参数就是 以上信息 ,返回值就是这个学生 Student。

    方法的具体实现,就是通过sql语句对数据库表进行操作,都是固定的模板,通过 JDBCTemplate模板 调用实现的方法即可。

    修改前: 

     ​​​​

     修改后:

     终于成啦!

    因为涉及了两个sql语句,还要考虑事务,不光是预防事务的并发问题,还要保证事务的一致性,要么同时发生,要么同时失败

    再次测试:

    DAO层

    1. @Override
    2. public Student updateMsg(Student student) throws SQLException {
    3. Connection conn = JDBCUtils.getConnection(); //创建连接对象,获取数据库连接
    4. //定义sql
    5. try {
    6. conn.setAutoCommit(false); //开启事务
    7. String sql = "UPDATE student SET `name` = ? ,sex = ? , age = ? , `password` = ? WHERE `id` = ? ";
    8. template.update(sql, student.getName(), student.getSex(), student.getAge(), student.getPassword(), student.getId());
    9. String sql2 = "select * from student where `id`= ?";
    10. Student stu2 = template.queryForObject(sql2, new BeanPropertyRowMapper(Student.class), student.getId());
    11. //若没有异常,则提交事务
    12. conn.commit();
    13. return stu2;
    14. } catch (Exception e) {
    15. e.printStackTrace();
    16. //若有异常,则回滚事务
    17. try {
    18. conn.rollback();
    19. } catch (SQLException e1) {
    20. e1.printStackTrace();
    21. }
    22. }return null;
    23. }

    View层

    1. //修改测试2
    2. @Test
    3. public void update() throws SQLException {
    4. System.out.println("***修改界面***");
    5. System.out.println("请输入要修改的学生id:");
    6. int id = TSUtils.ageStock();
    7. System.out.println("请输入修改后的学生姓名name:");
    8. String name = TSUtils.readKeyBoard(15, false);
    9. System.out.println("请输入修改后的学生性别sex:");
    10. String sex = TSUtils.readKeySex(1);
    11. System.out.println("请输入修改后的学生年龄age:");
    12. int age = TSUtils.ageStock();
    13. System.out.println("请输入修改后的学生密码password:");
    14. String password = TSUtils.readKeyBoard(6, false);
    15. //2.调用方法
    16. studentService.updateMsgStu(id,name,sex,age,password);
    17. //成功
    18. System.out.println("修改成功!");
    19. System.out.println("退出");
    20. System.out.print("确认是否退出(Y/N):");
    21. if (TSUtils.readConfirmSelection() == 'Y' || TSUtils.readConfirmSelection() == 'y') {
    22. System.out.println("您已成功退出,谢谢使用!");
    23. System.exit(0); //JVM退出
    24. }
    25. }

  • 相关阅读:
    go中bson的基本操作,bson.M,bson.D,bson.A,bson.E
    二叉树的先,中,后序遍历
    设计LRU缓存(双向链表+哈希表)
    java计算机毕业设计基于springboo+vue的大学生论坛交流互动系统
    20231106给cv180zb刷机的LOG
    C++PrimerPlus(第6版)中文版:Chapter13.3多态共有继承例子(重点讲虚函数):usebrass2.cpp
    安全多方学习开源框架调研
    JVM堆空间详解
    day-3-4-2
    动态规划题目记录
  • 原文地址:https://blog.csdn.net/clover_oreo/article/details/127075603