Spring使用DAO完成数据库操作

本文介绍了如何使用Spring框架进行数据库操作,包括创建DataBaseConnection类建立数据库连接,定义User VO类,设计UserDAO接口及其实现类UserDAOImpl,以及使用DAOFactory简化数据库操作。在UserDAODemo.jsp中展示了DAO的实战应用。

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

1、创建数据库连接类DataBaseConnection.java

package web_project;
import java.sql.*;
//主要功能就是连接数据库、关闭数据库
public class DataBaseConnection {
    //定义数据库驱动类
    private final String DBDRIVER ="com.mysql.jdbc.Driver";
    //定义数据库URL
    private final String DBURL="jdbc:mysql://192.168.83.128:3306/testdb";
    //定义数据库连接用户名
    private final String DBUSER="root";
    //定义数据库连接密码
    private final String DBPASSWORD="zch0302";
    //定义数据库连接对象
    private Connection conn=null;
    //构造方法,加载驱动
    public DataBaseConnection(){
        try{
            Class.forName(DBDRIVER);
            this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
        }
        catch(Exception e){
            System.out.println("加载驱动失败");
        }
    }
    //取得数据库连接
    public Connection getConnection(){
        return conn;
    }
    //关闭数据库连接
    public void close(){
        try{
            conn.close();
        }catch(Exception e){
            System.out.println("数据库连接关闭失败");
        }
    }


}

2、创建VO类,User.java
VO类是一个包含属性和表中字段完全对应的类,并在该类中提供setter和getter方法设置并获得该类中的属性。

package web_project;

public class User {
    private int userid;
    private String username;
    private String password;

    public int getUserid(){
        return userid;
    }

    public void setUserid(int userid){
        this.userid=userid;
    }

    public String getUsername(){
        return username;
    }

    public void setUsername(String username){
        this.username=username;
    }

    public String getPassword(){
        return password;
    }

    public void setPassword(String password){
        this.password=password;
    }

}

3、创建DAO接口类,UserDAO.java
DAO接口中定义了所有用户的操作,如添加记录、删除记录及查询记录。
不过因为是接口,所以仅仅是定义,需要子类来实现。

package web_project;
import java.util.*;

public interface UserDAO {

        public void insert(User user) throws Exception;

        public void update(User user) throws Exception;

        public void delete(int userid) throws Exception;

        public User queryById(int userid) throws Exception;

        public List queryALL() throws Exception;
}

4、创建DAO接口实现类,UserDAOImpl.java
DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。
在DAO实现中通过连接数据库进行数据库操作。

package web_project;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import web_project.User;


public class UserDAOImpl implements UserDAO{
    //添加操作
    public void insert(User user) throws Exception{
        String sql="INSERT INTO user(username,password) VALUES(?,?)";
        PreparedStatement pstmt =null;
        DataBaseConnection dbc=null;
        //下面是针对数据库的具体操作
        try{
            //连接数据库
            dbc=new DataBaseConnection();
            pstmt=dbc.getConnection().prepareStatement(sql);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            //进行数据库更新操作
            pstmt.executeUpdate();
            pstmt.close();
        }catch (Exception e){
            throw new Exception("操作出现异常");
        }
        finally{
            //关闭数据库连接
            dbc.close();
        }
    }

    //修改操作
    public void update(User user) throws Exception{
        String sql="UPDATE user SET username=?,password=? Where userid=?";
        PreparedStatement pstmt=null;
        DataBaseConnection dbc=null;
        //下面是针对数据库的具体操作
        try{
            //连接数据库
            dbc = new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStatement(sql);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            pstmt.setInt(3, ((web_project.User) user).getUserid());
            //进行数据库更新操作
            pstmt.executeUpdate();
            pstmt.close();
        }
        catch(Exception e){
            throw new Exception("操作出现异常");
        }
        finally{
            //关闭数据库连接
            dbc.close();
        }
    }

