发表于: 2017-05-19 02:25:18

7 1210


Task1第2017年5月18日

今日计划

学习DAO编写

十七.编写DAO,注意写清楚InterfaceImpl,注意遵守命名规范。

模仿学习:

使用 DAO模式 来对数据库做增删改查操作

这种模式可以大概分为三个层:1.DAO层  2.服务层  3.表现层

1)表现层 :相当于客户端用来查看,提交信息的角色

2)服务层 :是表现层和DAO层的纽带,其实也没干什么事就是通知消息的角色

3DAO   :真正要做事的角色(对数据库的某些操作)

二、代码实现

以之前创建的数据表apply”作为例子

 


1.Bean文件,在这主要作用(有点像中介存储的角色):当从数据库拿出数据后,一个个set到该类里,进行赋值,然后把该对象放到集合中,之后再get出来

Apply.Java

//选取 id,name,qq,profession,gschool,oath 做示例

package com.jdbc.bean;  

  

public class Apply {  

      

    private Long id;  

    private String name ;  

    private String qq;  

    private String profession ;  

    private String gschool ;  

    private String oath;  

      

    public Long getid() {  

        return id;  

    }  

    public void setid(long id) {  

        this.id = id;  

    }  

    public String getname() {  

        return name;  

    }  

    public void setname(String name) {  

        this.name = name;  

    }  

    public String getqq() {  

        return qq;  

    }  

    public void setqq(String qq) {  

        this.qq = qq;  

    }

    public String getprofession() {  

        return profession;  

    }  

    public void setprofession(String profession) {  

        this.profession = profession;  

    }  

    public String getgschool() {  

        return gschool;  

    }  

    public void setgschool(String gschool) {  

        this.gschool = gschool;  

    }  

    public String getoath() {  

        return oath;  

    }  

    public void setoath(String oath) {  

        this.oath = oath;  

        }

}

2.java连接数据库的基本操作及关闭,封装在一个类中

JDBCUtils.java

package com.jdbc.utils;  

import java.sql.*;  

public class JDBCUtils {  

     //获取连接

    public static Connection getConnection()  

