数据库与idea项目的底层结构

  1. 建立好项目以后,首先配置.xml文件 添加数据库链接包 数据库连接池包 、(junit架包)JUnit是一个开放源代码的测试框架,用于编写和运行可重复的测试 、jakarta架包 ,我自己喜欢加上lombok架包

  1. 以下以学生表(student)为例:

CREATE TABLE `student` (
  `sid` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8mb3;

pojo:存放实体类

建立需要实例化的类 student

dao :持久层 主要负责数据库的连接和处理

Impl: 实现某写接口的类,一般是定义一些规范的类

web:存放web文件的

service:业务层

Dao主要做数据库的交互工作

Modle 是模型 存放你的实体类

Service 做相应的业务逻辑处理

Action是一个控制器

Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打交道的事情全是ta管。对象的调用流程:JSP—Action—Service—DAO—Hibernate—数据库。(粗体是自己需要码代码的)

PS:所以我觉得在之前SpringMVC的例子中,HiFirstApp就是一个JSP与Action的集合体。它调用了BookService,然后BookService调用了BookDao。

在pojo中的实体类:

//这里我直接使用的是lombok的组件,在pom.xml中可以设置的
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer sid;
    private String  name;
    private Integer age;
    private Date birthday;
}

在dao包中:

建立studentDao的接口,利用list集合进行进行输出查询的所有数据

    //查询所有学生信息
    public abstract ArrayList<Student> findAll();
    //进行数据添加
    int insert(Student stu);

    //进行数据的更新
    int update(Student stu);

    //根据id查询数据
    public abstract Student findById(Integer sid);

    //删除数据
    public int delete(Integer id);

建立Impl的类,继承studentDao,进行覆盖重写,在这个Impl类中,进行数据库的链接,定义sql语句,进行数据遍历

public class impl implements StudentDao {
    public static int insert;

    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;

    //这里也是Array接口格式,不用的话,在findall的做后要进行格式的转换
    public static ArrayList<Student> list = new ArrayList<>();

    //进行数据的查询
    @Override
    //变为Arraylist就能用,List类会报错
    public ArrayList<Student> findAll() {

        try {
            //注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取链接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1",
                    "root", "1357");
            //获取执行对象
            st = conn.createStatement();
            //编写sql执行语句
            String sql = "select * from student";
            //获取结构
            //执行查询
            rs = st.executeQuery(sql);
            //遍历集合,进行结果集的处理
            while (rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
                Student stu = new Student();
                stu.setAge(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
                list.add(stu);
            }
        } catch (Exception e) {
            //抛出异常
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return list;
    }
}

在impl包中,建立StudentService接口


public interface StudentService {
    //查询所有学生的信息
    public List<Student> findAll();

    //新增学生的信息
    int insert(Student stu);

    //修改学生的信息
    public static int update(Student stu) {
        return 0;
    }


    //删除学生的信息
    //为什么要这样子写,不能写成  int delete (Student stu)呢?
    static int delete(Integer id) {
        return 0;
    }


    //条件查询,根据id获取学生信息
    public static Student findById(Integer id) {
        return null;
    }


}

在serviceimpl中建立StudentServicelImpl类


//业务层
public class StudentServiceImpl implements StudentService {
      private StudentDao StudentDao = new impl();

      //查找所有学生信息
      @Override
      public ArrayList<Student> findAll() {
            return StudentDao.findAll();
      }

      //插入学生信息
      public int insert (Student stu){
        int insert =  StudentDao.insert(stu);
        return insert ;
      }

      //更新学生信息
     public int update (Student stu){
          int update =StudentDao.update(stu);
          return update ;

      }

      //删除学生信息

    public int delete(Student stu) {
          int delete = StudentDao.delete(2);
          return  delete ;
    }
    //根据id查询

    public Student findById(int sid) {
          return StudentDao.findById(sid);
    }
}

在web包中建立控制层的对象 StudentController


//业务层实现类
public class StudentServiceImpl implements StudentService {
      private StudentDao StudentDao = new impl();

      //查找所有学生信息
      @Override
      public ArrayList<Student> findAll() {
            return StudentDao.findAll();
      }

      //插入学生信息
      public int insert (Student stu){
        int insert =  StudentDao.insert(stu);
        return insert ;
      }

      //更新学生信息
     public int update (Student stu){
          int update =StudentDao.update(stu);
          return update ;

      }

      //删除学生信息

    public int delete(Student stu) {
          int delete = StudentDao.delete(2);
          return  delete ;
    }
    //根据id查询

    public Student findById(int sid) {
          return StudentDao.findById(sid);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值