DAO层

DAO层

DAO数据访问对象(Data Access Object)

  • DAO实现了业务逻辑与数据库访问相分离

  • DAO只实现对数据库的访问操作

  • 对同一张表的所有操作封装在XxxDaoImpl对象中

  • 根据增删改查的不同功能实现具体的方法(insert,update,delete,select,selectAll)

1.数据库的访问操作从获取connection连接开始,执行sql语句,到处理结果这几步都属于访问操作.

2.让用户名输入用户密码都属于业务逻辑代码。

PersonDaoImpl类:

package com.qf.person;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class PersonDaoImpl {
   //dao层只做数据库访问操作,不做数据库逻辑判断
   //新增
   //dao层其实就是实现对数据库一张表的操作的复用,每个用户对一张表的操作都可以通过这个类完成
   public int insert(Person1 person){
       Connection connection = null;
       PreparedStatement preparedStatement = null;
       String sql = "insert into person(name,age,borndate,email,address)values(?,?,?,?,?);";
       try {
           connection = DBUtils.getConnection();
           preparedStatement=connection.prepareStatement(sql);
           preparedStatement.setString(1,person.getName());
           preparedStatement.setInt(2,person.getAge());
           preparedStatement.setDate(3,null);
           preparedStatement.setString(4,person.getEmail());
           preparedStatement.setString(5,person.getAddress());
           int result = preparedStatement.executeUpdate();
           return result;

      } catch (SQLException e) {
           e.printStackTrace();
      }finally {
           DBUtils.closeAll(connection,preparedStatement,null);

      }

       return 0;
  }
   //修改
   public int update(Person1 person){
   Connection connection =null;
   PreparedStatement preparedStatement = null;
   String sql ="update person set name=?,age=?,borndate=?,email=?,address=?where id=?";
       try {
           preparedStatement =connection.prepareStatement(sql);
           preparedStatement.setString(1,person.getName());
           preparedStatement.setInt(2,person.getAge());
           preparedStatement.setDate(3,null);
           preparedStatement.setString(4,person.getEmail());
           preparedStatement.setString(5,person.getAddress());
           preparedStatement.setInt(6,person.getId());
           int result = preparedStatement.executeUpdate();
           return result;
      } catch (SQLException e) {
           e.printStackTrace();
      }finally {
           DBUtils.closeAll(connection,preparedStatement,null);

      }
       return 0;
  }
   //删除
   public int delete(int id){
       Connection connection = null;
       PreparedStatement preparedStatement = null;
       String sql ="delete from person where id=?;";
       connection = DBUtils.getConnection();
       try {
           preparedStatement = connection.prepareStatement(sql);
           preparedStatement.setInt(1,id);
           int result = preparedStatement.executeUpdate();
           return  result;
      } catch (SQLException e) {
           e.printStackTrace();
      }finally {
           DBUtils.closeAll(connection,preparedStatement,null);
      }
       return 0;
  }
   //查单个
   public Person1 select(int id){
      Connection connection = null;
      PreparedStatement preparedStatement = null;
       ResultSet resultSet = null;
       String sql = "select * from person where id=?";
       Person1 person = null;//创建一个Person类型的值,默认为空,方便创建对象
       try {
           connection= DBUtils.getConnection();
           preparedStatement=connection.prepareStatement(sql);
           preparedStatement.setInt(1,id);
           resultSet = preparedStatement.executeQuery();
           //因为查到的结果是单行数据,所以if循环优于while循环
           if(resultSet.next()){
               person=new Person1();//new一个Person对象
               int pid = resultSet.getInt("id");
               String name = resultSet.getString("name");
               int age = resultSet.getInt("age");
               Date bornDate = resultSet.getDate("borndate");
               String email = resultSet.getString("email");
               String address= resultSet.getString("address");
               person.setId(pid);
               person.setName(name);
               person.setAge(age);
               person.setDate(bornDate);
               person.setEmail(email);
               person.setAddress(address);

          }
      } catch (SQLException e) {
           e.printStackTrace();
      }finally {
           DBUtils.closeAll(connection,preparedStatement,resultSet);
      }
       return null;
  }
   //查所有
   public List<Person1> selectAll(){
       Connection connection = null;
       PreparedStatement preparedStatement = null;
       ResultSet resultSet = null;
       Person1 person1= null;
       List<Person1> person1List = new ArrayList<>();
       try {
           connection = DBUtils.getConnection();
           preparedStatement = connection.prepareStatement("select * from person1");
           resultSet = preparedStatement.executeQuery();
           while (resultSet.next()){//每查询到一行数据,就把这行数据封装到person对象里,然后把这一行对象的数据存放在集合中。
               int pid = resultSet.getInt("id");
               String name = resultSet.getString("name");
               int age = resultSet.getInt("age");
               Date bornDate = resultSet.getDate("borndate");
               String email = resultSet.getString("email");
               String address= resultSet.getString("address");
               person1 = new Person1(pid,name,age,bornDate,email,address);
           person1List.add(person1);
          }
           return person1List;
      } catch (SQLException e) {
           e.printStackTrace();
      }
       return null;
  }
}

