• JDBC(七)—— Dao层操作


    dao层操作

    BaseDao基本增删改查

    package com.why.dao;

    import com.why.entity.User;
    import com.why.utils.JdbcUtils;

    import java.lang.reflect.Field;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;

    /**
    * @Description TODO 封装针对于数据表的通用操作
    * @Author why
    * @Date 2020/10/14 9:08
    * Version 1.0
    **/
    public abstract class BaseDao {

       /**
        * 通用的更新操作,增删改,不支持事务
        * @param sql
        * @param args
        */
       public void update(String sql,Object ...args) {
           Connection conn = null;
           PreparedStatement ps = null;
           try {
               //1.获取连接
               conn = JdbcUtils.getConnection();
               //2.预编译sql语句,返回preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               //sql占位符的个数与可变形参的长度相同,可变形参相当于一个数组
               for (int i = 0; i < args.length ; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行
               ps.execute();
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.资源关闭
               JdbcUtils.closeResource(conn,ps);
          }
      }

       /**
        * 支持事务的增删改操作
        * @param conn
        * @param sql
        * @param args
        */
       public int update(Connection conn,String sql,Object ...args){
           PreparedStatement ps = null;
           try {
               //2.预编译sql语句,返回preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               //sql占位符的个数与可变形参的长度相同,可变形参相当于一个数组
               for (int i = 0; i < args.length ; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行
               return ps.executeUpdate();
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.资源关闭
               JdbcUtils.closeResource(null,ps);
          }
           return 0;
      }

       /**
        * 通用查询不支持事务
        * @param clazz
        * @param sql
        * @param args
        * @param <T>
        * @return
        */
       public <T>T queryForDifference(Class<T> clazz, String sql, Object ...args) {
           Connection conn = null;
           PreparedStatement ps = null;
           ResultSet rs = null;
           try {
               //1.获取链接
               conn = JdbcUtils.getConnection();

               //2.预编译sql语句,获取preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               for (int i = 0; i < args.length; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行,获取结果集
               rs = ps.executeQuery();
               //4.1获取结果集元数据
               ResultSetMetaData rsmd = rs.getMetaData();
               //4.2通过元数据获取列数
               int columnCount = rsmd.getColumnCount();
               //4.3判断是否有数据
               if (rs.next()){
                   //4.3.1实例化一个对象,反射
                   T t = clazz.getDeclaredConstructor().newInstance();
                   //4.3.2处理结果集一行数据的每一列
                   for (int i = 0; i < columnCount; i++) {
                       //获取列值
                       Object columnValue = rs.getObject(i + 1);
                       //获取列的别名
                       String columnName = rsmd.getColumnLabel(i+1);
                       //给对象指定的属性赋值为columnValue
                       Field field = clazz.getDeclaredField(columnName);
                       field.setAccessible(true);
                       field.set(t,columnValue);
                  }
                   return t;
              }
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.关闭资源
               JdbcUtils.closeResource(conn,ps,rs);
          }
           return null;
      }

       /**
        * 通用查询操作,支持事务
        * @param conn
        * @param clazz
        * @param sql
        * @param args
        * @param <T>
        * @return
        */
       public <T>T queryForDifference(Connection conn,Class<T> clazz, String sql, Object ...args) {
           PreparedStatement ps = null;
           ResultSet rs = null;
           try {
               //1.获取链接
               conn = JdbcUtils.getConnection();

               //2.预编译sql语句,获取preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               for (int i = 0; i < args.length; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行,获取结果集
               rs = ps.executeQuery();
               //4.1获取结果集元数据
               ResultSetMetaData rsmd = rs.getMetaData();
               //4.2通过元数据获取列数
               int columnCount = rsmd.getColumnCount();
               //4.3判断是否有数据
               if (rs.next()){
                   //4.3.1实例化一个对象,反射
                   T t = clazz.getDeclaredConstructor().newInstance();
                   //4.3.2处理结果集一行数据的每一列
                   for (int i = 0; i < columnCount; i++) {
                       //获取列值
                       Object columnValue = rs.getObject(i + 1);
                       //获取列的别名
                       String columnName = rsmd.getColumnLabel(i+1);
                       //给对象指定的属性赋值为columnValue
                       Field field = clazz.getDeclaredField(columnName);
                       field.setAccessible(true);
                       field.set(t,columnValue);
                  }
                   return t;
              }
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.关闭资源
               JdbcUtils.closeResource(null,ps,rs);
          }
           return null;
      }

       /**
        * 返回多个对象的查询操作,不支持事务
        * @param clazz
        * @param sql
        * @param args
        * @param <T>
        * @return
        * @throws Exception
        */
       public <T> List<T> queryAll(Class<T> clazz, String sql, Object ...args) throws Exception {
           Connection conn = null;
           PreparedStatement ps = null;
           ResultSet rs = null;
           try {
               //1.获取数据库连接对象
               conn = JdbcUtils.getConnection();
               //2.预编译sql语句,得到preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               for (int i = 0; i < args.length; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行返回结果集
               rs = ps.executeQuery();
               //4.1获取结果集元数据
               ResultSetMetaData rsmd = rs.getMetaData();
               //4.2获取元数据列数
               int columnCount = rsmd.getColumnCount();
               //创建集合
               List<T> list = new ArrayList<>();
               //4.3判断是否有数据
               while (rs.next()){
                   //4.3.1实例化对象
                   T t = clazz.getDeclaredConstructor().newInstance();
                   //处理结果集一行数据的每一列,给T对象赋值
                   for (int i = 0; i < columnCount; i++) {
                       //获取列值
                       Object columnValue = rs.getObject(i + 1);
                       //获取列别名
                       String columnLabel = rsmd.getColumnLabel(i + 1);
                       //给指定对象赋值
                       Field field = t.getClass().getDeclaredField(columnLabel);
                       field.setAccessible(true);
                       field.set(t,columnValue);
                  }
                   list.add(t);
              }
               return list;
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.关闭资源
               JdbcUtils.closeResource(conn,ps,rs);
          }

           return null;
      }

       /**
        * 支持事务的返回多个对象的查询操作
        * @param conn
        * @param clazz
        * @param sql
        * @param args
        * @param <T>
        * @return
        * @throws Exception
        */
       public <T> List<T> queryAll(Connection conn,Class<T> clazz, String sql, Object ...args) throws Exception {
           PreparedStatement ps = null;
           ResultSet rs = null;
           try {
               //1.获取数据库连接对象
               conn = JdbcUtils.getConnection();
               //2.预编译sql语句,得到preparedStatement实例
               ps = conn.prepareStatement(sql);
               //3.填充占位符
               for (int i = 0; i < args.length; i++) {
                   ps.setObject(i+1,args[i]);
              }
               //4.执行返回结果集
               rs = ps.executeQuery();
               //4.1获取结果集元数据
               ResultSetMetaData rsmd = rs.getMetaData();
               //4.2获取元数据列数
               int columnCount = rsmd.getColumnCount();
               //创建集合
               List<T> list = new ArrayList<>();
               //4.3判断是否有数据
               while (rs.next()){
                   //4.3.1实例化对象
                   T t = clazz.getDeclaredConstructor().newInstance();
                   //处理结果集一行数据的每一列,给T对象赋值
                   for (int i = 0; i < columnCount; i++) {
                       //获取列值
                       Object columnValue = rs.getObject(i + 1);
                       //获取列别名
                       String columnLabel = rsmd.getColumnLabel(i + 1);
                       //给指定对象赋值
                       Field field = t.getClass().getDeclaredField(columnLabel);
                       field.setAccessible(true);
                       field.set(t,columnValue);
                  }
                   list.add(t);
              }
               return list;
          } catch (Exception e) {
               e.printStackTrace();
          } finally {
               //5.关闭资源
               JdbcUtils.closeResource(null,ps,rs);
          }

           return null;
      }

       /**
        * 查询一些特殊值,支持事务
        * @param conn
        * @param sql
        * @param args
        * @param <T>
        * @return
        */
       public <T> T getValue(Connection conn,String sql,Object...args) {
           PreparedStatement ps = null;
           ResultSet rs = null;
           try {
               ps = conn.prepareStatement(sql);
               for (int i = 0; i < args.length; i++) {
                   ps.setObject(i+1,args[i]);
              }
               rs = ps.executeQuery();
               if (rs.next()){
                   return (T) rs.getObject(1);
              }
          } catch (SQLException throwables) {
               throwables.printStackTrace();
          } finally {
               JdbcUtils.closeResource(null,ps,rs);
          }
           return null;
      }
    }

     

  • 相关阅读:
    中值滤波与图像锐化
    空间域图像增强
    图像的几何变换
    Fourier分析应用
    Gale-Shapley算法
    有理数与无限循环小数
    线性可分支持向量机
    拉格朗日乘子法+KKT条件
    点到平面的距离
    BP神经网络
  • 原文地址:https://www.cnblogs.com/whystudyjava/p/14135423.html
Copyright © 2020-2023  润新知