如果面试的时候问面向对象和面向过程的区别,就用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()方法