实体类:存储数据库信息的载体

Person1:

package com.qf.person;

import java.util.Date;

/**
*
* id INT PRIMARY KEY AUTO_INCREMENT,
*     NAME VARCHAR(20) NOT NULL,
*     age INT NOT NULL,
*     bornDate DATE,
*     email VARCHAR(20),
*     address VARCHAR(20)
*/
public class Person1 {
   private int id;
   private  String name;
   private int age;
   //date是java.util类型,不是java.sql
   private Date date;
   private String email;
   private String address;

   //构造方法
   public Person1(){

  }

   public Person1(String name, int age, Date date, String email, String address) {
       this.name = name;
       this.age = age;
       this.date = date;
       this.email = email;
       this.address = address;
  }

   public Person1(int id, String name, int age, Date date, String email, String address){
       this.id=id;
       this.name=name;
       this.age=age;
       this.date=date;
       this.email=email;
       this.address=address;

  }

   @Override
   public String toString() {
       return "Person{" +
               "id=" + id +
               ", name='" + name + '\'' +
               ", age=" + age +
               ", date=" + date +
               ", email='" + email + '\'' +
               ", address='" + address + '\'' +
               '}';
  }

   public int getId() {
       return id;
  }

   public void setId(int id) {
       this.id = id;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       this.age = age;
  }

   public Date getDate() {
       return date;
  }

   public void setDate(Date date) {
       this.date = date;
  }

   public String getEmail() {
       return email;
  }

   public void setEmail(String email) {
       this.email = email;
  }

   public String getAddress() {
       return address;
  }

   public void setAddress(String address) {
       this.address = address;
  }
}

工具类:

package com.qf.person;

import com.qf.JDBC2.DBUtils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtils {
   //1.提供一个私有的静态常量,存储配置文件的map
   private  static final Properties PROPERTIES = new Properties();
   static {
       //2.拿到一个字节流,通过DBUtils类对象的一个方法拿到
       InputStream is = com.qf.JDBC2.DBUtils.class.getResourceAsStream("/db.properties");
       try {
           PROPERTIES.load(is);//3.通过流,将配置文件内容以键值对的形式存储到PROPERTIES集合
           Class.forName(PROPERTIES.getProperty("driver"));//通过PROPERTIES.getProperty去拿那个键
      } catch (IOException e) {
           e.printStackTrace();
      } catch (ClassNotFoundException e) {
           e.printStackTrace();
      }

  }
   public static Connection getConnection(){
       Connection connection = null;
       try {
           connection= DriverManager.getConnection(PROPERTIES.getProperty("url"),PROPERTIES.getProperty("name"),PROPERTIES.getProperty("password"));
      } catch (SQLException e) {
           e.printStackTrace();
      }
       return connection;

  }
   public static void closeAll(Connection connection, Statement statement,ResultSet resultSet){
       try {
           if(resultSet!=null){
               resultSet.close();
          }
           if(statement!=null){
               statement.close();
          }
           if(connection!=null){
               connection.close();
          }
      } catch (SQLException e) {
           e.printStackTrace();
      }
  }
}

增加数据操作:

package com.qf.person;

public class TestPersonInsert {
   public static void main(String[] args) {
   //测试新增
       PersonDaoImpl personDao = new PersonDaoImpl();
       Person1 person = new Person1("Gavin",18,null,"Gavin@163.com","北京市海淀区");
       int result = personDao.insert(person);
       if(result==1){
           System.out.println("新增成功!");
      }else{
           System.out.println("新增失败!");
      }
  }
}

修改:

package com.qf.person;

public class TestPersonUpdate {
   public static void main(String[] args) {
       PersonDaoImpl personDao = new PersonDaoImpl();
       Person1 person1 = new Person1(1,"Aaron",20,null,"2312321@QQ.com","北京市昌平区");
       int result = personDao.update(person1);
       if(result==1){
           System.out.println("修改成功!");

      }else{
           System.out.println("修改失败!");
      }
  }
}

删除:

package com.qf.person;

public class TestDelete {
   public static void main(String[] args) {
       PersonDaoImpl personDao= new PersonDaoImpl();
       int result = personDao.delete(2);
       if (result==1){
           System.out.println("删除成功!");
      }else{
           System.out.println("删除失败!");
      }
  }
}

单体查询:

package com.qf.person;

public class TestPersonSelect {
   public static void main(String[] args) {
       PersonDaoImpl personDao = new PersonDaoImpl();
       Person1 person1 = personDao.select(1);
       System.out.println(person1);
  }
}

查询所有:

package com.qf.person;

import java.util.List;

public class TestPersonSelectAll {
   public static void main(String[] args) {
       PersonDaoImpl personDao = new PersonDaoImpl();
       List<Person1> person1List = personDao.selectAll();
       for (Person1 p :person1List){
           System.out.println(p);
      }
  }
}
 

posted on 2023-02-02 10:53  张铁蛋666  阅读(122)  评论(0)    收藏  举报

导航