JavaWeb——基于Dao模式的增删改查

在JavaWeb这们专业课中我们初次学习了Java与MySql数据库的连接,当让这不是我第一次接触到数据库连接,但是Dao模式却是第一次接触。

Dao模式究竟是个啥

Dao模式的全称是Data Access Object:数据访问对象模型,即将数据库中的数据变成对象。
如下图所示:Dao模式
Dao包含4个部分:

Dao接口
Dao实现类
数据库工具类
实体类

1.baseDao(数据库工具类)
BaseDao主要包含对数据库的操作方法

//获得连接
public Connection getConnection() throws Exception {
    
    
        //1:加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2:获得连接对象conn(连接桥)
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/studentgrade", "root", "root");
    }
//关闭连接
public void closeAll(PreparedStatement pstmt, Connection conn, ResultSet rs) {
    
    
        try {
    
    
            if (rs != null) {
    
    
                rs.close();
            }
            if (pstmt != null) {
    
          //alt+shift+z
                pstmt.close();
            }
            if (conn != null) {
    
    
                conn.close();
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
执行sql语句
public int update(String sql, Object... args) throws Exception {
    
    
        PreparedStatement pstmt = null;
        Connection conn = null;
        int result = 0;
        try {
    
    
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            if (args.length > 0) {
    
    
                for (int i = 0; i < args.length; i++) {
    
    
                    pstmt.setObject(i + 1, args[i]);
                }
            }
            result = pstmt.executeUpdate();
        } finally {
    
    
            closeAll(pstmt, conn, null);
        }
        return result;
    }

2.Dao接口
Dao接口主要包含对数据库增删改查的抽象方法,可提供多种实现。

public interface CourseDao {
    
    
    //增加
    int save(Course course) throws Exception;
    //删除
    int del(int cno) throws Exception;
    //查询
    ArrayList<Course> getAll() throws Exception;
    //修改
    int change(Course course) throws Exception;
}

3.Dao实现类
实现了Dao接口的实现类重写了数据库增删改查方法。

//增加
@Override
    public int save(Course course) throws Exception {
    
    
        String sql = "insert into course(cname, classhour) values(?, ?)";
        return this.update(sql, course.getCname(), course.getClassHour());
    }
//查找
@Override
    public ArrayList<Course> getAll() throws Exception {
    
    
        ArrayList<Course> list;
        ResultSet query = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
    
    
            //1.创建链接
            conn = super.getConnection();
            //2.创建执行语句对象
            String sql = "select * from course";
            pstmt = conn.prepareStatement(sql);
            //3.给参数赋值
            //4.执行
            query = pstmt.executeQuery();
            list = new ArrayList<>();
            while(query.next()){
    
    
                Course c = new Course();
                c.setCno(query.getInt("Cno"));
                c.setCname(query.getString("Cname"));
                c.setClassHour(query.getInt("ClassHour"));
                list.add(c);
            }
        } finally {
    
    
            this.closeAll(pstmt, conn, query);
        }
        return list;
    }

4.实体类
用于存放或传输数据对象。
我感觉Dao模式是对开-闭原则一个很好的体现,对新的实现类开放增加,对已有实现类避免修改
初次学习Dao模式收获颇丰,第二堂课讲的JDBC template的运用,下一篇文章我会继续分享。

猜你喜欢

转载自blog.csdn.net/missingtheway/article/details/104779749