继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java主流框架实战入门教程

qq_花开花谢_0
关注TA
已关注
手记 224
粉丝 8
获赞 34

本文详细介绍了Java主流框架Spring、MyBatis、Hibernate和Struts2的基本概念和实战应用,帮助读者掌握框架的使用方法,并在实际开发中不断积累经验。文章内容涵盖了框架的基本概念、配置方法和常用功能,旨在提高开发效率和质量。

Java主流框架简介

在软件开发中,框架是一种半成品软件,它提供了一个基础结构,使得开发人员能够在其上构建应用而无需从头开始编写所有的代码。框架的作用在于简化开发过程、提高开发效率和可维护性。以下是框架的一些主要优势:

  • 减少重复代码:框架可以提供一些通用的代码,避免了开发人员重复编写相同的代码。
  • 提高开发效率:框架提供了大量的组件和功能,可以快速搭建应用。
  • 提高可维护性:框架能够通过标准化的接口和方法,使得代码更加规范,便于维护。
  • 支持可扩展性:框架通常设计为插件化,可以方便地扩展新功能。
  • 降低错误率:框架经过广泛的测试和验证,减少了开发人员的错误率。

Java平台上有许多成熟的框架,以下是一些常用的Java框架:

  • Spring:提供全面的企业级应用开发支持,包括依赖注入、AOP(面向切面编程)、事务管理、Web应用开发等。
  • MyBatis:是一个优秀的持久层框架,能够将SQL映射到Java对象。
  • Hibernate:是一个对象关系映射框架,易于使用。
  • Struts2:是一个广泛使用的MVC框架,用于构建基于Java的Web应用。
Spring框架实战

Spring是一个轻量级的Java应用框架,它提供了全面的企业级应用开发支持,包括依赖注入、AOP(面向切面编程)、事务管理、Web应用开发等。Spring框架的核心是依赖注入(DI)和控制反转(IoC)。

依赖注入(DI)

依赖注入是一种设计模式,通过它,对象的依赖关系不是在对象的内部定义,而是在外部配置,由容器动态注入。

控制反转(IoC)

控制反转是DI的一种实现,它将对象的创建和配置交给Spring容器来管理。

Spring环境搭建

设计一个简单的Spring应用

  1. 创建一个Java项目,例如使用Eclipse或者IntelliJ IDEA。
  2. 在项目中引入Spring的jar包,可以使用Maven或手动添加jar包。

使用Maven来管理依赖,可以在pom.xml文件中添加以下内容:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.10</version>
    </dependency>
</dependencies>

创建一个简单的Java类

package com.example.demo;

public class SimpleBean {
    private String message;

    public SimpleBean() {
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

使用Spring配置文件配置bean

在Spring应用中,通常使用XML配置文件来定义bean及其依赖关系。创建一个beans.xml文件,并定义SimpleBean

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

    <bean id="simpleBean" class="com.example.demo.SimpleBean">
        <property name="message" value="Hello, World!"/>
    </bean>
</beans>

创建主类来获取bean

编写一个主类来获取并使用Spring容器管理的bean。

package com.example.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        SimpleBean simpleBean = (SimpleBean) context.getBean("simpleBean");
        System.out.println(simpleBean.getMessage());
    }
}

使用注解配置bean

使用注解来配置bean,可以简化配置文件的编写。在SimpleBean类中添加注解:

package com.example.demo;

import org.springframework.stereotype.Component;

@Component
public class SimpleBean {
    private String message;

    public SimpleBean() {
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

在主类中使用@Autowired注解来自动注入bean:

package com.example.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(MainApp.class);
        SimpleBean simpleBean = context.getBean(SimpleBean.class);
        System.out.println(simpleBean.getMessage());
    }
}
Spring核心功能实战

AOP(面向切面编程)

Spring支持AOP,允许在不改变原始代码的基础上添加功能,如日志、事务管理等。

package com.example.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.After;

@Aspect
public class LogAspect {
    @Before("execution(* com.example.demo.SimpleBean.*(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        System.out.println("Before method: " + joinPoint.getSignature().getName());
    }

