刚刚,改造了下BaseDao……

举报
穆雄雄 发表于 2022/12/12 20:17:52 2022/12/12
【摘要】 今天在上课的时候,带着学生们写底层的jdbc连接数据库并且对数据表进行增删改查,写的那就一个痛苦啊……从创建实体类到写Dao层代码再到表现层的Jsp页面,    写了好久好久……终于写完了!!!其实吧,主要还是DaoImpl层的代码写的太多,代码过于臃肿,反而BaseDao这个“工具类”却写的一点点。于是,这不刚刚就把这个BaseDao改进了一下,将凡是公共可以共用的代码都提到了BaseDa...

今天在上课的时候,带着学生们写底层的jdbc连接数据库并且对数据表进行增删改查,写的那就一个痛苦啊……

从创建实体类到写Dao层代码再到表现层的Jsp页面,    写了好久好久……

终于写完了!!!

其实吧,主要还是DaoImpl层的代码写的太多,代码过于臃肿,反而BaseDao这个“工具类”却写的一点点。

于是,这不刚刚就把这个BaseDao改进了一下,将凡是公共可以共用的代码都提到了BaseDao中,DaoImpl层光写所需要实现的sql语句和对应的参数即可,剩下的任务由BaseDao去执行。

下面是BaseDao的代码:

package org.dao;

import java.sql.*;
import java.util.List;

import com.sun.org.glassfish.external.statistics.annotations.Reset;


/**
 * 
 * @author 24519
 * 连接数据库的工作类
 *
 */
public class BaseDaoNew {
  
  private Connection conn = null;
  private PreparedStatement pre;
  private ResultSet rs;
  //连接数据库
  public Connection getConn(){
    try{
      //加载驱动
      Class.forName("com.mysql.jdbc.Driver");
      //数据库连接字符串
      String url
       = "jdbc:mysql://localhost:3306/schooldb?user=root&password=root";
      //连接数据库
      conn = DriverManager.getConnection(url);
    }catch(Exception ex){
      ex.printStackTrace();
    }
    return conn;
  }
  
  //增删改
  public int ExecuteUpdate(String sql,List params) throws SQLException{
    int rel = 0;
    conn = getConn();
      pre = conn.prepareStatement(sql);
      if(params!=null){
        for(int i = 0;i<params.size();i++){
          pre.setObject(i+1, params.get(i));
        }
      }
      rel = pre.executeUpdate();
    
    return rel;
  }
  
  //查询
  public ResultSet ExecuteQuerty(String sql,List params) throws SQLException{
    conn = getConn();
    pre = conn.prepareStatement(sql);
    if(params!=null){
      for(int i = 0;i<params.size();i++){
        pre.setObject(i+1, params.get(i));
      }
    }
    
    return pre.executeQuery();
    
  }
  
    
    
  
  
  //关闭连接
  public void closeConn(Connection conn,
          PreparedStatement pre,ResultSet rs){
      try {
        if(rs!=null){
          rs.close();
        }
        if(pre!=null){
          pre.close();
        }
        if(conn!=null){
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
    }
    
  }
  
  

}

可以看得出来,我们将连接数据库,增删改、查询以及关闭连接都提取成独立的方法,在Impl层直接调用对应的是方法即可。

@Override
  public Student login(String name, String pass,String info){
    Student student = new Student();
    String sql = "select * from student where sname = ? and spass = ?";
    BaseDaoNew base1 = new BaseDaoNew();
    List<Object> params = new ArrayList<Object>();
    params.add(name);
    params.add(pass);
    try {
      rs = base1.ExecuteQuerty(sql, params);
      while(rs.next()){
        student.setSid(rs.getInt(1));
        student.setSname(rs.getString(2));
        student.setSphone(rs.getString(3));
        student.setSpass(rs.getString(4));
        student.setSaddress(rs.getString(5));
        student.setSage(rs.getInt(6));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally{
      base1.closeConn(conn, pre, rs);
    }
    return student;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。