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;
}
根据需求可以把重复的代码抽取出来放在工具类中