    @After("execution(* com.example.demo.SimpleBean.*(..))")
    public void afterAdvice(JoinPoint joinPoint) {
        System.out.println("After method: " + joinPoint.getSignature().getName());
    }
}

事务管理

Spring提供了声明式的事务管理,可以配置事务管理器和事务属性。

package com.example.demo;

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionTemplate;

public class TransactionManagerDemo {
    private PlatformTransactionManager transactionManager;
    private TransactionTemplate transactionTemplate;

    public void setupTransactionManager(PlatformTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
        this.transactionTemplate = new TransactionTemplate(this.transactionManager);
    }

    public void performTransaction() {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                // 执行数据库操作
            }
        });
    }
}
MyBatis框架实战

MyBatis是一个优秀的持久层框架,它简化了数据库操作,将SQL语句映射到Java对象。MyBatis的核心是SqlSession,它提供了一系列方法来执行SQL映射文件中定义的SQL。

MyBatis环境搭建

创建一个简单的数据库表

假设有一个用户表users,包含字段idname

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

创建Java实体类

定义一个简单的Java类User

package com.example.demo;

public class User {
    private int id;
    private String name;

    public User() {}

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

MyBatis配置文件

创建mybatis-config.xml配置文件,配置数据库连接和映射文件路径。

<?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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/demo/UserMapper.xml"/>
    </mappers>
</configuration>

创建SQL映射文件

创建UserMapper.xml文件,定义SQL语句和对应的Java对象映射。

<?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.demo.UserMapper">
    <select id="selectUserById" resultType="com.example.demo.User">
        SELECT id, name FROM users WHERE id = #{id}
    </select>
</mapper>

测试MyBatis

编写一个测试类来演示如何使用MyBatis。

package com.example.demo;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            User user = session.selectOne("com.example.demo.UserMapper.selectUserById", 1);
            System.out.println(user.getName());
        }
    }
}

MyBatis事务管理

配置事务管理,确保在执行数据库操作时能够正确处理事务。

<transactionManager type="JDBC">
    <property name="defaultAutoCommit" value="false"/>
</transactionManager>

MyBatis缓存机制

配置缓存机制,提高查询性能。

<cache />

MyBatis插件使用

使用MyBatis插件进行数据库操作的优化。

<plugins>
    <plugin interceptor="com.example.demo.MyBatisPlugin">
        ...
    </plugin>
</plugins>
MyBatis常用功能实战

动态SQL

MyBatis支持动态SQL,可以在运行时决定执行哪些SQL语句。

<if test="name != null">
    AND name = #{name}
</if>

分页查询

MyBatis可以通过配置参数来实现分页查询。

<select id="selectUsersPaged" resultType="com.example.demo.User">
    SELECT id, name FROM users
    LIMIT #{offset}, #{limit}
</select>
Hibernate框架实战

Hibernate是一个对象关系映射(ORM)工具,它允许使用面向对象的方式操作数据库。Hibernate的核心是Session对象,它提供了对持久化对象的管理功能。

Hibernate环境配置

创建实体类

定义一个简单的Java类User,并使用注解进行配置。

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    public User() {}

    public User(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

配置Hibernate

创建hibernate.cfg.xml配置文件,配置数据库连接信息。

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping class="com.example.demo.User"/>
    </session-factory>
</hibernate-configuration>

编写测试类

编写一个测试类来演示如何使用Hibernate。

package com.example.demo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import java.util.List;

public class HibernateDemo {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        // 插入数据
        User user = new User("John Doe");
        session.save(user);

        // 查询数据
        List<User> users = session.createQuery("FROM User").list();
        for (User u : users) {
            System.out.println(u.getName());
        }

        session.getTransaction().commit();
        session.close();
    }
}

Hibernate常用操作

插入数据

session.save(new User("Jane Doe"));

查询数据

List<User> users = session.createQuery("FROM User").list();

更新数据

User user = session.get(User.class, 1);
user.setName("Jane Smith");
session.update(user);

删除数据