    {  

        String driverName = "com.mysql.cj.jdbc.Driver";  

        String url = "jdbc:mysql://localhost/students?serverTimezone = UTC";  

        String user = "root" ;  

        String password = "920901";  

        Connection con = null ;  

        try {  

            Class.forName(driverName);  

            con = DriverManager.getConnection(url, user, password);  

            System.out.println("连接数据库成功!");  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

          

        return con ;  

          

    }  

    //关闭连接

    public static void free(ResultSet rs, Statement sta , Connection con)  

    {  

        try {  

            if(rs != null)  

            {  

                rs.close();  

                rs = null ;  

            }  

              

            if(sta != null)  

            {  

                sta.close();  

                sta = null ;  

            }  

            if(con!= null)  

            {  

                con.close();  

                con = null ;  

            }  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

3.定义一个DAO接口

ApplyDAO.java

package com.jdbc.dao;  

import java.util.Set;  

import com.jdbc.bean.Apply ;  

public interface ApplyDAO {  

    public int addApply(Apply apply) ;   

    public int deleteApply(String name);  

    public int updateApply(String name);  

    public Apply findApply(String name);  

    public Set<Apply> findAll();  

}

4.实现DAO接口的类,具体DAO,做重要工作的类

ConcreteApplytDao.java

package com.jdbc.dao;  

  

import java.sql.*;

 

import java.util.HashSet;  

import java.util.Set;  

  

import com.jdbc.bean.Apply;  

import com.jdbc.dao.ApplyDAO;  

import com.jdbc.utils.JDBCUtils;  

  

public class ConcreateApplyDao implements ApplyDAO{  

      

    //增加一个申请  

    public int addApply(Apply apply)  

    {  

        Connection con = null ;  

        PreparedStatement ps = null ;  

        int i = 0 ;  

        try  

        {  

            con = JDBCUtils.getConnection();  

            String sql = "insert into apply(id,name,qq,profession,gschool,oath) values(?,?,?,?,?)";  

            ps = con.prepareStatement(sql);  

              

            ps.setString(1, apply.getname());  

            ps.setString(2, apply.getqq());  

            ps.setString(3, apply.getprofession());  

            ps.setString(4, apply.getgschool());  

            ps.setString(5, apply.getoath());  

              

            i = ps.executeUpdate() ;  

              

        }  

        catch(SQLException e)  

        {  

            throw new DAOException(e.getMessage(),e);  

        }  

        finally  

        {  

            JDBCUtils.free(null, ps, con);  

        }  

        return i;  

    }  

      

    //删除一个申请

    public int deleteApply(String name)  

    {  

        Connection con = null ;  

        PreparedStatement ps = null ;  

        int i = 0 ;  

        try  

        {  

            con = JDBCUtils.getConnection();  

            String sql = "delete from apply where name =?";  

            ps = con.prepareStatement(sql);  

            ps.setString(1, name);  

              

            i = ps.executeUpdate() ;  

        }  

        catch(SQLException e)  

        {  

            throw new DAOException(e.getMessage(),e);  

        }  

        finally  

        {  

            JDBCUtils.free(null, ps, con);  

        }  

        return i;  

    }  

      

    //修改一个申请将其oath改为老大最帅

    public int updateApply(String name)  

    {  

        Connection con = null ;  

        PreparedStatement ps = null ;  

        int i = 0 ;  

        try  

        {  

            con = JDBCUtils.getConnection();  

            String sql = "update apply set oath = '老大最帅'  where name =?";  

            ps = con.prepareStatement(sql);  

            ps.setString(1, name);  

            i = ps.executeUpdate() ;  

        }  

        catch(SQLException e)  

        {  

            throw new DAOException(e.getMessage(),e);  

        }  

        finally  

        {  

            JDBCUtils.free(null, ps, con);  

        }  

        return i;  

    }  

    //查询一行  

    public Apply findApply(String name)  

    {  

        Connection con = null ;  

        PreparedStatement ps = null ;  

        Apply ap = null ;  

        ResultSet rs = null;  

        try  

        {  

            con = JDBCUtils.getConnection();  

            String sql = "select name,qq,profession,gschool,oath from apply where name =?";  

            ps = con.prepareStatement(sql);  

            ps.setString(1, name);  

              

            rs = ps.executeQuery() ;  

            ap = new Apply();  

            while(rs.next())  

            {  

                ap.setname(rs.getString(1));  

                ap.setqq(rs.getString(2));  

                ap.setprofession(rs.getString(3));

                ap.setgschool(rs.getString(4));  

                ap.setoath(rs.getString(5));  

                 

            }  

        }  

        catch(SQLException e)  

        {  

            throw new DAOException(e.getMessage(),e);  

        }  

        finally  

        {  

            JDBCUtils.free(rs, ps, con);  

        }  

        return ap;  

    }  

    //查询所有  

    public Set<Apply> findAll()  

    {  

        Connection con = null ;  

        PreparedStatement ps = null ;  

        Apply ap = null ;  

        ResultSet rs = null;  

        Set<Apply> set = null ;  

        try  

        {  

            con = JDBCUtils.getConnection();  

            String sql = "select name,qq,profession,gschool,oath from apply";  

            ps = con.prepareStatement(sql);  

              

            set = new HashSet<Apply>() ;  

            rs = ps.executeQuery() ;  

            while(rs.next())  

            {  

                ap = new Apply();  

                  

                ap.setname(rs.getString(1));  

                ap.setqq(rs.getString(2));  

                ap.setprofession(rs.getString(3));

                ap.setgschool(rs.getString(4));  

                ap.setoath(rs.getString(5));

                  

                set.add(ap);  

            }  

        }  

        catch(SQLException e)  

        {  

            throw new DAOException(e.getMessage(),e);  

        }  

        finally  

        {  

            JDBCUtils.free(rs, ps, con);  

        }   

        return set;  

    }

}

5.自定义异常 继承了运行时异常,具体操作让父类实现

DAOException.java

package com.jdbc.dao;  

/**

 * 自定义异常

 *

 */  

public class DAOException extends RuntimeException {  

private static final long serialVersionUID = 1L;

 

public DAOException()  

    {  

        super();  

    }  

      

    public DAOException(String messege,Throwable cause)  

    {  

        super(messege,cause);  

    }  

      

    public DAOException(String messege)  

    {  

        super(messege);  

    }  

    public DAOException(Throwable cause)  

    {  

        super(cause);  

    }  

}

6定义一个服务类(服务层),本来还要定义一个接口,这里简写了,客户与DAO的纽带,持有DAO对象的引

ApplyService.java

package com.jdbc.service;  

  

import java.util.Set;  

  

import com.jdbc.bean.Apply;  

import com.jdbc.dao.ApplyDAO;  

import com.jdbc.dao.ConcreteApplyDao;  

  

public class ApplyService {  

      

ApplyDAO sd = new ConcreteApplyDao();  

      

    public int add(Apply apply)  

    {  

        return this.sd.addApply(apply);  

    }  

      

    public int delete(String name)  

    {  

        return this.sd.deleteApply(name);  

    }  

      

    public int update(String name)  

    {  

        return this.sd.updateApply(name);  

    }  

      

    public Apply find(String name)  

    {  

        return this.sd.findApply(name);  

    }  

      

    public Set<Apply> findAll()  

    {  

        return this.sd.findAll();  

    }  

}

7.定义一个测试类,相当于 (表现层)

Client.java

package com.jdbc.test;  

  

import java.util.HashSet;  

import java.util.Iterator;  

import java.util.Set;  

  

import com.jdbc.bean.Apply;  

import com.jdbc.service.ApplyService;  

  

public class Client {  

   public static void main(String[] args)  

   {  

   Apply ap= new Apply();

   Set<Apply> set = new HashSet<Apply>();  

// ap.setname("王二麻子");  

// ap.setqq("12345");  

// ap.setprofession("JAVA工程师");  

// ap.setgschool("南京大学");  

// ap.setoath("  ")

      ApplyService ss = new ApplyService();  

       set = ss.findAll() ;  

       Iterator<Apply> iterator = set.iterator();  

       while(iterator.hasNext())  

       {  

        Apply apply =  (Apply)iterator.next() ;  

          System.out.println(apply.getname() +" " +apply.getqq()+" "+apply.getprofession()+" "+apply.getgschool()+" "+apply.getoath());  

       }  

   }  

}  

成功添加了“王二麻子”

明日计划

继续学习DAO

遇到问题

一葫芦画瓢敲出了第一个DAO

大致能明白过程,但是很多细节方面还是一头雾水,明日继续学一下,把DAO弄清楚。

 

 

收获

尝试敲出了第一个DAO,并测试了一下查询数据与插入数据是可以使用的,但是并不是完全理解了,还需要继续深入学习。



返回列表 返回列表
评论

    分享到