基于Struts2、Spring和MyBatis的CRUD操作实践指南

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文详细介绍了如何在myeclipse2014环境下利用JDK1.7实现一个基于Struts2、Spring和MyBatis框架的CRUD应用程序。首先阐述了每个框架在MVC模式中的角色和职责,然后通过具体的步骤讲解了如何配置和实现增删查改(CRUD)操作。内容包括Struts2的Action类实现、Spring的依赖注入和事务管理、以及MyBatis的Mapper接口和XML配置。最后,还涉及了实体类、DAO和Service的设计,以及与前端交互的JSP页面的创建。本文旨在帮助读者熟练掌握这些框架的核心概念和配置,为开发更复杂的应用打下基础。 简单的struts2+spring+mybatis的增删查改操作

1. Struts2框架在Action层的应用

Struts2作为一款成熟的Java EE Web应用框架,其核心在于MVC设计模式,而Action层正是该模式中的控制层。在这一章节中,我们将深入探究Struts2框架如何在Action层被应用和实现。

1.1 Action层的职责与作用

Action层主要负责接收用户的请求(Request),并处理这些请求,最后返回相应的响应(Response)。它作为业务逻辑和视图之间的桥梁,是整个应用流程中的决策中心。Action层确保了业务逻辑的独立性和可测试性,使得整个应用更易于维护和扩展。

1.2 实现Struts2 Action的基本步骤

要在Struts2框架中实现Action层,开发者需要遵循以下步骤:

  1. 创建Action类 :继承自 ActionSupport 类或实现 Action 接口,并在其中定义业务逻辑。
  2. 配置Action映射 :在 struts.xml 文件中配置Action对应的URL以及Action类。
  3. 处理请求和返回结果 :在Action方法中处理请求,使用 ActionContext 访问请求数据,返回 ActionForward 对象或JSON/XML响应。

例如,下面是一个简单的Action类示例:

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    // Getter and setter methods

    public String execute() {
        // 业务逻辑处理
        if (validateLogin(username, password)) {
            return SUCCESS; // 返回Action.SUCCESS
        }
        return ERROR; // 返回Action.ERROR
    }

    private boolean validateLogin(String username, String password) {
        // 验证登录逻辑
        return true; // 示例中默认验证成功
    }
}

然后,在 struts.xml 中配置该Action:

<action name="login" class="com.example.LoginAction">
    <result name="success">/loginSuccess.jsp</result>
    <result name="error">/loginError.jsp</result>
</action>

通过上述步骤,我们可以看到Struts2 Action层的基本实现流程。在后续章节中,我们将探讨如何对Action进行优化和扩展,以提高应用的性能和可维护性。

2. Spring框架的依赖注入和事务管理

2.1 Spring依赖注入的实现机制

2.1.1 基于XML的配置方式

在Spring框架中,依赖注入(DI)可以通过XML配置文件的方式实现,这种方式允许开发者通过声明式的配置来管理对象之间的依赖关系。它使用简单的XML标记来定义和组装对象,是早期Spring应用中常见的配置方式。

首先,在Spring的XML配置文件中声明bean,通常一个bean对应应用中的一个Java对象。下面是一个典型的XML配置bean的示例:

<beans>
    <!-- 定义一个名为"dataSource"的bean -->
    <bean id="dataSource" class="com.mypackage.impl.DataSource">
        <!-- 这里可以配置各种属性 -->
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    </bean>
    <!-- 定义一个名为"myService"的bean,并注入dataSource -->
    <bean id="myService" class="com.mypackage.service.MyService">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

在上述配置中,我们定义了两个bean,一个名为 dataSource ,另一个名为 myService myService 依赖于 dataSource ,因此我们通过 <property> 标签的 ref 属性来注入 dataSource

参数说明和逻辑分析:
  • <beans> 标签是Spring配置文件的根元素,所有bean定义都在这个标签内。
  • <bean> 标签用于定义一个具体的bean, id 属性标识了bean的名称, class 属性指定了bean对应的Java类。
  • <property> 标签用于注入依赖,它的 name 属性指定了需要注入的属性名称, value 属性用于注入简单的值, ref 属性用于注入另一个bean的引用。

通过这种方式,Spring容器在启动时会读取XML配置文件,并根据定义的bean标签创建Java对象实例,将依赖关系注入到相应的属性中。

2.1.2 基于注解的配置方式

随着Spring框架的演进,注解配置方式由于其简洁性和直观性,被广泛采用。它允许开发者直接在Java类中使用注解来声明依赖,无需额外的XML配置文件。

下面是一个使用注解来实现依赖注入的示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("myService")
public class MyService {
    private DataSource dataSource;
    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    // 其他业务逻辑方法...
}

在这个例子中,我们使用 @Service 注解来标明 MyService 类是一个服务组件。然后通过 @Autowired 注解,Spring会自动查找 DataSource 类型的bean,并注入到 setDataSource 方法中。

