万能的CURD

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

2825c0d1b803b0912065542a6b20121c.gif

  • 所谓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;
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值