Java_Mybatis:1. 框架概述

news2025/2/26 21:26:49

目录

1 什么是框架

1.1 框架的概念

1.2 框架要解决的问题

1.3 软件开发的分层重要性

1.4 分层开发下的常见框架

1.5 MyBatis 框架概述

2 JDBC 编程的分析

2.1 jdbc 程序的回顾

2.2 jdbc 问题分析


  • 1 什么是框架

    • 1.1 框架的概念

      • 应用方面:框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;
      • 目的方面:框架是可被应用开发者定制的应用骨架。
      • 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
    • 1.2 框架要解决的问题

      • 框架要解决的最重要的一个问题是技术整合的问题,在 J2EE 的 框架中,有着各种各样的技术,不同的软件企业需要从 J2EE 中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技术的风险性将会直接对应用造成冲击。
      • 应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。
      • 软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。
      • 框架一般处在低层应用平台(如 J2EE)和高层业务逻辑之间的中间层。
    • 1.3 软件开发的分层重要性

      • 框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。
      • 常见的MVC 软件设计思想就是很好的分层思想。
      • 通过分层更好的实现了各个部分的职责,在每一层将再细化出不同的框架,分别解决各层关注的问题。
    • 1.4 分层开发下的常见框架

      • 常见的 JavaEE 开发框架:
      • 1)解决数据的持久化问题的框架
        • MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

        • iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

        • 作为持久层的框架,还有一个封装程度更高的框架就是Hibernate,但这个框架因为各种原因目前在国内的流行程度下降太多,现在公司开发也越来越少使用。目前使用 Spring Data 来实现数据持久化也是一种趋势。
      • 2)解决 WEB 层问题的 MVC 框架
        • Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。
      • 3)解决技术整合问题的框架
        • Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
        • Spring的初衷:
          • 1、JAVA EE开发应该更加简单。
          • 2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。
          • 3、为JavaBean提供了一个更好的应用配置框架。
          • 4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。
          • 5、尽量减少不必要的异常捕捉。
          • 6、使应用程序更加容易测试。
        • Spring的目标:
          • 1、可以令人方便愉快的使用Spring。
          • 2、应用程序代码并不依赖于Spring APIs。
          • 3、Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。
        • Spring的基本组成:
          • 1、最完善的轻量级核心框架。
          • 2、通用的事务管理抽象层。
          • 3、JDBC抽象层。
          • 4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。
          • 5、AOP功能。
          • 6、灵活的MVC Web应用框架。
    • 1.5 MyBatis 框架概述

      • mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
      • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
      • 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
      • 能够更好掌握框架运行的内部过程,并且有更好的体验。
  • 2 JDBC 编程的分析

    • 2.1 jdbc 程序的回顾

    • public static void main(String[] args) {
      
          Connection connection = null;
          PreparedStatement preparedStatement = null;
          ResultSet resultSet = null;
      
          try {
              //加载数据库驱动
              Class.forName("com.mysql.jdbc.Driver");
      
              //通过驱动管理类获取数据库链接
              connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");
              
              //定义 sql 语句 ?表示占位符
              String sql = "select * from user where username = ?";
      
              //获取预处理 statement
              preparedStatement = connection.prepareStatement(sql);
      
              //设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值
              preparedStatement.setString(1, "王五");
      
              //向数据库发出 sql 执行查询,查询出结果集
              resultSet = preparedStatement.executeQuery();
      
              //遍历查询结果集
              while(resultSet.next()){
                  System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
              }
      
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              //释放资源
              if(resultSet!=null){
                  try {
                      resultSet.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
          
              if(preparedStatement!=null){
              
                  try {
                      
                      preparedStatement.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
      
              if(connection!=null){
                  try {
                      connection.close();
                  } catch (SQLException e) {
                  
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }
          }
      }
      • 上边使用 jdbc 的原始方法(未经封装)实现了查询数据库表记录的操作。
    • 2.2 jdbc 问题分析

      • 1)数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
      • 2)Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
      • 3)使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
      • 4)对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

https://app.hackthebox.com/machines/Squashed

https://app.hackthebox.com/machines/Squashed info collecting ┌──(kwkl㉿kwkl)-[~] └─$ sudo nmap -A 10.10.11.191 -T4 …

吴 军:ChatGPT不算新技术革命,带不来什么新机会

来源: 學人Scholar 吴军,1967年出生,毕业于清华大学和约翰霍普金斯大学,计算机专业博士,前Google高级资深研究员、原腾讯副总裁、硅谷风险投资人。 4月3日晚上,得到直播间邀请到了计算机科学家、自然语言模型专家吴军&…

Docker安装Elasticsearch详细步骤

1 安装elasticsearch 1.1 拉取镜像 docker pull elasticsearch:7.12.11.2 创建挂载目录 mkdir -p /app/elasticsearch/confecho "http.host: 0.0.0.0" >> /app/elasticsearch/conf/elasticsearch.ymlmkdir -p /app/elasticsearch/datamkdir -p /app/elastic…

pyest+appium实现APP自动化测试,思路全总结在这里

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs? 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#xff…

Lambda表达式的使用和省略模式

Lambda表达式的使用和省略模式一、 Lambda表达式使用1、 Lambda格式2、演示demo:线程启动,底下分别是三种实现方式3、 Lambda使用的前提4、Lambda表达式的几种类型二、省略模式1、 几种可以省略的场景2、 注意事项一、 Lambda表达式使用 1、 Lambda格式…

两种方式对el-table二次封装

1、序言 完整源码&#xff1a;el-table-example: 两种方式对el-table二次封装 最近在公司写了好多的后台管理系统&#xff0c;管理系统很大部分都是elementui下的el-table&#xff0c;el-table中有很多 <el-table-column></el-table-column>是重复的&#xff0c;像…

Redis_概述_特性_IO模型

本章要点 掌握NoSql数据库的概念和与sql数据库的区别初步了解Redis内存数据库了解Redis内存数据库的优点及其原因掌握Redis的多线程IO模型学习Redis的安装和配置 Redis简介 Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化…

Scrapy爬虫框架(概念)

Scrapy 入门教程 | 菜鸟教程 (runoob.com) Scrapy是一个快速功能强大的网络爬虫框架 Scrapy的安装 通过 pip 安装 Scrapy 框架: pip install Scrapy 安装后小测&#xff1a; 执行 scrapy ‐h Scrapy不是一个函数功能库&#xff0c;而是一个爬虫框架。 Scrapy架构图(绿线是…

【ROS2指南-4】理解ROS2话题

目标&#xff1a;使用 rqt_graph 和命令行工具来反思 ROS 2 主题。 教程级别&#xff1a;初学者 时间&#xff1a; 20分钟 内容 背景 先决条件 任务 1 设置 2 rqt_graph 3 ros2主题列表 4 ros2主题回显 5 ros2 主题信息 6 ros2界面展示 7 ros2主题发布 8 ros2 主题赫…

光纤能取代网线吗?

光纤与铜缆之间的较量已持续了十多年。现如今随着云计算、5G 等新型业务的不断涌现&#xff0c;数据中心规模不断的扩大&#xff0c;其架构与布线也越来越复杂&#xff0c;而光纤的轻量化及逐渐降低的成本&#xff0c;使得主干网设备对光纤的需求也越来越旺盛&#xff0c;在大型…

pikachu靶场-xss

XSS漏洞攻击原理跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从而达到恶意攻击用户的目的。一般XSS可以分为如下几种常见类型&#xff1a;1.反射性XSS;2.存储型XSS;3.…

成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统

梦想照进现实&#xff0c;微软果然不愧是微软&#xff0c;开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统&#xff0c;贾维斯(jarvis)全称为Just A Rather Very Intelligent System&#xff08;只是一个相当聪明的人工智能系统&#xff09;&#xff0c;它可以帮助钢铁侠托尼斯塔克…

何为智能驾驶的「摩尔定律」?这家芯片方案商给出自己的答案

“我觉得&#xff08;高速NOA&#xff09;价格下降的速度可能会是非常快的&#xff0c;”4月6日&#xff0c;地平线技术开放日上&#xff0c;地平线副总裁、软件平台产品线总裁余轶南在与高工智能汽车沟通中称&#xff0c;“到2024年底&#xff0c;约100TOPS的高速NOA&#xff…

Lottie加载的一些坑

Lottie是一个非常强大的动画库&#xff0c;可以渲染一些非常绚丽的动画。然而在使用的过程中&#xff0c;会遇到一些诡异的问题。通常&#xff0c;这不是使用方式上有什么问题&#xff0c;大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的&#xff0c;跳槽后来了个…

【详解 进程通信】之 System V 共享内存

简介大致操作步骤介绍结果展示key值的获取创建 | 获取共享内存使用共享内存段解除共享内存段销毁共享内存段&#xff08;重点&#xff09;命令行方式销毁共享内存段系统调用销毁共享内存使用共享内存进行进程间通信简介 共享内存可以让多个进程共享同一块内存&#xff0c;也就…

如何实现Chatgpt写文章(附chatgpt3.5免费接口)

申明&#xff1a;本次只是说一下实现思路&#xff0c;官方的接口以及如何实现方式&#xff0c;本文没有提及&#xff0c;这次只是一个思路&#xff0c;若想代替人工完成质量还差的很远&#xff0c;请审核大大放行 今天再次优化了代码&#xff0c;修复了一些bug&#xff0c;考虑…

单片机程序是如何运行起来

多年前在学习计算机原理的时候曾经问过老师一个问题&#xff0c;就是我们编写的程序是怎么在计算机中运行起来的&#xff0c;希望有个完整的思路&#xff0c;现在通过网络收集和整理了这个问题&#xff0c;相当于对这个问题又做了一个认识&#xff0c;有了新的体会。以stm32单片…

Go 语言切片是如何扩容的?

原文链接&#xff1a; Go 语言切片是如何扩容的&#xff1f; 在 Go 语言中&#xff0c;有一个很常用的数据结构&#xff0c;那就是切片&#xff08;Slice&#xff09;。 切片是一个拥有相同类型元素的可变长度的序列&#xff0c;它是基于数组类型做的一层封装。它非常灵活&am…

VCS4 debug with DVE

1、重点讲解&#xff1a; 在verilog源代码中嵌入VCD 系统函数&#xff0c;重点如testbench文件中。VCD文件是VCS产生的仿真波形文件&#xff0c;未经压缩&#xff0c;占用空间较大。VCD是压缩后的波形文件。 编译、仿真以生成VCD文件。 在后处理模式中使用激活DVElog对产生的…

【Javaee】SpringMVC_day01

文章目录1&#xff0c;SpringMVC简介1.1 SpringMVC概述2&#xff0c;SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目&#xff0c;并导入对应的jar包步骤2:创建控制器类步骤3:创建配置类步骤4:创建Tomcat的Servlet容器配置类步骤5:配置Tomcat环境步骤6:启动运行…