参数说明和逻辑分析:
  • @Service("myService") 注解告诉Spring,这个类是一个服务组件,并且bean的ID是 myService
  • @Autowired 注解用于自动装配bean的依赖关系。Spring会自动找到类型匹配的bean进行注入。

基于注解的配置方式使代码更加简洁,也减少了配置文件的管理。它通过反射机制在运行时扫描类上的注解,并根据注解自动进行配置和依赖注入。

2.1.3 XML与注解的结合使用

实际项目中,XML配置和注解配置往往不是完全对立的。开发者可以将两者结合使用,以发挥各自的优势。例如,可以使用XML来配置一些基础信息,而使用注解来处理较为复杂的依赖关系或者服务组件。

<beans>
    <!-- 定义数据源bean -->
    <bean id="dataSource" class="com.mypackage.impl.DataSource">
        <!-- 数据源配置... -->
    </bean>
    <!-- 使用注解定义服务组件 -->
    <context:annotation-config/>
    <bean class="com.mypackage.service.MyService"/>
</beans>

这里, <context:annotation-config/> 标签启用了Spring对注解的支持。 <bean class="com.mypackage.service.MyService"/> 声明了一个bean,Spring会扫描这个类并应用 @Autowired 等注解。

依赖注入的深入分析

依赖注入是Spring框架的核心特性之一,它能够帮助开发者实现松耦合的设计。无论是XML配置还是注解配置,其根本目的是为了降低组件之间的依赖关系,使得代码更加灵活和可维护。

  • 降低耦合度: 组件不直接创建或查找依赖对象,而是通过容器提供的方法来注入依赖,从而减少了组件之间的直接耦合。
  • 灵活性和可测试性: 使用依赖注入的方式,可以轻松替换依赖的对象,使得单元测试和集成测试更加容易实现。
  • 配置简化: 随着Spring的发展,注解配置提供了一种更为简洁的配置方式,但XML配置仍然在某些场景下具有其不可替代的作用。

接下来,我们将深入探讨Spring事务管理的策略与实践,通过编程式事务管理和声明式事务管理的方式,了解如何在Spring框架中更好地管理事务,保证数据的一致性和完整性。

3. MyBatis框架持久层操作和SQL映射

3.1 MyBatis框架核心组件解析

3.1.1 MyBatis配置文件的编写

MyBatis的配置文件是整个框架运行的基础,它控制着MyBatis的主要行为和属性设置。在这一部分中,我们将会详细解析MyBatis配置文件的结构和编写方法。

首先,MyBatis配置文件通常命名为 mybatis-config.xml ,位于项目的资源文件夹中。其基本结构包括以下几个主要部分:

<configuration>
    <properties />
    <settings />
    <typeAliases />
    <typeHandlers />
    <objectFactory />
    <plugins />
    <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/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <databaseIdProvider />
    <mappers />
</configuration>
  • <properties> 标签用于定义数据库连接所需的属性,例如驱动、URL、用户名、密码等。
  • <settings> 标签用于配置一些全局属性,比如日志输出、别名等。
  • <typeAliases> 标签用于为Java类型设置别名,简化MyBatis配置和代码中的使用。
  • <typeHandlers> 标签用于自定义JDBC类型和Java类型之间的映射。
  • <objectFactory> 标签用于创建对象实例。
  • <plugins> 标签用于配置插件,插件可以修改MyBatis的行为。
  • <environments> 标签定义了MyBatis运行环境,可以配置多个环境,比如开发环境、测试环境和生产环境。
  • <databaseIdProvider> 标签用于提供数据库厂商特有的SQL操作,MyBatis可以使用不同的SQL方言。
  • <mappers> 标签用于指定映射器的位置,可以是XML文件、注解或者包扫描。

编写配置文件时需要注意:

  • <environments> 中, default 属性用于指定默认的环境。
  • <dataSource> 标签内, type 属性的值为 POOLED 表示使用连接池,还有 UNPOOLED (非连接池)、 JNDI 等选项。
  • <transactionManager> 标签内,通常使用 JDBC 进行事务管理。
  • <mappers> 标签内, <mapper> 子标签用于指定映射文件的位置。

MyBatis配置文件的编写是构建MyBatis应用的第一步,合理的配置能够使应用更加稳定和高效。

3.1.2 MyBatis核心接口与类

MyBatis的核心包括几个主要的接口和类,它们是框架运作的基础。我们来一一介绍。

SqlSessionFactory

SqlSessionFactory 是MyBatis中最核心的类之一。它负责创建 SqlSession 实例,而 SqlSession 则用于实际的数据库操作。 SqlSessionFactory 是通过读取配置文件或读取XML映射文件创建的。通常,一个应用只需要一个 SqlSessionFactory 实例,通过它来获取 SqlSession

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 使用session操作数据库
}
SqlSession

