如果面试的时候问面向对象和面向过程的区别,就用Action、Service、Dao(模式)去答。

什么是DAO

1.Data Access Object(数据存取对象)

2.位于业务逻辑和持久化数据之间

3.实现对持久化数据的访问

DAO模式的作用

1.  隔离业务逻辑代码和数据访问代码

2.隔离不同数据库的实现

3.业务逻辑层,数据访问层(Oracle,SQLServer,MySQL)

DAO模式的组成部分

DAO接口、DAO实现类、实体类、数据库连接和关闭工具类

***************************DAO层的主要方法********************************

一般包含以下方法:T类型public int count();

public int add(Menus menus);
public int del(int id);
public int update(int id, T t);
public ArrayList findAll();
public T findById(int id);
public T findByName(String name);
public Page findByPage(Page page);

************************* DAO包里的UserDao*************************

在try--catch语句最后有可能还有一个finally,这个代码块是无论是否发生异常都要执行的操作

dao:检查WebConnecnt--WEB-INF--lib是否由jstl和mysql-connector的jar包,有的话,在dao中创建class就会自动导入4个包import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

***************************设计框架*******************************

public User find() {

然后进行查找操作:建一个方法(查询用户名和密码)

1、创建连接

Connection conn = DBUtil.getConn();

2、写sql语句(根据用户名和密码查询)

String sql = "select * from user where username=? and password=?";

3、创建PreparedStatement

PreparedStatement pstmt = null;
ResultSet rSet = null;

4、创建user对象 也默认未null

User user = null;

5、把pstmt和sql关联在一起,使用异常处理的代码块

try {
pstmt = conn.prepareStatement(sql);
//1和2对应的是上面sql的问号,一个对应一个,username和password是方法中的变量名,都写好了之后一起发送给
pstmt.setString(1, username);
pstmt.setString(2, password);
//executeQuery方法会把数据库响应的查询结果存放在resultSet分类对象中供我们使用,一次返回一句sql语句
rSet = pstmt.executeQuery();
//处理结果rSet -->User
//rSet可以储存很多条数据,按顺序存放,判断条件是一个指向第一条的指针,如果有多次查询,则可以用while代替if 多次循环查询,不断指向下一个。
if(rSet.next()) {
user = new User();//创建一个叫user的对象
user.setId(rSet.getInt(1));//第一列的id给user
user.setUsername(rSet.getString(2));
user.setPassword(rSet.getString(3));
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 以下为关闭的操作
DBUtil.closeRst(rSet);//关闭结果集
DButil.closePstmt(pstmt);//关闭preparedStatement
DBUtil.closeConn(conn);//关闭连接
}
return user;
}
}

******************************* test ********************************

//也在DAO下进行test
package service;
import dao.UserDao;
import po.User;
public class UserService {
private UserDao userdao = new UserDao();
public User login(String username, String password) {
return userdao.findByNameAndPwd(username, password);
}

***************************设计框架*******************************public User find() {//然后进行查找操作:建一个方法(查询用户名和密码)

//1、创建连接
Connection conn = DBUtil.getConn();
2、写sql语句(根据用户名和密码查询)
String sql = "select * from user where username=? and password=?";
3、创建PreparedStatement
PreparedStatement pstmt = null;
ResultSet rSet = null;
4、创建user对象 也默认未null
User user = null;
5、把pstmt和sql关联在一起,使用异常处理的代码块
try {pstmt = conn.prepareStatement(sql);
//1和2对应的是上面sql的问号,一个对应一个,username和password是方法中的变量名,都写好了之后一起发送给
pstmt.setString(1, username);
pstmt.setString(2, password);
//executeQuery方法会把数据库响应的查询结果存放在resultSet分类对象中供我们使用,一次返回一句sql语句
rSet = pstmt.executeQuery();
//处理结果rSet -->User
//rSet可以储存很多条数据,按顺序存放,判断条件是一个指向第一条的指针,如果有多次查询,则可以用while代替if 多次循环查询,不断指向下一个。
if(rSet.next()) {user = new User();//创建一个叫user的对象
user.setId(rSet.getInt(1));//第一列的id给user
user.setUsername(rSet.getString(2));
user.setPassword(rSet.getString(3));
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 以下为关闭的操作
DBUtil.closeRst(rSet);//关闭结果集
DButil.closePstmt(pstmt);//关闭preparedStatement
DBUtil.closeConn(conn);//关闭连接
}return user;}}

******************************* test ********************************

在DAO下进行testpackage service;

import dao.UserDao;
import po.User;
public class UserService {
private UserDao userdao = new UserDao();
public User login(String username, String password) {
return userdao.findByNameAndPwd(username, password);}

DAO模式的实际应用

定义一个接口PetDaopublic interface PetDdao{

int save(Pet pet);///实体类
iny del(Pet pet);}

定义PetDao接口的实现类

public class PetDaoSQLServerlmpl implements PetDao{
public int save(Pet pet){......}
public int del(Pet pet){......{;
......}

PetDao实现类的方法:update()方法