    //按ID查询
    public User queryById(int userid) throws Exception{
        User user = null;
        String sql="SELECT * FROM user WHERE userid=?";
        PreparedStatement pstmt = null;
        DataBaseConnection dbc = null;
        //下面是针对数据库的具体操作
        try{
            //连接数据库
            dbc=new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStatement(sql);
            pstmt.setInt(1, userid);
            //进行数据库查询操作
            ResultSet rs=pstmt.executeQuery();
            if(rs.next())
            {
                //查询出内容,之后将查询出的内容赋值给user对象
                user = new User();
                user.setUserid(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
            }
            rs.close();
            pstmt.close();
        }catch(Exception e){
            throw new Exception("操作出现异常");
        }
        finally{
            //关闭数据库连接
            dbc.close();
        }
        return user;
    }

    public List<User> queryAll() throws Exception{
        List<User> all =new ArrayList<User>();
        String sql="SELECT * FROM user";
        PreparedStatement pstmt=null;
        DataBaseConnection dbc=null;
        //下面是针对数据库的具体操作
        try{
            //连接数据库
            dbc =new DataBaseConnection();
            pstmt=dbc.getConnection().prepareStatement(sql);
            //进行数据库查询操作
            ResultSet rs=pstmt.executeQuery();
            while(rs.next()){
                //查询出内容,之后将查询出的内容赋值给user 对象
                User user = new User();
                user.setUserid(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                //将查询出来的数据加入到List对象之中
                all.add(user);
            }
            rs.close();
            pstmt.close();
        }
        catch(Exception e){
            throw new Exception("操作出现异常");
        }
        finally{
            //关闭数据库连接
            dbc.close();
        }
        return all;
    }

    @Override
    public void delete(int userid) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public List queryALL() throws Exception {
        // TODO Auto-generated method stub
        return null;
    }


}

5、创建DAO工厂类,DAOFactory.java
在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。
这时就必须知道具体的子类,对于后期的修改非常不便。如后期需要创建一个操作Oracle的DAO实现类,这时就必须修改所有使用DAO实现类的代码。
可以通过该DAO工厂类的一个静态方法来获得DAO实现类实例。这时如果需要替换DAO实现类,只需修改该DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。

package web_project;

public class DAOFactory {
    public static UserDAO getUserDAOInstance(){
        return new UserDAOImpl();
    }

}

6、创建UserDAODemo.jsp来演示DAO完成数据库操作

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<%@ page import="web_project.*" %>>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>使用DAO完成数据库操作</title>
</head>
<body>
    <!-- 添加记录 -->
    <%
    //通过DAO工厂获得DAO实现类实例
    UserDAO userDAO =DAOFactory.getUserDAOInstance();
    //设置需要添加的用户
    User user = new User();
    user.setUsername("dao");
    user.setPassword("1234");
    userDAO.insert(user);
    %>

    <!-- 更新记录 -->
    <% 
    //通过DAO工厂获得DAO实现类实例
    UserDAO userDAO1 =DAOFactory.getUserDAOInstance();
    //设置需要更新的用户
    User user1 = new User();
    user1.setUserid(4);
    user1.setUsername("zch");
    user1.setPassword("12345");
    //执行更新操作
    userDAO1.update(user);
    %>

    <!-- 删除记录 -->
    <%
    //通过DAO工厂获得DAO实现类实例
    UserDAO userDAO2 = DAOFactory.getUserDAOInstance();
    //执行删除操作
    userDAO2.delete(4);
    %>

    <!-- 按ID查询 -->
    <%
    //通过DAO工厂获得DAO实现类实例
    UserDAO userDAO3 = DAOFactory.getUserDAOInstance();
    //指定按ID查询
    User user3 = userDAO.queryById(4);
    out.println("用户名"+user3.getUsername()+"<br>");
    out.println("密码"+user3.getPassword());
    %>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值