JAVA笔记-MVC三层架构

MVC三层架构

什么是三层?

  • 第一层:View(表示层)

收集用户输入的数据,并且展示数据,跟用户进行交互

  • 第二层: Servicelmpl(业务逻辑层)

用户输入数据并且选择要实现的功能,是通过业务逻辑层实现的

  • 第三层: Daolmpl(数据访问层)

与数据库进行交互,用户传过来的数据进行数据库查询并且返回给用户。

image-20211002174238806

案例 Person

前言

  • utils存放工具类(DBUtils)
  • entity存放实体类(Person)
  • Dao层存放Dao接口(PersonDao)
    • impl存放Dao接口的实现类(Personimpl)
  • service层存放service接口(PersonService)
    • impl存放service接口实现类(PersonServiceimpl)
  • view存放程序的启动项,main函数

image-20211002173807753

image-20211002173655593

PersonDaoimpl.java

image-20211002194508472

我们可以看到,拿insert和update来说,这两个功能实现查的不是很多,区别在于sql语句,多了一个占位符仅此而已,其他的步骤一样。 对于增删改来说,有很多相同的内容,出现了重复代码,所以我们可以封装一个工具类,在Dao层中对数据库表的增删改查操作存在重复的部分进行抽取封装DaoUtils工具类实现重复使用。

DaoUtils.java

//DaoUtils.java
//增删改通用封装方法
package com.zjh.utils;


/*
* 封装增删改重复的部分成工具类,实现重复使用。
*
*
* */

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DaoUtils {

    public int commonUpdate(String sql,Object... args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        connection = DbUtils.getconnection();
        try {
            preparedStatement = connection.prepareStatement(sql);
           // preparedStatement.setObject(index,value);
            if (int i =0;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);

            }
            int result = preparedStatement.executeUpdate();
            return result;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DbUtils.closeAll(null,preparedStatement,null);
        }
        return 0;

    }

}

//查询通用封装方法

//DaoUtils.java
public List<Object> commonSelect(String sql, RowMapper rowMapper,Object... args){

        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<Object> list = new ArrayList<>();

        connection = DbUtils.getconnection();

        try {
            preparedStatement = connection.prepareStatement(sql);

            for(int i = 1;i<args.length;i++){
                preparedStatement.setObject(i+1,args[i]);
            }
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                //如何根据查询结果完成ORM,如何进行对象的创建与赋值
                Object object = rowMapper.getRow(resultSet);//回调 -->  调用者提供的一个封装方法ORM  需要创建一个接口
                list.add(object);
                return list;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
    

//调用grtRow()方法定义了一个接口

//RowMapper.java
package com.zjh.advanced;

import java.sql.ResultSet;

public interface RowMapper {
    public Object getRow(ResultSet resultSet);

}

posted @ 2021-10-03 19:47  A2rcher_zjh  阅读(234)  评论(0编辑  收藏  举报