欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

万能的CURD

程序员文章站 2022-06-11 11:14:15
...

今天介绍以下万能的CURD,这个东西要省去好多好多代码

万能的CURD

  • 所谓CURD无非就是一些增删改查了,但是,此CURD非彼CURD,它省去了好多代码,效率上也是提升了不少啊。

/**
   * 使用万能的CURD:进行修改
   * 修改后的返回值是影响的有效行数
   * @param sql:当前的数据库语句
   * @param args:可变数组类型
   */
  public static int curd(String sql,Object...args) {
    Connection conn=null;
    PreparedStatement st=null;
    int result=0;
    conn=JdbcUtil.conn();
    try {
      //当前sql语句
      st=conn.prepareStatement(sql);
      for(int i=0;i<args.length;i++) {
        st.setObject(i+1, args[i]);
      }
      result = st.executeUpdate();
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      JdbcUtil.close(conn, st);
    }
    return result;
  }

在JdbcUtil中写下以上这段代码,他表示一个万能的修改(插入,删除,修改),使用sql语句和可变数组类型作为形式参数,并且使用可变数组中的值代替占位符,使用一个循环搞定。然后接下述代码:

public boolean reg(UserStudent stu) {
    int curd = JdbcUtil.curd("insert into student(sname,num,password,sex,createtime) values(?,?,?,?,?)",stu.getName(),stu.getNum(),stu.getPassword(),stu.getSex(),new Date());
    if(curd>0) {
      return true;
    }
    return false;
  }

这就是数据持久层中的代码,使用它和数据库交互,可见这段代码比之前的curd要简单多了,而且之前的curd删除归删除,修改归修改,代码极为繁琐。

  • 对于查询而言:一般分为两种情况

    1.查询出单条记录。

    2.查询出多条记录。

    对比以下两段代码,是不是后一段比较爽啊

public boolean updatErrorData(int id) {
    Connection conn=null;
    PreparedStatement st = null;
    conn=JdbcUtil.conn();
    try {
      st=conn.prepareStatement("update student set num=num+1,errortime=? where sno=?");
      st.setString(1, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      st.setInt(2, id);
      int update = st.executeUpdate();
      if(update>0) {
        return true;
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      JdbcUtil.close(conn, st);
    }
    return false;
  }
public boolean updatErrorData(int id) { 
    int curd = JdbcUtil.curd("update student set num=num+1,errortime=? where sno=?", new Date(),id);
        if(curd>0) {
            return true;
        }
        return false;
  }

以下是万能查询的代码:

/**
   * 万能查询:
   * 1.使用反射技术获得实体类的对象字段
   * 2.使用list集合装载数据
   * @param <T>
   * @param clazz
   * @param sql
   * @param args
   * @return
   */
  public static <T> List<T> getResult(Class<T> clazz,String sql,Object...args){
    Connection conn=null;
    PreparedStatement st=null;
    ResultSet rs = null;
    T entity=null;
    List<T> list = new ArrayList<T>();
    try {
      st=conn.prepareStatement(sql);
      for(int i=0;i<args.length;i++) {
        st.setObject(i+1, args[i]);
      }
      rs=st.executeQuery();
      //获取数据库的数据源
      ResultSetMetaData dataSource=rs.getMetaData();
      while(rs.next()) {
        entity=clazz.newInstance();
        for(int i=0;i<dataSource.getColumnCount();i++) {
           String columnName = dataSource.getColumnName(i+1);
           Object objectColumnValues = rs.getObject(columnName);
           Field field = clazz.getDeclaredField(columnName);//获得一个私有字段
           field.setAccessible(true);
           field.set(entity, objectColumnValues);//给当前字段赋值
        }
        list.add(entity);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }finally {
      JdbcUtil.close(conn, st, rs);
    }
    return list;
  }