JDBC基于dbutils和druid

1.bean部分

部门类

public class Department {
    private int did;
    private String dname;
    private String description;

    public Department() {
    }

    public Department(String dname, String description) {
        this.dname = dname;
        this.description = description;
    }

    public Department(int did, String dname, String description) {
        this.did = did;
        this.dname = dname;
        this.description = description;
    }

    public int getDid() {
        return did;
    }

    public void setDid(int did) {
        this.did = did;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Department{" +
                "did=" + did +
                ", dname='" + dname + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

2.DAO部分

2.1基础DAO实现

public abstract class BaseDAOImpl {
    // 获取QueryRunner的对象
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * 修改功能的通用方法
     * @param sql  所需要的SQL语句
     * @param args 所需要传入的具体值 取代?
     * @return int 返回影响的条数
     */
    protected int update(String sql,Object...args){
        try {
            return  queryRunner.update(JDBCToolsFinal.getConnection(),sql,args);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询全部
     * @param clazz
     * @param sql
     * @param args
     * @return
     * @param <T>
     */
    protected <T>List<T> getAllList(Class<T> clazz, String sql, Object...args) {
        try {
            return queryRunner.query(JDBCToolsFinal.getConnection(), sql, new BeanListHandler<>(clazz), args);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询单个
     * @param clazz
     * @param sql
     * @param args
     * @return
     * @param <T>
     */
    protected <T> T getBean(Class<T> clazz, String sql, Object...args) {
        List<T> list = getAllList(clazz,sql,args);
        if(list != null && list.size() > 0) {
            return list.get(0);
        };
        return null;
    }

    /**
     * 查询单个值
     * @param sql
     * @param args
     * @return
     */
    protected Object getValue(String sql, Object...args) {
        try {
            return queryRunner.query(JDBCToolsFinal.getConnection(),sql,new ScalarHandler<>(),args);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    protected int[] batchUpdate(String sql, Object[][] args) {
        try {
            return queryRunner.batch(JDBCToolsFinal.getConnection(),sql,args);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

2.2部门接口

public interface DepartmentDAO {
    /**
     * 添加部门
     * @param department
     * @return
     */
    boolean addDepartment(Department department);

    /**
     * 更新部门
     * @param department
     * @return
     */
    boolean updateDepartment(Department department);

    /**
     * 删除部门
     * @param did
     * @return
     */
    boolean deleteDepartment(int did);

    /**
     * 查询全部部门
     * @return
     */
    List<Department> getAllDepartment();

    /**
     * 查询单个部门
     * @return
     */
    Department getDepartment(int did);

    /**
     * 查询总部门数
     * @return
     */
    long getDepartmentCount();


    int[] batchInsert(Object[][] objects);
}

2.3部门接口实现

public class DepartmentDAOImpl extends BaseDAOImpl implements DepartmentDAO {
    /**
     * 添加部门实现
     * @param department 参数为部门对象
     * @return 返回添加是否成功 结果为布尔值
     */
    @Override
    public boolean addDepartment(Department department) {
        String sql = "INSERT INTO t_department VALUES(null,?,?)";
        return update(sql,department.getDname(),department.getDescription()) > 0;
    }

    /**
     * 更新部门实现
     * @param department
     * @return
     */
    @Override
    public boolean updateDepartment(Department department) {
        String sql = "UPDATE t_department SET dname = ?,description = ? WHERE did = ?";
        return update(sql,department.getDname(),department.getDescription(),department.getDid()) > 0;
    }

    /**
     * 删除部门实现
     * @param did
     * @return
     */
    @Override
    public boolean deleteDepartment(int did) {
        String sql = "DELETE FROM t_department WHERE did = ?";
        return update(sql,did) > 0;
    }

    /**
     * 获取全部部门实现
     * @return
     */
    @Override
    public List<Department> getAllDepartment() {
        String sql = "SELECT * FROM t_department";
        return getAllList(Department.class,sql);
    }

    /**
     * 获取单个部门
     * @return
     */
    @Override
    public Department getDepartment(int did) {
        String sql = "SELECT * FROM t_department WHERE did = ?";
        return getBean(Department.class,sql,did);
    }

    @Override
    public long getDepartmentCount() {
        String sql = "SELECT count(*) FROM t_department";
        return (long) getValue(sql);
    }

    @Override
    public int[] batchInsert(Object[][] objects) {
        String sql = "INSERT INTO t_department VALUES(null,?,?)";
        return batchUpdate(sql,objects);
    }
}

3.utils工具实现

public class JDBCToolsFinal {
    private static DataSource dataSource;
    private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();

    static {
        Properties properties = new Properties();
        try {
            properties.load(JDBCToolsFinal.class.getClassLoader().getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        Connection connection = threadLocal.get();
        if(connection == null) {
            connection = dataSource.getConnection();
            threadLocal.set(connection);
        }
        return connection;
    }


    public static void freeConnection() throws SQLException {
        Connection connection = threadLocal.get();
        connection.setAutoCommit(true);
        connection.close();
        threadLocal.remove();
    }
}

4.测试

public class Main {
    public static void main(String[] args) {
        // 测试添加部门
        DepartmentDAOImpl dao = new DepartmentDAOImpl();
        /*
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入部门名称:");
        String departmentName = scanner.nextLine();
        System.out.println("输入部门描述:");
        String departmentDescription = scanner.nextLine();
        // 创建部门
        Department department = new Department(departmentName,departmentDescription);
        boolean flag = dao.addDepartment(department);
        System.out.println(flag ? "添加成功" : "添加失败");*/

        //测试更新部门
        /*Department department = new Department(4010,"游戏部","只打瓦洛兰特");
        dao.updateDepartment(department);*/

        //测试删除部门
        /*dao.deleteDepartment(4010);*/

        //测试获取全部部门
        /*List<Department> list = dao.getAllDepartment();
        for (Department department : list) {
            System.out.println(department);
        }*/

        // 测试获取单个部门
        /*Department department = dao.getDepartment(1);
        System.out.println(department);*/

        // 测试获取所有部门数量
        /*long number = dao.getDepartmentCount();
        System.out.println(number);*/

        //测试批量添加
        Object[][] objects = new Object[1000][2];
        for (int i = 0; i < 1000; i++) {
            objects[i][0] = "测试数据" + i;
            objects[i][1] = "测试描述" + i;
        }
        int[] ins = dao.batchInsert(objects);
        for (int in : ins) {
            System.out.println(in);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值