回顾

  1. package orm.test;
  2. import java.sql.*;
  3. public class test {
  4. public static void main(String[] args) throws Exception {
  5. // 1.导包
  6. // 2.加载类驱动
  7. Class.forName("com.mysql.jdbc.Driver");
  8. // 3.获取连接
  9. String Host = "jdbc:mysql://bj-cdb-547s28hs.sql.tencentcdb.com:60439/test?useSSL=false";
  10. String user = "root";
  11. String password = "qq2653650997";
  12. Connection conn = DriverManager.getConnection(Host, user, password);
  13. // 4.创建状态参数
  14. // String sql = "insert into atm values (?,?,?)";
  15. String sql = "select * from atm";
  16. PreparedStatement pstat = conn.prepareStatement(sql);
  17. // 5.执行操作
  18. // pstat.setString(1,"李四");
  19. // pstat.setString(2,"123");
  20. // pstat.setFloat(3,700);
  21. // 增加数据
  22. // int count = pstat.executeUpdate();
  23. // 查询数据
  24. ResultSet resultSet = pstat.executeQuery(sql);
  25. while (resultSet.next()){
  26. String aname = resultSet.getString("aname");
  27. String apass = resultSet.getString("apassword");
  28. Float abalance = resultSet.getFloat("abalance");
  29. System.out.println(aname+"的银行密码是"+apass+",在银行存了"+abalance+"元");
  30. }
  31. // System.out.println(count+"行受到影响");
  32. // 6.关闭资源
  33. pstat.close();
  34. conn.close();
  35. }
  36. }

缺点:通过上述代码可以看出,每当我们需要更新(查询)数据时都需要重新书写一遍”JDBC流程”,这样在日常开发中,会造成代码冗余,可读性不强。也不符合MVC的分层架构思想。 改进:通过封装来实现”JDBC”的复用使代码可读性增强,减少代码的冗余。

第一次优化

  1. package orm.dao;
  2. import orm.domain.Atm;
  3. import java.sql.*;
  4. public class AtmDao {
  5. private String className = "com.mysql.jdbc.Driver";
  6. private String Host = "";
  7. private String user = "";
  8. private String password = "";
  9. // 查询数据
  10. public Atm selectOne(String aname) {
  11. Atm atm = null;
  12. try {
  13. Class.forName(className);
  14. Connection conn = DriverManager.getConnection(Host, user, password);
  15. String sql = "select * from atm";
  16. PreparedStatement pstat = conn.prepareStatement(sql);
  17. // 查询数据
  18. ResultSet resultSet = pstat.executeQuery(sql);
  19. while (resultSet.next()) {
  20. atm = new Atm();
  21. atm.setAname(resultSet.getString("aname"));
  22. atm.setApassword(resultSet.getString("apassword"));
  23. }
  24. resultSet.close();
  25. pstat.close();
  26. conn.close();
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. return atm;
  31. }
  32. // 更新数据
  33. public void update(Atm atm) {
  34. try {
  35. Class.forName(className);
  36. Connection conn = DriverManager.getConnection(Host, user, password);
  37. String sql = "update atm set apassword = ?,abalance = ? where aname = ?";
  38. PreparedStatement pstat = conn.prepareStatement(sql);
  39. pstat.setString(1, atm.getApassword());
  40. pstat.setFloat(2, atm.getAbalance());
  41. pstat.setString(3, atm.getAname());
  42. pstat.executeUpdate();
  43. pstat.close();
  44. conn.close();
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. // 新增数据
  50. public void insert(Atm atm) {
  51. try {
  52. Class.forName(className);
  53. Connection conn = DriverManager.getConnection(Host, user, password);
  54. String sql = "insert into atm values (?,?,?)";
  55. PreparedStatement pstat = conn.prepareStatement(sql);
  56. pstat.setString(1, atm.getAname());
  57. pstat.setString(2, atm.getApassword());
  58. pstat.setFloat(3, atm.getAbalance());
  59. pstat.executeUpdate();
  60. pstat.close();
  61. conn.close();
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. // 删除数据
  67. public void cancle(String aname) {
  68. try {
  69. Class.forName(className);
  70. Connection conn = DriverManager.getConnection(Host, user, password);
  71. String sql = "delete from atm where aname = ?";
  72. PreparedStatement pstat = conn.prepareStatement(sql);
  73. pstat.setString(1, aname);
  74. pstat.executeUpdate();
  75. pstat.close();
  76. conn.close();
  77. } catch (Exception e) {
  78. e.printStackTrace();
  79. }
  80. }
  81. }
  1. public class AtmService {
  2. private AtmDao dao = new AtmDao();
  3. // 登陆
  4. public String login(String aname,String apassword){
  5. // 1.读取数据库
  6. Atm atm = dao.selectOne(aname);
  7. // 2.判断
  8. if (atm!=null && atm.getApassword().equals(apassword)){
  9. return "登陆成功";
  10. }
  11. else {
  12. return "账号或密码输入错误";
  13. }
  14. }
  15. // 查询
  16. public Float query(String aname){
  17. return dao.selectOne(aname).getAbalance();
  18. }
  19. // 存款
  20. public void deposit(String aname,Float money){
  21. Atm atm = dao.selectOne(aname);
  22. atm.setAbalance(atm.getAbalance() + money);
  23. dao.update(atm);
  24. }
  25. // 开户
  26. public void create(String aname,String apassword,Float abalance){
  27. Atm atm = new Atm(aname,apassword,abalance);
  28. }
  29. // 销户
  30. public void cancel(String anane){
  31. dao.cancle(anane);
  32. }
  33. // 取款,转账(参考存款)
  34. }

第一次更新总结: service:每一个业务方法都不一样,对应着一个具体的逻辑(比较,计算,判断) dao:dao中的方法都是对数据库中的数据进行增删改查(JDBC+SQL),也看出了dao中的方法大部分一样,存在冗余

第二次优化