完全封装JDBC增删查改代码

我们知道在学习JDBC的时候有很多重复代码,而封装使我们java语言的一大特点,所以为了重复代码不重复写,今天我们来看看JDBC增删查改完全封装

Dao层(功能实现类)

UserDao(接口)

package com.kd.Dao;
​
import com.kd.Pojo.User;
​
import java.util.List;
​
public interface UserDao {
​
    /**
     * 添加用户
     */
    public int addUser(User user);
​
​
    /**
     * 根据主键删除
     */
    public int deleteById(Integer id);
​
    /**
     * 修改, 不修改主键
     * 根据主键修改
     */
    public  int updateById(User user);
​
​
    /**
     * 根据主键查询
     */
    public User  queryById(Integer id);
​
    /**
     * 查询所有
     */
    public List queryAll();
}

UserDaoImpl(接口实现类)

package com.kd.Dao;
​
import com.kd.Pojo.User;
import com.kd.Util.JDBCUtil;
​
import java.util.List;
​
public class UserDaoImpl implements UserDao{
    //添加用户
    @Override
    public int addUser(User user) {
        try {
            String sql = "insert into user(username,password) values(?,?);";
            JDBCUtil.executrDML(sql,user.getUsername(),user.getPassword());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
​
    //根据主键:ID删除数据
    @Override
    public int deleteById(Integer id) {
        try {
            String sql = "DELETE FROM user WHERE id = ?;";
            JDBCUtil.executrDML(sql,id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
​
    //根据主键:ID 修改数据
    @Override
    public int updateById(User user) {
        try {
            String sql = "update student set username = ?,password = ? where id = ?;";
            JDBCUtil.executrDML(sql,user.getUsername(),user.getPassword(),user.getId());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
​
    //根据主键:ID查询信息
    @Override
    public User queryById(Integer id) {
        try {
            String sql = "select * from user where id = ?;";
            JDBCUtil.executrDML(sql,id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
​
    //查询所有用户
    @Override
    public List queryAll() {
        try {
            String sql = "select * from student";
            JDBCUtil.executrDML(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
​

pojo(实体类)

User

package com.kd.Pojo;
​
public class User {
    private Integer id;
    private String username;
    private String password;
​
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
​
    public Integer getId() {
        return id;
    }
​
    public void setId(Integer id) {
        this.id = id;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
}

util(工具类)(重点)

JDBCUtil

package com.kd.Util;
​
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
​
public class JDBCUtil {
    static Properties pos = new Properties();
    static {
        InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("bd.properties");
        try {
            pos.load(in);
            Class.forName(pos.getProperty("driverClass"));
        } catch (Exception e) {
            e.printStackTrace();
        }
​
    }
​
    /**
     * 创建连接对象
     */
    public static Connection getConnection() throws Exception {
        return  DriverManager.getConnection(pos.getProperty("url"),pos.getProperty("username"),pos.getProperty("password"));
    }
​
​
    /**
     * 增删改
     */
    public static int executrDML(String sql,Object... obj) throws Exception {
        //获取数据库连接对象
        Connection conn = getConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
​
        //设置参数
        if(null != obj){
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i+1,obj[i]);
            }
        }
​
        return ps.executeUpdate();
    }
​
​
    /**
     * 查询
     */
    public static  List executrDQL(String sql,Class clazz,Object... obj) throws Exception {
        Connection conn = getConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
​
        //设置参数
        if(null != obj){
            for (int i = 0; i < obj.length; i++) {
                ps.setObject(i + 1,obj[i]);
            }
        }
​
        ResultSet rs = ps.executeQuery();
​
        //获取当前有哪些列
        ResultSetMetaData metaData = rs.getMetaData();//(元数据)
​
        //获取总列数
        int columnCount = metaData.getColumnCount();
​
        //存放传过来类的对象
        List list = new ArrayList<>();
​
        while (rs.next()){
            //通过反射创建一个传过来的类的实体类
            T t = clazz.newInstance();
​
            for (int i = 1; i <= columnCount; i++) {
​
                //获取列名
                String columnLabel = metaData.getColumnLabel(i);
​
                //根据列名获取数据库数据
                Object object = rs.getObject(columnLabel);
​
                try {
                    //根据列名获取实体类的属性
                    Field field = clazz.getDeclaredField(columnLabel);
​
                    //强行开启权限
                    field.setAccessible(true);
​
                    //给t对象对应属性设置数据库传过来的值
                    field.set(t,object);
                } catch (NoSuchFieldException e) {
                    System.out.println("实体类中没有" + columnLabel + "属性");
                }
            }
            //把查询结果添加到对象集合中
            list.add(t);
        }
        return list;
    }
​
​
​
​
    /**
     * 关闭资源
     * @param obj
     */
    public static void closeAll(Object... obj){
        for (Object o : obj) {
            if(o instanceof Connection) {
                try {
                    ((Connection) o).close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if(o instanceof PreparedStatement){
                try {
                    ((PreparedStatement) o).close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if(o instanceof ResultSet){
                try {
                    ((ResultSet) o).close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
​

你可能感兴趣的:(Java高级,servlet,java,jvm)