SqlSession 提供了操作数据库的所有方法,包括增删改查等。它不是线程安全的,因此不能被共享,最佳实践是每次请求创建一个 SqlSession ,请求结束后关闭。

// 示例:查询
Blog blog = session.selectOne("BlogMapper.selectBlog",博客id);
Mapper接口

在MyBatis中, Mapper 接口是一个与数据库表相对应的Java接口,它声明了与表相关操作的方法。MyBatis通过动态代理机制生成接口的代理对象,实现方法的调用。使用时不需要编写具体的实现类,只需定义接口和方法即可。

public interface UserMapper {
    User selectUser(int id);
    void insertUser(User user);
}
SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 用于构建 SqlSessionFactory 实例。它从XML文件、注解或者Java配置类中构建 SqlSessionFactory 对象。这个过程一般在应用启动时完成。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

以上提到的 SqlSessionFactory SqlSession Mapper 接口和 SqlSessionFactoryBuilder 是MyBatis框架中不可或缺的核心组件,它们共同协作,使得操作数据库变得简便和高效。理解这些核心组件的用途和工作原理,对于深入掌握MyBatis框架至关重要。

4. JDK1.7和myeclipse2014环境下的配置步骤

4.1 开发环境的搭建与配置

4.1.1 JDK1.7的安装与配置

JDK(Java Development Kit)是整个Java的核心,包括Java运行环境(Java Runtime Envirnment)、Java工具和Java基础的类库。JDK1.7作为较早的稳定版本,提供了一个完整的Java开发环境,适用于开发Java应用程序。

步骤1:下载JDK1.7

访问Oracle官方网站或其他镜像站点,下载适用于您操作系统的JDK版本。选择与您的操作系统位数相匹配的JDK安装包。

步骤2:安装JDK1.7

根据您操作系统的不同,执行相应的安装程序。通常情况下,双击安装程序,按照提示进行安装即可。

步骤3:配置环境变量

安装完成后,需要配置环境变量,以便能够在命令行中运行Java和Javac等工具。

  • 打开系统属性(在Windows系统中,通过右键“计算机”->“属性”->“高级系统设置”进入)。
  • 在“高级”标签页下,点击“环境变量”按钮。
  • 在“系统变量”区域,新建“JAVA_HOME”变量,其值为JDK安装目录。
  • 在“系统变量”区域找到“Path”变量,编辑并添加“%JAVA_HOME%\bin;”至变量值的开头,确保在已有的路径前。
步骤4:验证安装

打开命令提示符,输入 java -version javac -version ,如果能够显示出正确的版本信息,说明JDK已正确安装和配置。

4.1.2 Myeclipse2014的安装与配置

Myeclipse2014是Eclipse的商业版本,提供了一系列针对企业级应用开发的工具和插件,尤其适合进行Struts2、Spring和MyBatis等框架的应用开发。

步骤1:下载Myeclipse2014

访问Myeclipse官方网站或其官方合作伙伴站点下载Myeclipse2014安装包。由于Myeclipse2014是一个商业软件,您可能需要一个有效的许可证才能使用所有功能。

步骤2:安装Myeclipse2014

双击下载的安装包,执行安装向导,选择一个安装目录并完成安装。确保您的计算机满足安装的最低系统要求,例如操作系统和内存。

步骤3:配置工作环境

打开Myeclipse,它会引导您完成初始的配置。根据您的项目需求,可能需要安装额外的插件或配置特定的设置,例如Tomcat服务器、数据库连接等。

步骤4:验证安装

创建一个新的Web项目,尝试使用内置的服务器运行它。如果项目能够成功部署并运行,说明Myeclipse安装配置无误。

4.2 整合Struts2+Spring+Mybatis的工程构建

4.2.1 构建项目结构

在开始编写代码前,我们需要建立一个清晰的项目结构来容纳Struts2、Spring和MyBatis框架的配置和代码。

步骤1:创建项目

在Myeclipse中创建一个新的Web项目,可以选择创建动态Web项目或Maven Web项目。

步骤2:添加框架支持

在创建过程中,选择添加Struts2、Spring和MyBatis支持。如果Myeclipse未直接提供,您可能需要通过下载相应的插件或手动添加相关依赖。

步骤3:配置目录结构

标准的目录结构建议如下: - src/main/java : 用于存放Java源代码。 - src/main/resources : 存放配置文件,如Spring的XML配置文件、MyBatis的映射文件等。 - src/test/java : 用于存放单元测试代码。 - WebContent/WEB-INF : 包含web应用的配置文件和Web资源文件。

4.2.2 配置文件与依赖关系设置

正确的配置文件和依赖关系对于项目的正确运行至关重要。

步骤1:配置web.xml

web.xml 是Web应用的部署描述文件,需要配置Struts2和Spring的初始化参数。

