三层架构及实例

12 篇文章 0 订阅
8 篇文章 0 订阅

思维导图:

 实例测试

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

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

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

过程:

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

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

 更改后:

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

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

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

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

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

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

修改前: 

 ​​​​

 修改后:

 终于成啦!

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

再次测试:

DAO层:

 @Override
    public Student updateMsg(Student student) throws SQLException {
        Connection conn = JDBCUtils.getConnection();  //创建连接对象,获取数据库连接
        //定义sql
        try {
            conn.setAutoCommit(false);  //开启事务
            String sql = "UPDATE student SET  `name` = ? ,sex = ? , age = ? , `password` = ?  WHERE `id` = ? ";
            template.update(sql, student.getName(), student.getSex(), student.getAge(), student.getPassword(), student.getId());
            String sql2 = "select * from student where `id`= ?";
            Student stu2 = template.queryForObject(sql2, new BeanPropertyRowMapper<Student>(Student.class), student.getId());
            //若没有异常,则提交事务
            conn.commit();
            return stu2;
        } catch (Exception e) {
            e.printStackTrace();
            //若有异常,则回滚事务
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }return null;
}

View层

 //修改测试2
    @Test
    public void update() throws SQLException {
        System.out.println("***修改界面***");
        System.out.println("请输入要修改的学生id:");
        int id = TSUtils.ageStock();
        System.out.println("请输入修改后的学生姓名name:");
        String name = TSUtils.readKeyBoard(15, false);
        System.out.println("请输入修改后的学生性别sex:");
        String sex = TSUtils.readKeySex(1);
        System.out.println("请输入修改后的学生年龄age:");
        int age = TSUtils.ageStock();
        System.out.println("请输入修改后的学生密码password:");
        String password = TSUtils.readKeyBoard(6, false);
        //2.调用方法
        studentService.updateMsgStu(id,name,sex,age,password);
        //成功
        System.out.println("修改成功!");

        System.out.println("退出");
        System.out.print("确认是否退出(Y/N):");
        if (TSUtils.readConfirmSelection() == 'Y' || TSUtils.readConfirmSelection() == 'y') {
            System.out.println("您已成功退出,谢谢使用!");
            System.exit(0);  //JVM退出
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值