Java进阶-主流框架总结与详解

举报
Damon小智 发表于 2024/03/18 04:16:28 2024/03/18
【摘要】 本文详细介绍了Java的主流框架,包括Spring、Hibernate、Spring Boot等。通过对每个框架的功能、特点以及在实际开发中的应用进行分析和比较,读者可以更好地了解各框架的适用场景和优劣势。同时,本文还强调了Java框架在提升开发效率、简化开发流程和提高代码质量方面的重要性。对于Java开发者来说,选择合适的框架对项目的成功至关重要,因此本文的内容对他们具有很高的参考价值。

一、Java框架概述

Java开发领域涵盖了众多框架,这些框架提供了丰富的功能和工具,帮助开发人员更高效地构建应用程序。其中,Spring框架是最为广泛应用的之一,它提供了全方位的解决方案,包括依赖注入、面向切面编程等,大大简化了企业级应用的开发。另外,Hibernate框架则为数据持久化提供了便捷的解决方案,将对象与数据库表映射起来,使得开发者可以使用面向对象的思维来处理数据库操作。而Spring Boot框架则是在Spring基础之上构建的,通过自动化配置和快速启动,使得开发者能够更快速地搭建和部署应用程序。除此之外,还有Struts、MyBatis等框架在不同场景下发挥着重要作用。本文将对这些框架进行深入分析,并探讨它们在实际开发中的应用与优缺点。


二、Spring框架

Spring框架是Java平台上的一个轻量级的应用开发框架,它提供了广泛的功能,包括依赖注入、面向切面编程、控制反转等。Spring框架的核心是IoC(控制反转)容器,它简化了应用程序的配置和开发过程。

1、Spring核心模块

  • Spring IoC容器: 负责管理应用程序中的对象,通过依赖注入将对象组装起来。
  • Spring AOP模块: 提供面向切面编程的支持,可以在程序运行期间动态地将代码切入到方法执行前后。
  • Spring JDBC模块: 提供了对JDBC的封装,简化了数据库操作。
  • Spring事务管理: 支持声明式事务管理和编程式事务管理。

2、Spring Boot

Spring Boot是Spring框架的扩展,它简化了Spring应用程序的配置和部署过程。通过自动配置和约定优于配置的原则,Spring Boot可以快速搭建起一个生产级别的Spring应用程序。

Spring Boot目录结构示例:

spring-boot-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com/
│   │   │   │   └── example/
│   │   │   │       ├── controller/             # 控制器层
│   │   │   │       │   └── ExampleController.java
│   │   │   │       ├── model/                  # 实体类
│   │   │   │       │   └── ExampleEntity.java
│   │   │   │       ├── dao/                    # DAO层
│   │   │   │       │   └── ExampleDao.java
│   │   │   │       ├── service/                # 服务类
│   │   │   │       │   ├── ExampleService.java
│   │   │   │       │   └── impl/               # 服务类实现
│   │   │   │       │       └── ExampleServiceImpl.java
│   │   │   ├── resources/
│   │   │   │   ├── application.properties      # Spring Boot配置文件
│   │   │   │   ├── static/                     # 静态文件目录
│   │   │   │   │   └── css/
│   │   │   │   │       └── index.css
│   │   │   │   │   └── js/
│   │   │   │   │       └── index.js
│   │   │   │   └── templates/                  # 模板文件目录
│   │   │   │       └── index.html
│   │   │   └── xml/                            # XML配置文件目录
│   │   │       └── applicationContext.xml
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── ApplicationTests.java
└── pom.xml

在上述示例中:

  • controller/ 存放控制器层的Java类文件,用于处理请求和响应。
  • model/ 存放实体类的Java类文件,用于定义数据模型。
  • dao/ 存放DAO(数据访问对象)层的Java类文件,用于数据库的访问操作。
  • service/ 存放服务类的Java类文件,用于业务逻辑的处理。
  • impl/ 存放服务类的实现文件。
  • static/ 存放静态文件的目录,如CSS、JavaScript等。
  • templates/ 存放模板文件的目录,如HTML页面。
  • xml/ 存放XML配置文件的目录,如Spring配置文件等。

因为是非常主流的框架,内容不过多叙述,我之前写过很多关于SpringBoot的文章,可以前去详细学习。


3、Spring MVC

Spring MVC基于Spring框架的Web框架,简化了Web应用程序的开发过程。Spring MVC采用MVC(Model-View-Controller)架构模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三层。它提供了丰富的注解支持、数据绑定、表单处理等功能,使得开发者可以更轻松地构建灵活可扩展的Web应用程序。

目录结构示例:

spring-mvc-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── controller/
│   │   │           │   └── HomeController.java
│   │   │           └── Application.java
│   │   ├── resources/
│   │   │   ├── static/
│   │   │   │   └── css/
│   │   │   │       └── style.css
│   │   │   ├── templates/
│   │   │   │   └── home.jsp
│   │   │   ├── application.properties
│   │   │   └── dispatcher-servlet.xml
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── controller/
│                       └── HomeControllerTest.java
├── webapp/
│   ├── WEB-INF/
│   │   ├── views/
│   │   │   └── home.jsp
│   │   └── web.xml
└── pom.xml
  • src/main/resources/dispatcher-servlet.xml:Spring MVC配置文件,配置了控制器扫描、视图解析器等信息。
  • webapp/WEB-INF/views/home.jsp:视图页面,展示来自控制器的数据。
  • webapp/WEB-INF/web.xml:Servlet配置文件,配置了DispatcherServlet,Spring MVC的核心控制器。

简单代码示例:

HomeController.java: 控制器类,处理来自前端的请求。

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC!");
        return "home";
    }
}

home.jsp: 视图页面,展示来自控制器的数据。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Spring MVC Example</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

web.xml: Servlet配置文件,配置了DispatcherServlet,Spring MVC的核心控制器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>Spring MVC Example</display-name>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

dispatcher-servlet.xml: Spring MVC配置文件,配置了控制器扫描、视图解析器等信息。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven/>
    <context:component-scan base-package="com.example"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

这个示例展示了一个简单的Spring MVC应用程序,包括了一个控制器类、一个JSP视图页面以及相关的Servlet和Spring MVC配置文件。


三、Hibernate框架

Hibernate是一个优秀的对象关系映射(ORM)框架,它将Java对象映射到数据库表,使得开发人员可以通过面向对象的方式来操作数据库。Hibernate框架简化了数据库操作,提高了开发效率。

1、Hibernate核心特性

  • 对象关系映射: 将Java对象映射到数据库表。
  • Hibernate查询语言(HQL): 类似于SQL,但是使用面向对象的方式来查询数据。
  • Hibernate缓存: 提供了一级缓存和二级缓存,提高了数据访问的性能。
  • Hibernate事务管理: 支持声明式事务管理和编程式事务管理。

2、Hibernate的目录结构

hibernate-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── model/
│   │   │           │   └── Entity.java
│   │   │           ├── dao/
│   │   │           │   └── EntityDao.java
│   │   │           └── service/
│   │   │               └── EntityService.java
│   │   ├── resources/
│   │   │   ├── hibernate.cfg.xml
│   │   │   └── mappings/
│   │   └── webapp/
│   │       ├── WEB-INF/
│   │       │   └── views/
│   │       │       └── entity-view.jsp
│   │       ├── static/
│   │       │   ├── js/
│   │       │   │   └── script.js
│   │       │   ├── css/
│   │       │   │   └── style.css
│   │       │   └── images/
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── EntityDaoTest.java
└── pom.xml

在上述示例中:

  • com/example/model/目录存放实体类Entity.java
  • com/example/dao/目录存放数据访问对象(DAO)类EntityDao.java
  • com/example/service/目录存放服务类EntityService.java
  • resources/目录存放Hibernate配置文件hibernate.cfg.xml和映射文件夹mappings/
  • webapp/WEB-INF/views/目录存放JSP视图文件entity-view.jsp
  • webapp/static/js/目录存放JavaScript文件script.js
  • webapp/static/css/目录存放CSS样式文件style.css

四、MyBatis持久层框架

MyBatis是一个优秀的持久层框架,通过XML或注解的方式将Java方法映射到SQL查询。MyBatis相比Hibernate,更加灵活,更适用于需要对SQL进行精细控制的场景。它支持动态SQL、延迟加载、存储过程调用等特性,为开发者提供了丰富的操作数据库的方式。

1、MyBatis框架特性

MyBatis 是一个优秀的持久层框架,具有以下核心特性:

  • 简化的SQL操作: MyBatis通过XML或注解的方式将Java方法映射到SQL查询,使得SQL操作更加简洁明了。
  • 灵活的映射: MyBatis支持将查询结果映射为Java对象,使得数据库操作更贴近于面向对象的编程思想。
  • 缓存机制: MyBatis提供了一级缓存和二级缓存,可以有效地提高数据访问的性能。
  • 动态SQL: MyBatis支持动态SQL,可以根据条件动态生成SQL语句,提高了SQL的灵活性和可维护性。
  • 与Spring集成: MyBatis与Spring框架无缝集成,通过Spring的依赖注入管理MyBatis的Mapper对象,简化程序的配置和开发。

