DAO设置模式

区分:

J2EE的组件层次:

  客户端---表示层---业务层---数据层---数据库---数据库

DAO属于数据层的操作,即:在DAO中封装了一个表在项目中的多有的操作

举例:

person表 id name password age

定义各种操作:

在java中只有通过接口可以定义标准----DAO规定的就是一个接口

在插入---针对对象插入

对象叫做---vo TO POJO (值对象、传输对象、最根本的JAVA对象)

即:只包含属性和setter 和getter方法

VO对象和表中的数据字段对应

以下是代码:

1 定义接口即:PersonDAO.java:

Code
public interface PersonDAO
{
    
// 增加操作
    public void insert(Person person) throws Exception ;
    
// 修改操作
    public void update(Person person) throws Exception ;
    
// 删除操作
    public void delete(String id) throws Exception ;
    
// 按ID查询操作
    public Person queryById(String id) throws Exception ;
    
// 查询全部
    public List queryAll() throws Exception ;
    
// 模糊查询
    public List queryByLike(String cond) throws Exception ;
}

2 定义数据库连接类:

Code
public class DataBaseConnection
{
    
private final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
    
private final String DBURL = "jdbc:oracle:thin:@localhost:1521:JAVA" ;
    
private final String DBUSER = "ss" ;
    
private final String DBPASSWORD = "aa" ;
    
private Connection conn = null ;

    
public DataBaseConnection()
    {
        
try
        {
            Class.forName(DBDRIVER) ;
            
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;    
        }
        
catch (Exception e)
        {
        }
    }

    
// 取得数据库连接
    public Connection getConnection()
    {
        
return this.conn ;
    }

    
// 关闭数据库连接
    public void close()
    {
        
try
        {
            
this.conn.close() ;
        }
        
catch (Exception e)
        {
        }        
    }
};

3 实现接口PersonDAOImpl.java

Code
// 此类需要完成具体的数据库操作,需要JDB代码
public class PersonDAOImpl implements PersonDAO
{
    
// 增加操作
    public void insert(Person person) throws Exception
    {
        String sql 
= "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;
            pstmt.setString(
1,person.getId()) ;
            pstmt.setString(
2,person.getName()) ;
            pstmt.setString(
3,person.getPassword()) ;
            pstmt.setInt(
4,person.getAge()) ;
            pstmt.setString(
5,person.getEmail()) ;
            
// 进行数据库更新操作
            pstmt.executeUpdate() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
    }
    
// 修改操作
    public void update(Person person) throws Exception
    {
        String sql 
= "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;            
            pstmt.setString(
1,person.getName()) ;
            pstmt.setString(
2,person.getPassword()) ;
            pstmt.setInt(
3,person.getAge()) ;
            pstmt.setString(
4,person.getEmail()) ;
            pstmt.setString(
5,person.getId()) ;
            
// 进行数据库更新操作
            pstmt.executeUpdate() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
    }
    
// 删除操作
    public void delete(String id) throws Exception
    {
        String sql 
= "DELETE FROM person WHERE id=?" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;            
            pstmt.setString(
1,id) ;
            
// 进行数据库更新操作
            pstmt.executeUpdate() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
    }
    
// 按ID查询操作
    public Person queryById(String id) throws Exception
    {
        Person person 
= null ;
        String sql 
= "SELECT id,name,password,age,email FROM person WHERE id=?" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;            
            pstmt.setString(
1,id) ;
            
// 进行数据库查询操作
            ResultSet rs = pstmt.executeQuery() ;
            
if(rs.next())
            {
                
// 查询出内容,之后将查询出的内容赋值给person对象
                person = new Person() ;
                person.setId(rs.getString(
1)) ;
                person.setName(rs.getString(
2)) ;
                person.setPassword(rs.getString(
3)) ;
                person.setAge(rs.getInt(
4)) ;
                person.setEmail(rs.getString(
5)) ;
            }
            rs.close() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
        
return person ;
    }
    
// 查询全部
    public List queryAll() throws Exception
    {
        List all 
= new ArrayList() ;
        String sql 
= "SELECT id,name,password,age,email FROM person" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;            
            
// 进行数据库查询操作
            ResultSet rs = pstmt.executeQuery() ;
            
while(rs.next())
            {
                
// 查询出内容,之后将查询出的内容赋值给person对象
                Person person = new Person() ;
                person.setId(rs.getString(
1)) ;
                person.setName(rs.getString(
2)) ;
                person.setPassword(rs.getString(
3)) ;
                person.setAge(rs.getInt(
4)) ;
                person.setEmail(rs.getString(
5)) ;

                
// 将查询出来的数据加入到List对象之中
                all.add(person) ;
            }
            rs.close() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
        
return all ;
    }
    
// 模糊查询
    public List queryByLike(String cond) throws Exception
    {
        List all 
= new ArrayList() ;
        String sql 
= "SELECT id,name,password,age,email FROM person WHERE name LIKE ? or email LIKE ?" ;
        PreparedStatement pstmt 
= null ;
        DataBaseConnection dbc 
= null ;

        
// 下面是针对数据库的具体操作
        try
        {
            
// 连接数据库
            dbc = new DataBaseConnection() ;
            pstmt 
= dbc.getConnection().prepareStatement(sql) ;    
            
// 设置模糊查询条件
            pstmt.setString(1,"%"+cond+"%") ;
            pstmt.setString(
2,"%"+cond+"%") ;
            
// 进行数据库查询操作
            ResultSet rs = pstmt.executeQuery() ;
            
while(rs.next())
            {
                
// 查询出内容,之后将查询出的内容赋值给person对象
                Person person = new Person() ;
                person.setId(rs.getString(
1)) ;
                person.setName(rs.getString(
2)) ;
                person.setPassword(rs.getString(
3)) ;
                person.setAge(rs.getInt(
4)) ;
                person.setEmail(rs.getString(
5)) ;

                
// 将查询出来的数据加入到List对象之中
                all.add(person) ;
            }
            rs.close() ;
            pstmt.close() ;
        }
        
catch (Exception e)
        {
            
throw new Exception("操作出现异常") ;
        }
        
finally
        {
            
// 关闭数据库连接
            dbc.close() ;
        }
        
return all ;
    }
};

4 接口直接通过其子类实例化,

PersonDAO person=new PersonDAOImpl(),直接影响就是程序在调用时必须知道具体的子类,

这样会造成修改的不方便,如数据库换为了MYSQL

所以,必须使用工厂设计,使前台部关注具体子类是谁

DAO整体设计模式:

调用处---DAO工厂---具体子类实现--完成数据库操作

Code
public class DAOFactory
{
    
public static PersonDAO getPersonDAOInstance()
    {
        
return new PersonDAOImpl() ;
    }
};
原文地址:https://www.cnblogs.com/zhxiaomiao/p/1426213.html