DAO结构和数据库连接池

DAO结构

什么是DAO:DAO(Database Access Object)数据库访问对象;
一种封装数据库操作的模式;
为什么要用DAO:实现业务逻辑与数据库操作相分离,降低程序代码的耦合性
怎么实现DAO(DAO模式文件结构)
在这里插入图片描述
dao接口:存放接口
dao实现类:存放接口的实现类
实体类:存放实体类
工具类(包括工具配置,连接池和连接池配置):存放工具类和连接池以及他们相应的配置

dao接口

public interface EmployeeDao {
    /**
     * 查询全部
     * @return
     */
    public List<Employee> getAll() ;
    /**
     * 根据编号查询
     * @param empno
     * @return
     */
    public Employee getByEmpno(int empno) ;
    /**
     * 添加数据
     * @param emp
     * @return
     */
    public boolean add(Employee emp) ;
    /**
     * 修改数据
     * @param emp
     * @return
     */
    public boolean update(Employee emp) ;
    /**
     * 删除数据
     * @param empno
     * @return
     */
    public boolean delete(int empno) ;
}

dao接口实现类

public class EmployeeDaoImpl implements EmployeeDao {

    @Override
    public List<Employee> getAll() {
        List<Employee> list = null;
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            list = qr.query("select * from emp", new BeanListHandler<>(Employee.class)) ;
        } catch (SQLException e) {
            e.printStackTrace();
            return null ;
        }
        return list ;
    }

    @Override
    public Employee getByEmpno(int empno) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        Employee emp = null;
        try {
            emp = qr.query("SELECT * FROM emp WHERE empno=?",new BeanHandler<>(Employee.class), empno) ;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
        return emp;
    }

    @Override
    public boolean add(Employee emp) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("INSERT INTO emp VALUES (?,?,?,?,?,?,?,?)", emp.getEmpno(),emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno()) ;
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false ;
    }

    @Override
    public boolean update(Employee emp) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("UPDATE emp SET ename=?,job=?,mgr=?,hiredate=?,sal=?,comm=?,deptno=? WHERE empno=?", emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno(),emp.getEmpno());
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return false;
    }

    @Override
    public boolean delete(int empno) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("DELETE FROM emp WHERE empno=?", empno);
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

}

实体类

public class Employee {

    private int empno ;
    private String ename ;
    private String job ;
    private int mgr ;
    private Date hiredate ;
    private double sal ;
    private double comm ;
    private int deptno ;

    public Employee() {

    }

    public Employee(int empno, String ename, String job, int mgr, Date hiredate, double sal, double comm, int deptno) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
        this.sal = sal;
        this.comm = comm;
        this.deptno = deptno;
    }

    //省略所有属性的getter和setter方法
    ... 

    @Override
    public String toString() {
        return "Employee [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate="
                + hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";
    }
}

工具类和连接池

public class DataSourceUtils {
    private static DataSource ds = null;
    static {
        InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties") ;
        Properties pro = new Properties() ;
        try {
            pro.load(is);
            ds = DruidDataSourceFactory.createDataSource(pro) ;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static DataSource getDataSource() {
        return ds ;
    }
}

连接池

个人理解:一个缓存池,存放和数据库之间的连接,不用每次请求操作数据库时重新创建数据库连接,即从数据库连接池直接取连接好的接口,用完后再放回,可以有效的减少数据库连接所产生的数据库消耗。本质上是一种提高操作数据库性能的技术。
更全面的解释:https://blog.csdn.net/shuaihj/article/details/14223015

猜你喜欢

转载自blog.csdn.net/qq_43743088/article/details/107573769
今日推荐