2、MyBatis框架的目录结构

mybatis-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           ├── mapper/
│   │   │           │   └── EntityMapper.java
│   │   │           └── model/
│   │   │               └── Entity.java
│   │   └── resources/
│   │       └── mybatis-config.xml
│   └── test/
│       └── java/
│           └── com/
│               └── example/
│                   └── EntityMapperTest.java
└── pom.xml

3、基于MyBatis框架的代码示例

以下是一个使用MyBatis进行数据持久化的简单示例:

Entity.java: 实体类,对应数据库中的表。

package com.example.model;

public class Entity {
    private Long id;
    private String name;
    private Integer age;

    // Getters and setters
    // 省略...
}

EntityMapper.java: MyBatis的Mapper接口,定义了对实体类进行增删改查的方法。

package com.example.mapper;

import com.example.model.Entity;
import java.util.List;

public interface EntityMapper {
    void insert(Entity entity);
    void update(Entity entity);
    void delete(Long id);
    Entity findById(Long id);
    List<Entity> findAll();
}

mybatis-config.xml: MyBatis的配置文件,配置了数据源、Mapper接口等信息。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/example/mapper/EntityMapper.xml"/>
    </mappers>
</configuration>

EntityMapper.xml: MyBatis的Mapper XML文件,定义了SQL语句和与之对应的Mapper接口方法。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.EntityMapper">
    <resultMap id="BaseResultMap" type="com.example.model.Entity">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age
    </sql>

    <insert id="insert" parameterType="com.example.model.Entity">
        INSERT INTO entity (name, age) VALUES (#{name}, #{age})
    </insert>

    <update id="update" parameterType="com.example.model.Entity">
        UPDATE entity SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Long">
        DELETE FROM entity WHERE id = #{id}
    </delete>

    <select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT <include refid="Base_Column_List"/> FROM entity WHERE id = #{id}
    </select>

    <select id="findAll" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_List"/> FROM entity
    </select>
</mapper>

这个示例展示了如何使用MyBatis进行简单的数据持久化操作,包括定义实体类、Mapper接口和XML文件,并实现了对数据库中实体的增删改查功能。


五、Apache Struts

Apache Struts是一个流行的Web应用程序框架,提供了MVC架构的支持。Apache Struts基于Java Servlet和JavaServer Pages(JSP)技术,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三层。它提供了丰富的标签库、表单验证、国际化等功能,为开发者构建可维护的Web应用程序提供了便利。

1、Struts框架的目录结构

struts-example/
├── src/
│   └── com/
│       └── example/
│           └── action/
│               └── HelloAction.java
├── WebContent/
│   ├── META-INF/
│   │   └── MANIFEST.MF
│   ├── WEB-INF/
│   │   ├── lib/
│   │   │   └── (Struts相关jar包)
│   │   ├── classes/
│   │   │   └── (编译后的.class文件)
│   │   └── struts.xml
│   └── hello.jsp
└── pom.xml

2、基于Struts框架的代码示例

  • src/com/example/action/:存放Action类的源代码。
  • WebContent/:Web应用程序的根目录。
    • META-INF/:存放项目的元数据信息。
    • WEB-INF/:存放Web应用程序的配置文件和部署描述符。
      • lib/:存放Struts框架和其他依赖的jar包。
      • classes/:存放编译后的.class文件。
      • struts.xml:Struts框架的配置文件,定义了Action和视图之间的映射关系。
    • hello.jsp:JSP视图页面,展示来自Action的数据。

以下是一个简单的Apache Struts的代码示例:

HelloAction.java: Struts的Action类,处理来自前端的请求。

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {

    private String message;

    public String execute() {
        message = "Hello, Struts!";
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }
}

hello.jsp: 视图页面,展示来自Action的数据。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Apache Struts Example</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

struts.xml: Struts配置文件,配置了Action和视图的映射关系。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="com.example.action.HelloAction">
            <result name="success">/hello.jsp</result>
        </action>
    </package>
</struts>

这个示例展示了一个简单的Apache Struts应用程序,包括了一个Action类、一个JSP视图页面以及相关的Struts配置文件。


六、Java框架总结

Java框架为开发人员提供了丰富的工具和功能,帮助他们更高效地构建应用程序。本文介绍了一些常用的Java框架,包括Spring框架、Hibernate框架等。通过对这些框架的介绍与详解,读者可以更好地理解它们的特点和优势,为选择合适的框架和提升开发效率提供参考。希望本文能够对读者在Java开发中的实践与探索起到一定的指导作用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。