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的运用,下一篇文章我会继续分享。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值