User user = session.get(User.class, 1);
session.delete(user);

事务管理

session.beginTransaction();
// 执行操作
session.getTransaction().commit();

关联关系配置

配置一对多关联关系。

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String orderNumber;

    @OneToMany(mappedBy = "order")
    private List<OrderItem> orderItems;

    // 构造函数、getter和setter方法
}

@Entity
public class OrderItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private int quantity;

    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;

    // 构造函数、getter和setter方法
}
Struts2框架实战

Struts2是一个MVC(模型-视图-控制器)框架,用于构建Java Web应用。它支持JSP、FreeMarker、Tiles等多种视图技术,能够方便地处理Web请求和响应。

Struts2环境搭建

创建一个简单的Web项目

使用Eclipse或者IntelliJ IDEA创建一个Web项目,引入Struts2相关的jar包。

<dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.5.20</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
</dependencies>

创建一个简单的Java类

定义一个简单的Java类User

package com.example.demo;

public class User {
    private String name;

    public User() {}

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建一个简单的Action类

package com.example.demo;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String execute() {
        return "success";
    }
}

Struts2配置文件

创建struts.xml配置文件,配置Action和视图路径。

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="userAction" class="com.example.demo.UserAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

创建JSP页面

创建一个简单的JSP页面success.jsp来展示结果。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Success</title>
</head>
<body>
    <h1>Welcome, ${user.name}!</h1>
</body>
</html>

测试Struts2应用

在浏览器中访问/userAction,查看结果。

Struts2项目开发基础

页面请求

页面请求时,Struts2会根据配置文件中的struts.xml,将请求映射到相应的Action类。

数据提交

表单提交时,Struts2会将表单数据绑定到Action类的属性上。

<form action="userAction" method="post">
    <input type="text" name="user.name" />
    <input type="submit" value="Submit" />
</form>

请求转发与重定向

Struts2的Action类可以返回不同的结果,根据结果名来决定是转发到新的页面还是重定向到URL。

public String execute() {
    return "success";
}

拦截器配置

配置拦截器来处理权限控制等需求。

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="loginCheck" class="com.example.demo.LoginInterceptor"/>
        </interceptors>
        <action name="userAction" class="com.example.demo.UserAction">
            <interceptor-ref name="loginCheck"/>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>
测试与部署
单元测试与集成测试

单元测试

单元测试是对软件中的最小可测试单元进行检查和验证,通常是对单个方法或函数的测试。

Maven Surefire插件

使用Maven的Surefire插件进行单元测试。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
        </plugin>
    </plugins>
</build>

示例单元测试

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class SimpleBeanTest {
    @Test
    public void testGetMessage() {
        SimpleBean bean = new SimpleBean();
        bean.setMessage("Hello, Unit Test!");
        assertEquals("Hello, Unit Test!", bean.getMessage());
    }
}

集成测试

集成测试是对整个系统或者其关键部分进行测试,确保各模块能够协同工作。

示例集成测试

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNotNull;

public class UserActionTest {
    @Test
    public void testUserAction() {
        UserAction action = new UserAction();
        action.setUser(new User("John Doe"));
        assertNotNull(action.execute());
    }
}
项目的打包与部署

打包项目

使用Maven的mvn package命令打包项目,生成一个WAR文件。

mvn package

部署项目

将生成的WAR文件部署到应用服务器,如Apache Tomcat。

java -jar target/your-app.war

部署到云平台

也可以将项目部署到云平台,如阿里云、腾讯云等。

mvn clean package
aws s3 cp target/your-app.war s3://your-bucket/your-app.war

监控与日志

部署后,可以通过日志文件监控应用的状态,及时发现并解决问题。

tail -f logs/catalina.out
总结

通过本教程,我们深入学习了Java主流框架Spring、MyBatis、Hibernate、Struts2的基本概念、环境搭建和常用功能实战。掌握了这些框架,可以大大提高Java应用开发的效率和质量。建议在实际开发中多实践,熟悉框架的用法,不断积累经验。希望本文能够帮助大家更好地理解和应用这些框架。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP