收集用户输入的数据,并且展示数据,跟用户进行交互
用户输入数据并且选择要实现的功能,是通过业务逻辑层实现的
与数据库进行交互,用户传过来的数据进行数据库查询并且返回给用户。
PersonDaoimpl.java
我们可以看到,拿insert和update来说,这两个功能实现查的不是很多,区别在于sql语句,多了一个占位符仅此而已,其他的步骤一样。 对于增删改来说,有很多相同的内容,出现了重复代码,所以我们可以封装一个工具类,在Dao层中对数据库表的增删改查操作存在重复的部分进行抽取封装DaoUtils工具类实现重复使用。
DaoUtils.java
//DaoUtils.java //增删改通用封装方法 package com.zjh.utils; /* * 封装增删改重复的部分成工具类,实现重复使用。 * * * */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class DaoUtils { public int commonUpdate(String sql,Object... args) { Connection connection = null; PreparedStatement preparedStatement = null; connection = DbUtils.getconnection(); try { preparedStatement = connection.prepareStatement(sql); // preparedStatement.setObject(index,value); if (int i =0;i<args.length;i++){ preparedStatement.setObject(i+1,args[i]); } int result = preparedStatement.executeUpdate(); return result; } catch (SQLException e) { e.printStackTrace(); }finally { DbUtils.closeAll(null,preparedStatement,null); } return 0; } }
//查询通用封装方法
//DaoUtils.java public List<Object> commonSelect(String sql, RowMapper rowMapper,Object... args){ Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; List<Object> list = new ArrayList<>(); connection = DbUtils.getconnection(); try { preparedStatement = connection.prepareStatement(sql); for(int i = 1;i<args.length;i++){ preparedStatement.setObject(i+1,args[i]); } resultSet = preparedStatement.executeQuery(); while(resultSet.next()){ //如何根据查询结果完成ORM,如何进行对象的创建与赋值 Object object = rowMapper.getRow(resultSet);//回调 --> 调用者提供的一个封装方法ORM 需要创建一个接口 list.add(object); return list; } } catch (SQLException throwables) { throwables.printStackTrace(); } } //调用grtRow()方法定义了一个接口 //RowMapper.java package com.zjh.advanced; import java.sql.ResultSet; public interface RowMapper { public Object getRow(ResultSet resultSet); }