
通过对上述三层架构的学习,下面大家在上面这个案例的基础之上完成 学生的注册功能,分析:
注册相当于往数据库表中添加一条数据。
注意用代码判断输入的信息是否有误。
过程:

注意:因为是从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.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退出
- }
-
- }