[JDBC]dao模式统一操作数据库中的数据

在这里插入图片描述
整个项目的结构如图,其中所有的代码都在下面;

1.创建一个Dao接口

Dao接口

package com.kgc.one.Dao;

import java.io.Serializable;
import java.util.List;

/**
 * 规定所有的Dao都应该实现这个接口
 */
public interface Dao<T> {
    //增加一条记录
    public int insert(T t);
    //根据id删除一条记录
    public int delete(Serializable id);
    //修改一条记录
    public int update(T t);
    //根据id查询一条记录,将这条记录以对象的形式返回
    public T findById(Serializable id);
    //查询所以数据,将表中的每一条记录实例化一个对象,以集合形式返回
    public List<T> findAll();
}

2、创建一个entity包 包含两个实体类Student、Classes 两个类

实体类,封装student表里面的记录
这个类的属性与表的字段对应,表中有什么字段,类就有什么属性
这个类的一个对象可以封装表中的一条记录

Classes类

package com.kgc.one.entity;

public class Classes {
    private int id;
    private String name;
    private int num;

    public Classes() { }

    public Classes(int id, String name, int num) {
        this.id = id;
        this.name = name;
        this.num = num;
    }

    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 getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Classes{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}

Student类

package com.kgc.one.entity;

import java.util.Date;

/**
 * 实体类,封装student表里面的记录
 * 这个类的属性与表的字段对应,表中有什么字段,类就有1什么属性
 * 这个类的一个对象可以封装表中的一条记录
 */
public class Student {
    private  int s_id;
    private String name;
    private Date birth;
    private String sex;
    private int age;
    private int c_id;

    public Student(){}

    public Student( String name, Date birth, String sex, int age, int c_id) {
        this.s_id = s_id;
        this.name = name;
        this.birth = birth;
        this.sex = sex;
        this.age = age;
        this.c_id = c_id;
    }

    public Student(int s_id, String name, Date birth, String sex, int age, int c_id) {
        this.s_id = s_id;
        this.name = name;
        this.birth = birth;
        this.sex = sex;
        this.age = age;
        this.c_id = c_id;
    }

    public int getS_id() {
        return s_id;
    }

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public String getName() {
        return name;
    }

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

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

    public int getC_id() {
        return c_id;
    }

    public void setC_id(int c_id) {
        this.c_id = c_id;
    }

