• 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);
    
    }
    
    
  • 相关阅读:
    ant构建Jmeter脚本的build文件配置(build.xml)
    Jmeter加密函数__digest总结
    Python接口自动化测试脚本-实现禅道登录
    转载:windows下安装mac虚拟机(Vmvare+mac)
    jstat监控JVM内存使用、GC回收情况
    Pycharm添加Python文件模板
    总结:Jmeter常用参数化方式
    Mysql添加索引及索引的优缺点
    Mysql常用语法
    性能测试中TPS上不去的原因
  • 原文地址:https://www.cnblogs.com/zjhzjhhh/p/15364871.html
Copyright © 2020-2023  润新知