DAO模式(重点)
DAO:Data Access Object,数据访问对象
- 把数据访问细节封装起来
- 一个原子性的增删改查封装成一个方法
- 一个表对应一个DAO
- 一个接口+一个实现类
- 命名:
- 用户表:IUserDao UserDaoImpl
- 订单表:IOrderDao OrderDaoImpl
- 包:
- com.zhang.dao com.hwua.dao.impl
Java<==>JDBC<==>数据库 SQL
登录:
- 输入用户名和密码,判断是否正确
- 利用查询查找对应的用户是否存在
注册:
- 输入各种信息
- 查询是否合法
- 合法添加到数据库
示例:针对User表,将前面的userjdbc修改成DAO模式,结果如下:
IUserDao接口:
package com.zhang.dao;
import com.zhang.entity.User;
import java.sql.SQLException;
import java.util.List;
public interface IUserDao {
public List<User> queryUser(String username) throws SQLException;
public int addUser(User user) throws SQLException;
public int updatePasswordById(final long id,final String password) throws SQLException;
public int deleteUser(long id) throws SQLException;
}
UserDaoImpl实现类:
package com.zhang.dao.impl;
import com.zhang.dao.IUserDao;
import com.zhang.entity.User;
import com.zhang.util.JDBCTemplate;
import com.zhang.util.PreparedStatementSetter;
import com.zhang.util.ResultSetHandler;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl extends JDBCTemplate implements IUserDao {
@Override
public int addUser(User user) throws SQLException {
String sql = "INSERT INTO t_user(id,username,password,sex,id_number,tel,addr)"
+ "VALUES(t_user_id_seq.NEXTVAL,?,?,?,?,?,?)";
//调用通用的增删改方法
return update(sql,new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException{
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setInt(3, user.getSex());
pstmt.setString(4, user.getIdNumber());
pstmt.setString(5, user.getTel());
pstmt.setString(6, user.getAddr());
}
});
}
@Override
public List<User> queryUser(String username) throws SQLException {
List<User> list = new ArrayList<>();
String sql = "SELECT id,username,password,sex,"
+ "id_number,tel,addr FROM t_user WHERE username=?";
query(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException {
//放置设置占位符的值的代码
pstmt.setString(1,username);
}
}, new ResultSetHandler() {
@Override
public void handleRS(ResultSet rs) throws SQLException {
//放置结果集处理的代码
if(rs.next()) {
User user = new User(rs.getLong(1),rs.getString(2),rs.getString(3),
rs.getInt(4),rs.getString(5),rs.getString(6),rs.getString(7));
list.add(user);
}
}
});
return list;
}
@Override
public int updatePasswordById(long id, String password) throws SQLException {
String sql = "UPDATE t_user SET password=? WHERE id=?";
return update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setString(1,password);
pstmt.setLong(2,id);
}
});
}
@Override
public int deleteUser(long id) throws SQLException {
return 0;
}
}