DAO模型 架构

 这是项目的架构   

 

 

  dao层下面有一个平级的包 impl   //dao层  访问数据库。

GradeDAOImpl 他继承了BaseDAO 实现了IGradeDAO接口

public class GradeDAOImpl extends BaseDAO implements IGradeDAO {

    @Override
    public List<Grade> findAllGrades() throws Exception {
        List<Grade> list = new ArrayList<Grade>();
        String sql = "select * from grade";
        ResultSet rs = executeQuery(sql);
        if (rs != null) {
            while (rs.next()) {
                Grade grade = new Grade();
                grade.setGid(rs.getInt("gid"));
                grade.setGname(rs.getString("gname"));
                list.add(grade);

            }
        }
        return list;
    }

    @Override
    public boolean addGrade(Grade grade) throws Exception {
        boolean flag = false;// 添加失败
        String sql = "insert into grade(gname) values(?)";
        int count = executeUpdate(sql, grade.getGname());
        if (count > 0) {
            flag = true;
        }
        return flag;
    }

}

 

BaseDAO类 //访问数据库的底层类

/**
 * 数据库访问的工具类
 * 
 * @author Happy
 *
 */
public class BaseDAO {

    // 定义四个静态常量,保存数据连接信息
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql:///s2230myschool"; // localhost
                                                                        // //
                                                                        // 3306
    private static final String username = "root";
    private static final String password = "";

    // 三个接口
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    // 01.写一个 返回连接的方法
    public Connection getConnection() throws Exception {
        Class.forName(driver);
        if (con == null || con.isClosed()) {
            con = DriverManager.getConnection(url, username, password);
        }
        return con;
    }

    // 02.写一个执行增 删 改操作的方法
    public int executeUpdate(String sql, Object... objs) throws Exception {
        getConnection();
        ps = con.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i + 1, objs[i]);
        }
        int count = ps.executeUpdate();
        return count;
    }

    // 03.写一个执行查询操作的方法
    public ResultSet executeQuery(String sql, Object... objs) throws Exception {
        getConnection();
        ps = con.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i + 1, objs[i]);
        }
        rs = ps.executeQuery();
        return rs;
    }

    // 04.写一个回收资源的方法

    public void closeResource() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

IGradeDAO接口

public interface IGradeDAO {

    // 01.书写一个用于查询所有年级名称和编号的方法
    public List<Grade> findAllGrades() throws Exception;

    // 02.写一个用户添加年级的方法
    public boolean addGrade(Grade grade) throws Exception;
}

 

entity层  //实体类

public class Grade {
    private int gid;
    private String gname;

    public int getGid() {
        return gid;
    }

    public void setGid(int gid) {
        this.gid = gid;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

}

service层 有一个平级的 impl层   //  GradeServiceImpl 实现了 IGadeService 接口 

 

 

GradeServiceImpl :

public class GradeServiceImpi implements IGradeService {
    // 需要向下依赖DAO的实例 以及他提供的方法
    IGradeDAO dao = new GradeDAOImpl();

    @Override
    public List<Grade> findAllGrades() throws Exception {
        return dao.findAllGrades();
    }

    @Override
    public boolean addGrade(Grade grade) throws Exception {
        return dao.addGrade(grade);
    }

}

 

IGadeService 接口 :

public interface IGradeService {
    // 01.书写一个用于查询所有年级名称和编号的方法
    public List<Grade> findAllGrades() throws Exception;

    // 02.写一个用户添加年级的方法
    public boolean addGrade(Grade grade) throws Exception;
}

 

test层 //UI层 

 

//测试类:

public class JDBCTest {

    public static void main(String[] args) throws Exception {

        /*GradeDAOImpl gradeDAO = new GradeDAOImpl();
        Grade grade = new Grade();
        grade.setGname("精英班");
        boolean flag = gradeDAO.addGrade(grade);
        System.out.println(flag);*/
        
        //UI层 依赖于service
        IGradeService service =new GradeServiceImpi();
        
        List<Grade> list =service.findAllGrades();
        
        for(Grade grade: list){
            System.out.println(grade.getGname());
        }

    }

}

 

posted @ 2018-06-18 11:40  H丶  阅读(1877)  评论(2编辑  收藏  举报