<web-app ...>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
  </context-param>

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
步骤2:配置Spring的XML文件

在Spring的配置文件中,进行依赖注入和事务管理的配置。

<beans ...>
  <context:component-scan base-package="com.yourpackage" />

  <bean id="dataSource" class="***mons.dbcp.BasicDataSource" ... />
  <!-- 其他Bean的定义 -->
</beans>
步骤3:配置MyBatis的Mapper和XML文件

为每个数据库表创建一个Mapper接口和对应的XML文件,定义SQL操作。

public interface UserMapper {
    User selectById(int id);
    // 其他数据库操作方法
}

在MyBatis的XML配置文件中指定Mapper文件的位置:

<mappers>
    <mapper resource="com/yourpackage/mapper/UserMapper.xml"/>
    <!-- 其他Mapper文件 -->
</mappers>

通过以上步骤,我们完成了基本的JDK1.7和myeclipse2014环境配置,以及Struts2+Spring+Mybatis框架整合的准备工作。这为后续实体类、DAO、Service和Mapper的编写打下了基础。在下一章中,我们将深入介绍实体类与数据模型的映射,以及如何实现DAO层接口与MyBatis Mapper映射,构建起整个应用的核心数据处理逻辑。

5. 实体类、DAO、Service和Mapper的编写

5.1 实体类与数据模型的映射

5.1.1 实体类的创建与属性映射

创建实体类(Entity)是将数据模型映射到Java对象的过程。每个实体类通常对应数据库中的一个表。实体类的属性与数据库表的列相对应,而属性的数据类型应与表列的数据类型相匹配。

public class User {
    private int id;
    private String username;
    private String password;
    private Date createTime;
    // getters and setters
}

在上面的示例中, User 实体类有四个属性: id , username , password , createTime ,分别对应用户信息表中的主键和相关字段。实体类中的getter和setter方法用于访问和修改属性值,这是Java Beans规范的一部分。

5.1.2 数据库表与实体类的关系

实体类与数据库表之间的关系通常是通过ORM(对象关系映射)框架来实现的。比如MyBatis,它通过注解或者XML映射文件将SQL语句与实体类关联起来。

下面是一个例子,展示如何使用MyBatis的注解将SQL语句映射到实体类的查询方法上:

public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectUserById(int id);
}

在上面的 UserMapper 接口中, selectUserById 方法通过 @Select 注解关联了一个查询SQL语句。当执行此方法时,MyBatis会自动将查询结果集映射到 User 实体类的实例中。

5.2 DAO、Service和Mapper的职责与实现

5.2.1 DAO层接口与MyBatis Mapper映射

DAO(Data Access Object)层负责与数据库进行交互。在MyBatis中,通常通过Mapper接口和映射文件来实现数据访问逻辑。

Mapper接口是对DAO接口的具体实现,它由MyBatis框架在运行时动态实现。这样做的好处是可以在不修改接口代码的情况下,通过改变配置文件来调整数据访问逻辑。

例如:

public interface UserMapper {
    User selectUserById(int id);
    int insertUser(User user);
    // ... other methods
}

MyBatis映射文件定义了具体的SQL语句:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (username, password, create_time) 
        VALUES (#{username}, #{password}, #{createTime})
    </insert>
    <!-- More statements -->
</mapper>

5.2.2 Service层业务逻辑的编写

Service层通常负责业务逻辑的处理。它调用DAO层的方法来完成业务需求,并处理事务。Service层的方法会确保业务逻辑的正确性和数据的一致性。

public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserById(int id) {
        return userMapper.selectUserById(id);
    }

    public void createUser(User user) {
        userMapper.insertUser(user);
        // Additional business logic and transaction management
    }
}

在上面的 UserService 类中, getUserById 方法通过调用 UserMapper 接口的 selectUserById 方法来获取用户信息。而 createUser 方法在插入用户数据之后,可能还需要处理一些额外的业务逻辑,如发送邮件通知等,并确保操作的原子性。

Service层的代码通常不需要直接与数据库交互,而是通过调用DAO层的接口来实现。这样做的好处是Service层与具体的数据库操作细节解耦,有利于业务逻辑的重用和维护。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文详细介绍了如何在myeclipse2014环境下利用JDK1.7实现一个基于Struts2、Spring和MyBatis框架的CRUD应用程序。首先阐述了每个框架在MVC模式中的角色和职责,然后通过具体的步骤讲解了如何配置和实现增删查改(CRUD)操作。内容包括Struts2的Action类实现、Spring的依赖注入和事务管理、以及MyBatis的Mapper接口和XML配置。最后,还涉及了实体类、DAO和Service的设计,以及与前端交互的JSP页面的创建。本文旨在帮助读者熟练掌握这些框架的核心概念和配置,为开发更复杂的应用打下基础。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值