JDBC---DAO mode

JDBC—DAO mode

Foreword : The JDBC mentioned before is very troublesome due to the repeated creation of connections, closing resources, etc., so on the basis of the previous, we optimize it,Use interfaces, implementation classes, and configuration files to implement JDBC, and store query results in objects

DAO—DataBaseAccessObject (data access object) is an object-oriented database interface, which actually encapsulates JDBC

Features:
Insert picture description here
Next, let’s give an example

[Note: The following codes may have order issues]

dao layers

package dao;

public interface BaseDao {
    //声明一些会经常使用的方法
    void getConn(String Driver,String url,String username,String passwd);		//创键连接
    void query(String sql,String... params);									//查询
    boolean update(String sql,String... params);								//增删改
    void close();																//关闭资源
}

Impl layer

package dao.impl;

import dao.BaseDao;
import java.sql.*;

public class BaseDaoImpl implements BaseDao {				//BaseDao的实现类
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;

    public ResultSet getRs() {
        return rs;
    }

    @Override
    public void getConn(String Driver,String url, String username, String passwd) {
        try {
            Class.forName(Driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            conn = DriverManager.getConnection(url,username,passwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void query(String sql, String... params) {
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0;params!=null && i < params.length; i++) {
                ps.setObject(i+1,params[i]);
            }
            rs = ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean update(String sql, String... params) {
        int num = 0;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0;null!=params && i < params.length; i++) {
                ps.setObject(i+1,params[i]);
            }
            num = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return num>0;
    }

    @Override
    public void close() {
        try {
            if(null!=rs)		//偷懒的写法
                rs.close();
            if(null!=ps)
                ps.close();
            if(null!=conn)
                conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

And StudentDao class

package dao.impl;

import entity.Student;
import util.Prop;
import java.sql.ResultSet;
import java.sql.SQLException;

public class StudentDao extends BaseDaoImpl {

    //从配置文件中数据库读取信息
    private final String DRIVER = Prop.getValue("DRIVER");
    private final String URL = Prop.getValue("URL");
    private final String USERNAME = Prop.getValue("USERNAME");
    private final String PASSWORD = Prop.getValue("PASSWORD");

    //根据学生ID查询所有信息
    public Student getStudentById(String id){
        String sql = "select * from student where stuId  = ?";
        getConn(DRIVER,URL,USERNAME,PASSWORD);
        query(sql,id);
        ResultSet rs = getRs();
        Student s = new Student();
        try {
            if(rs.next()){
                s.setStuId(rs.getInt("stuID"));
                s.setStuName(rs.getString("stuName"));
                s.setGradeId(rs.getInt("gradeId"));
                s.setStuGender(rs.getString("stuGender"));
                s.setStuAddr(rs.getString("stuAddr"));
                s.setStuPhone(rs.getString("stuPhone"));
                s.setStuIdcard(rs.getString("stuIdcard"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close();
        }
        return s;
    }

    //插入数据
    public void insertInfo(String id,String name,String gradeid,String gender){
        String sql = "insert into student (stuId,stuName,gradeId,stuGender)values(?,?,?,?)";
        getConn(DRIVER,URL,USERNAME,PASSWORD);
        update(sql,id,name,gradeid,gender);
    }

    public static void main(String[] args) {				//测试类
        StudentDao dao = new StudentDao();
        //dao.insertInfo("10","宋慧乔","3","女");
        Student student = dao.getStudentById("10");
        System.out.println(student);
    }

}

entity layer

package entity;

public class Student {		//根据表格的字段属性创键实体类
    private int stuId;
    private String stuName;
    private int gradeId;
    private String stuGender;
    private String stuAddr;
    private String stuPhone;
    private String stuIdcard;

    public int getStuId() {
        return stuId;
    }

    public void setStuId(int stuId) {
        this.stuId = stuId;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getGradeId() {
        return gradeId;
    }

    public void setGradeId(int gradeId) {
        this.gradeId = gradeId;
    }

    public String getStuGender() {
        return stuGender;
    }

    public void setStuGender(String stuGender) {
        this.stuGender = stuGender;
    }

    public String getStuAddr() {
        return stuAddr;
    }

    public void setStuAddr(String stuAddr) {
        this.stuAddr = stuAddr;
    }

    public String getStuPhone() {
        return stuPhone;
    }

    public void setStuPhone(String stuPhone) {
        this.stuPhone = stuPhone;
    }

    public String getStuIdcard() {
        return stuIdcard;
    }

    public void setStuIdcard(String stuIdcard) {
        this.stuIdcard = stuIdcard;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuId=" + stuId +
                ", stuName='" + stuName + '\'' +
                ", gradeId=" + gradeId +
                ", stuGender='" + stuGender + '\'' +
                ", stuAddr='" + stuAddr + '\'' +
                ", stuPhone='" + stuPhone + '\'' +
                ", stuIdcard='" + stuIdcard + '\'' +
                '}';
    }
}

Configure the database file
1. Create a key resoureces folder
[Note: Create a resources folder in the project directory]
Insert picture description here
and set it as a resource folder
Insert picture description here

2. Create the key db.properties file
[Note: Why is the properties file, because Java has a special method to read the properties file]

The configuration information is as perkey=valueForm, write the Insert picture description here
util layer

public class Prop {
    static Properties p = new Properties(); 		//Java专门加载配置文件
    static {
            try {
                p.load(new FileInputStream("resources/db.properties"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    public static String getValue(String key){
        return p.getProperty(key);
    }
}

Guess you like

Origin blog.csdn.net/qq_43288259/article/details/114536646