    @Override
    public String toString() {
        return "Student{" +
                "s_id=" + s_id +
                ", name='" + name + '\'' +
                ", birth=" + birth +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", c_id=" + c_id +
                '}';
    }
}

3.方法类数据访问对象【对表的操作转换成对对象的操作】

ClassesDao接口

package com.kgc.one.Dao;

import com.kgc.one.entity.Classes;

public interface ClassesDao extends Dao<Classes> {
}

StudentDao接口

package com.kgc.one.Dao;

import com.kgc.one.entity.Student;

public interface StudentDao extends Dao<Student> {
}

ClassDaoImpl类

package com.kgc.one.Dao.impl;

import com.kgc.one.Dao.ClassesDao;
import com.kgc.one.entity.Classes;
import com.kgc.one.utils.ConnectionUtils;

import java.io.Serializable;
import java.sql.ResultSet;
import java.util.List;

public class ClassesDaoImpl implements ClassesDao {
    @Override
    public int insert(Classes classes) {
        String sql="insert into classes values("+classes.getId()+",'"+classes.getName()+"',"+classes.getNum()+")";
        try{
            System.out.println("添加成功");
            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(Serializable id) {
        String sql="delete from classes where id="+id;
        try {
            System.out.println("删除成功");
            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public int update(Classes classes) {
        //update from classes set name='WEB' where id=4;
        String sql="update  classes set name='"+classes.getName()
                +"'where id=4";
        try{
            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public Classes findById(Serializable id) {
        String sql="select  * from classes where id="+id;
        try{
             ResultSet resultSet=ConnectionUtils.executeQuery(sql);
             while(resultSet.next()){
                 int c_id=resultSet.getInt(1);
                 String name=resultSet.getString(2);
                 int num=resultSet.getInt(3);
                 System.out.println(c_id+","+name+","+num);
             }
        }catch (Exception ex){
            ex.printStackTrace();
        };
        return null;
    }

    @Override
    public List<Classes> findAll() {
        String sql="select  * from classes ";
        try{
            ResultSet resultSet=ConnectionUtils.executeQuery(sql);
            while(resultSet.next()){
                int c_id=resultSet.getInt(1);
                String name=resultSet.getString(2);
                int num=resultSet.getInt(3);
                System.out.println(c_id+","+name+","+num);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        };
        return null;
    }
}

StudentDaoImpl类

package com.kgc.one.Dao.impl;

import com.kgc.one.Dao.StudentDao;
import com.kgc.one.entity.Student;
import com.kgc.one.utils.ConnectionUtils;

import java.io.Serializable;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.List;

public class StudnetDaoImpl implements StudentDao {
    @Override
    public int insert(Student student) {
        //sql语句
        //inset into student values(9,'张三','1998-02-08','男','23','1')
        //字符串转日期
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy--MM--dd");
        String rq=sdf.format(student.getBirth());
        String sql="insert into student values("+student.getS_id()+",'"+student.getName()+"','"+rq+"','"
                +student.getSex()+"','"+student.getAge()+"','"+student.getC_id()+"')";
        System.out.println(sql);
        //之前都是为了得到sql语句,然后调用ConnectionUtils.executeUpdate()连接数据库,执行sql语句
        try{

            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(Serializable id) {
        String sql="delete from student where s_id="+id;
        try{
            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public int update(Student student) {
        //update from student set s_name="李四" where s_id="08"
        String sql="update from student set s_name="+student.getName()+"where id="+student.getS_id();
        try{
            return ConnectionUtils.executeUpdate(sql);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return 0;
    }

    @Override
    public Student findById(Serializable id) {
        String sql="select * from student where s_id="+id;
        try{
            ResultSet resultSet=ConnectionUtils.executeQuery(sql);
            while(resultSet.next()) {
                int s_id = resultSet.getInt(1);
                String name = resultSet.getString(2);
                String birth = resultSet.getString(3);
                String sex = resultSet.getString(4);
                int age = resultSet.getInt(5);
                int c_id = resultSet.getInt(6);
                System.out.println(s_id + "," + name + "," + birth + "," + sex + "," + age + "," + c_id);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Student> findAll() {
        String sql="select * from student";
        try{
            ResultSet resultSet=ConnectionUtils.executeQuery(sql);
            while(resultSet.next()){
                int id=resultSet.getInt(1);
                String name=resultSet.getString(2);
                String birth=resultSet.getString(3);
                String sex=resultSet.getString(4);
                int age=resultSet.getInt(5);
                int c_id=resultSet.getInt(6);
                System.out.println(id+","+name+","+birth+","+sex+","+age+","+c_id);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }
}

ConnectionUtils类

package com.kgc.one.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 使用单例模式构造一个连接对象
 */
public class ConnectionUtils {
    private static Connection conn=null;
    private static String driver="com.mysql.cj.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
    private static String username="root";
    private static String password="123456";
    private ConnectionUtils(){}
    //在整个程序运行过程中都只会使用这一个连接
    static {
        try{
            Class.forName(driver);
            conn= DriverManager.getConnection(url,username,password);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    //调用这个方法返回一个连接
    public static Connection getConn(){
        return conn;
    }

    //执行insert delete update
    public static int executeUpdate(String sql) throws  Exception{
        Statement statement=ConnectionUtils.getConn().createStatement();
        int result=statement.executeUpdate(sql);
        return result;
    }
    //执行select
    public static ResultSet executeQuery(String sql) throws  Exception{
        Statement statement=getConn().createStatement();
        ResultSet resultSet=statement.executeQuery(sql);
        return resultSet;
    }
}

测试类 JdbcTest

package com.kgc.one;

import com.kgc.one.Dao.impl.ClassesDaoImpl;
import com.kgc.one.Dao.impl.StudnetDaoImpl;
import com.kgc.one.entity.Classes;
import com.kgc.one.entity.Student;

import java.util.Date;

public class JdbcTest {
    public static void main(String[] args) throws  Exception{
     //向学生表中增加一条数据
        StudnetDaoImpl studnetDao=new StudnetDaoImpl();
        Student student=new Student(9,"张三",new Date(),"男",23,1);
        //studnetDao.insert(student);
        //从学生表中删除一条数据
        //studnetDao.delete(9);
        //根据id查询某一条数据
        //studnetDao.findById(8);
        //查询学生表里面的所有数据
        //studnetDao.findAll();

        //对班级表进行操作
        ClassesDaoImpl classesDao=new ClassesDaoImpl();
        Classes classes=new Classes(4,"web",20);
        //插入一条数据
        //classesDao.insert(classes);
        //删除一条数据
        //classesDao.delete(6);
        //修改一条数据
        //classesDao.update(classes);
        //根据id查询一条数据
        //classesDao.findById(4);
        //查询所有数据
        classesDao.findAll();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值