zoukankan      html  css  js  c++  java
  • 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() ;
        }
    };
  • 相关阅读:
    GDUFE ACM-1020
    GDUFE ACM-1069(简单的巴什博弈)
    GDUFE ACM-1138
    GDUFE ACM-1009
    GDUFE ACM-1008
    GDUFE ACM-1005
    LCA 最近公共祖先
    51nod
    51nod
    51nod
  • 原文地址:https://www.cnblogs.com/zhxiaomiao/p/1426213.html
Copyright © 2011-2022 走看看