DAO简述

DAO(Data Access Object)模式是一种数据访问模式,主要用于与数据库交互。本文介绍了DAO的基本概念,强调了DAO模式中的面向接口编程,并详细阐述了DAO的组成,包括控制层、业务层、数据持久化层等。同时,提供了一个UserDao接口及其实现类UserDaoImpl的示例,展示了如何在DAO中执行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DAO模式简述

DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。

注意 在DAO中主要是面向接口编程

DAO的组成

DAO在建立的时候一般分为6个包,每个包实现不同的业务,6个包分别是:
1.controller:控制层,接收前端页面传来的数据,并将数据简单处理,传输给service层
2.service:业务层,接收从controller层传递来的数据,进行复杂的业务逻辑处理
3.dao:数据持久化层,所有业务的增删改查,和数据库进行交互
4.entity:数据传输实体类
5.utils:工具包,整个项目中的公共部分
6.test:测试

其中dao包一般还要再拓展一个impl包来实现接口

实例

public interface UserDao {
//增加 影响的是行数返回int
public int save(User user);

//修改
public int update(User user);

//删除全部
public int deleteAll();
//通过id删除某一个
public int deleteById(int id);


//查询全部用户 :没有参数
//返回的是一条条记录 所以用集合来存储
public List<User> queryAll();
//查询单个用户:通过用户名和密码
public User queryBynameAndPwd(String name,String pwd);

}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.kgc.exam.dao.UserDao;
import com.kgc.exam.entity.User;

public class UserDaoImpl implements UserDao{

public int save(User user) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int count=0;
	try {
		 Class.forName("com.mysql.jdbc.Driver");
		 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		 String sql = "insert into user(username,password,age,sex) values(?,?,?,?)";
		 pstmt = conn.prepareStatement(sql);
		 pstmt.setString(1, user.getName());
		 pstmt.setString(2, user.getPassword());
		 pstmt.setInt(3, user.getAge());
		 pstmt.setInt(4, user.getSex());
		 count=pstmt.executeUpdate();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
	return count;
}

@Override
public int deleteAll() {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int count=0;
	try {
		 Class.forName("com.mysql.jdbc.Driver");
		 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		 String sql = "delete from user";
		 pstmt = conn.prepareStatement(sql);
		
		 count=pstmt.executeUpdate();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
	return count;
	
}

@Override
public int deleteById(int id) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int count=0;
	try {
		 Class.forName("com.mysql.jdbc.Driver");
		 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		 String sql = "delete from user where id = ?";
		 pstmt = conn.prepareStatement(sql);
		 pstmt.setInt(1, id);
		
		 count=pstmt.executeUpdate();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
	return count;
	
}

@Override
public int update(User user) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int count=0;
	try {
		 Class.forName("com.mysql.jdbc.Driver");
		 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		 String sql = "update user set username=?,password=?,age=?,sex=? where id=?";
		 pstmt = conn.prepareStatement(sql);
		 pstmt.setString(1, user.getName());
		 pstmt.setString(2, user.getPassword());
		 pstmt.setInt(3, user.getAge());
		 pstmt.setInt(4, user.getSex());
		 pstmt.setInt(5, user.getId());
		
		 count=pstmt.executeUpdate();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(conn!=null){
					try {
						conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
	return count;
	
}

@Override
public List<User> queryAll() {
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	List<User> list = new ArrayList<User>();
	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		String sql = "select id,username,password,age,sex from User";
		pstmt = conn.prepareStatement(sql);
		rs = pstmt.executeQuery();
		//几乎是固定写法
		while (rs.next()) {
			User user = new User();
			user.setId(rs.getInt("id"));
			user.setName(rs.getString("username"));
			user.setPassword(rs.getString("password"));
			user.setAge(rs.getInt("age"));
			user.setSex(rs.getInt("sex"));
			list.add(user);
			
		}
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if (pstmt!=null) {
					try {
						pstmt.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						if (conn!=null) {
							try {
								conn.close();
							} catch (SQLException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					}
				}
			}
			
		}
		
		}
	return list;
}

@Override
public User queryBynameAndPwd(String name, String pwd) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	User user = null;
	try {
		Class.forName("com.mysql.jdbc.Driver");
		conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/college","root" , "123456");
		String sql = "select id,username,password,age,sex from User where username=? and password=?";
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, name);
		pstmt.setString(2, pwd);
		rs = pstmt.executeQuery();
		//几乎是固定写法
		while (rs.next()) {
		    user = new User();
			user.setId(rs.getInt("id"));
			user.setName(rs.getString("username"));
			user.setPassword(rs.getString("password"));
			user.setAge(rs.getInt("age"));
			user.setSex(rs.getInt("sex"));
			
			
		}
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if (pstmt!=null) {
					try {
						pstmt.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						if (conn!=null) {
							try {
								conn.close();
							} catch (SQLException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					}
				}
			}
			
		}
	}
	return user;
}

根据需求可以把重复的代码抽取出来放在工具类中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值