当前位置: 首页 > wzjs >正文

门户网站 cms网页制作公司

门户网站 cms,网页制作公司,ktv网站建设,最火的网络销售平台SSM 框架(Spring SpringMVC MyBatis)是 Java EE 开发中常用的企业级解决方案,三者各司其职:Spring 负责核心的依赖注入和事务管理,SpringMVC 处理 Web 层请求,MyBatis 简化数据库操作。本文将详细介绍如何…

SSM 框架(Spring + SpringMVC + MyBatis)是 Java EE 开发中常用的企业级解决方案,三者各司其职:Spring 负责核心的依赖注入和事务管理,SpringMVC 处理 Web 层请求,MyBatis 简化数据库操作。本文将详细介绍如何通过 “XML + 注解” 的方式整合 SSM 框架,从环境搭建到完整功能实现,一步步带你掌握整合精髓。

一、整合环境搭建

1. 整合说明与思路

  • 整合方式:采用 XML 配置文件 + 注解结合的方式,兼顾灵活性和开发效率。
  • 核心思路
    1. 先搭建 Spring 基础环境;
    2. 再整合 SpringMVC,实现 Web 层与业务层的交互;
    3. 最后整合 MyBatis,完成业务层与数据层的对接。

2. 数据库与表结构

首先创建用于测试的数据库和表,以 “账户管理” 为例:

-- 创建数据库
create database ssm;-- 创建账户表
create table account(id int primary key auto_increment,name varchar(20),money double
);

3. Maven 工程配置

创建 Maven Web 工程,在pom.xml中引入所需依赖,包括 Spring、SpringMVC、MyBatis、数据库驱动、日志等:

<properties><spring.version>5.0.2.RELEASE</spring.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.6</mysql.version><mybatis.version>3.4.5</mybatis.version>
</properties><dependencies><!-- Spring核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- MyBatis及整合依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- 数据库相关 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version> <!-- 德鲁伊连接池 --></dependency><!-- Web相关 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- 测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
</dependencies><!-- 编译配置 -->
<build><finalName>ssm</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins>
</build>

4. 实体类编写

ssm_domain模块中创建账户实体类Account,封装数据:

package cn.tx.domain;import java.io.Serializable;public class Account implements Serializable {private Integer id; // 主键private String name; // 账户名称private Double money; // 金额// Getter、Setter与toString方法public Integer getId() { return id; }public void setId(Integer id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public Double getMoney() { return money; }public void setMoney(Double money) { this.money = money; }@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}

二、Spring 框架基础配置

Spring 是整合的核心,负责管理 Service、Dao 等对象的依赖注入。

1. Spring 配置文件(applicationContext.xml)

创建applicationContext.xml,开启 Service 层的注解扫描:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描Service层注解(@Service) --><context:component-scan base-package="cn.tx.service"></context:component-scan>
</beans>

2. 编写 Service 层并测试

  • Service 接口:定义核心业务方法

    package cn.tx.service;
    import cn.tx.domain.Account;
    import java.util.List;public interface AccountService {List<Account> findAll(); // 查询所有账户void save(Account account); // 新增账户
    }
    
  • Service 实现类:使用@Service注解交由 Spring 管理

    package cn.tx.service.Impl;
    import cn.tx.domain.Account;
    import cn.tx.mapper.AccountMapper;
    import cn.tx.service.AccountService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;import java.util.List;@Service
    public class AccountServiceImpl implements AccountService {@Autowired // 后续会注入Mapperprivate AccountMapper accountMapper;@Overridepublic List<Account> findAll() {System.out.println("业务层:查询所有账户");return accountMapper.findAll();}@Overridepublic void save(Account account) {accountMapper.save(account);}
    }
    
  • 测试 Spring 环境:通过 Junit 测试 Spring 是否能正常加载 Service

    package cn.tx.test;
    import cn.tx.service.AccountService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring {@Testpublic void testSpring() {// 加载Spring配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取Service对象AccountService service = ac.getBean(AccountService.class);// 调用方法(此时Mapper未注入,仅测试Spring加载)service.findAll(); }
    }
    

三、Spring 整合 SpringMVC

目标:实现 Web 层(Controller)对业务层(Service)的调用,即 Controller 中能注入 Service 对象。

1. SpringMVC 配置

(1)配置前端控制器(web.xml)

web.xml中配置DispatcherServlet,指定 SpringMVC 配置文件:

<!-- 前端控制器 -->
<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 加载SpringMVC配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup> <!-- 启动时加载 -->
</servlet>
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern> <!-- 拦截.do结尾的请求 -->
</servlet-mapping><!-- 解决中文乱码的过滤器 -->
<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
(2)SpringMVC 核心配置(springmvc.xml)

创建springmvc.xml,配置注解扫描(Controller)、视图解析器等:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描Controller层注解 --><context:component-scan base-package="cn.tx.controller"></context:component-scan><!-- 视图解析器:指定JSP路径前缀和后缀 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/pages/" /> <!-- JSP存放路径 --><property name="suffix" value=".jsp" /> <!-- 后缀 --></bean><!-- 开启SpringMVC注解支持(如@RequestMapping) --><mvc:annotation-driven />
</beans>

2. 测试 SpringMVC 单独工作

(1)编写 Controller

创建AccountController,处理页面请求:

package cn.tx.controller;
import cn.tx.domain.Account;
import cn.tx.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import java.util.List;@Controller
@RequestMapping("/account") // 父路径
public class AccountController {@Autowired // 注入Service(整合核心)private AccountService accountService;// 查询所有账户@RequestMapping("/findAll.do")public ModelAndView findAll() {System.out.println("表现层:查询所有账户");List<Account> list = accountService.findAll();ModelAndView mv = new ModelAndView();mv.setViewName("suc"); // 跳转至成功页面return mv;}// 新增账户@RequestMapping("/save.do")public String save(Account account) {accountService.save(account);return "suc"; // 跳转至成功页面}
}
(2)编写页面
  • 首页(index.jsp):提供查询和新增入口

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body><h3>账户管理</h3><a href="/account/findAll.do">查询所有账户</a><form action="/account/save.do" method="post"><h3>新增账户</h3>姓名:<input type="text" name="name"><br>金额:<input type="text" name="money"><br><input type="submit" value="保存"></form>
    </body>
    </html>
    
  • 成功页(pages/suc.jsp):操作成功后跳转

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body><h1>操作成功!</h1>
    </body>
    </html>
    

3. 整合核心:让 Spring 与 SpringMVC 共享容器

SpringMVC 的容器是 Spring 容器的子容器,需确保 Spring 容器在项目启动时加载,才能让 Controller 注入 Service。

web.xml中配置 Spring 监听器,指定 Spring 配置文件路径:

原理:监听器在项目启动时加载applicationContext.xml,初始化 Spring 容器;SpringMVC 容器启动时会作为子容器,可访问父容器(Spring)中的 Bean(如 Service),因此 Controller 能注入 Service。

四、Spring 整合 MyBatis

目标:让 Spring 管理 MyBatis 的核心对象(如SqlSessionMapper),实现 Service 对 Mapper 的调用。

1. MyBatis 配置(整合前准备)

(1)编写 Mapper 接口与映射文件
  • Mapper 接口AccountMapper(数据访问层)

    package cn.tx.mapper;
    import cn.tx.domain.Account;
    import org.apache.ibatis.annotations.Insert;
    import org.springframework.stereotype.Repository;
    import java.util.List;@Repository // 标识为数据访问层组件
    public interface AccountMapper {List<Account> findAll(); // 查询所有@Insert("insert into account (name, money) values (#{name}, #{money})")void save(Account account); // 新增(注解方式,也可XML配置)
    }
    
  • XML 映射文件(AccountMapper.xml):放在classpath: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="cn.tx.mapper.AccountMapper"> <!-- 对应Mapper接口全类名 --><!-- 查询所有账户 --><select id="findAll" resultType="cn.tx.domain.Account">select * from account</select>
    </mapper>
    

2. 整合到 Spring(核心配置)

修改applicationContext.xml,添加数据源、MyBatis 整合配置和事务管理:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 扫描所有组件(Service、Mapper等) --><context:component-scan base-package="cn.tx"/><!-- 1. 配置德鲁伊连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <!-- 新版驱动 --><property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=UTC" /><property name="username" value="root" /><property name="password" value="root" /></bean><!-- 2. 配置SqlSessionFactory(MyBatis核心) --><bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /> <!-- 关联数据源 --><property name="mapperLocations" value="classpath:mapper/*.xml" /> <!-- 加载Mapper映射文件 --><property name="typeAliasesPackage" value="cn.tx.domain" /> <!-- 实体类别名包(简化映射文件) --></bean><!-- 3. 扫描Mapper接口,生成代理对象(交由Spring管理) --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sessionFactory" /> <!-- 关联SqlSessionFactory --><property name="basePackage" value="cn.tx.mapper" /> <!-- Mapper接口所在包 --></bean><!-- 4. 事务管理 --><!-- 平台事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 事务通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" read-only="true" /> <!-- 查询方法只读 --><tx:method name="*" propagation="REQUIRED" /> <!-- 其他方法需要事务 --></tx:attributes></tx:advice><!-- AOP织入事务 --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.tx.service.*Impl.*(..))" /></aop:config>
</beans>

2. 整合测试

部署项目到 Tomcat,访问http://localhost:8080/ssm/index.jsp

  • 点击 “查询所有账户”:Controller 调用 Service,Service 调用 Mapper,最终从数据库查询数据并跳转至成功页;
  • 填写表单提交:数据通过 Controller→Service→Mapper 保存到数据库,完成新增功能。

 

 

五、总结

SSM 整合的核心是职责分离与依赖注入

  • Spring:管理所有 Bean(Service、Mapper、事务),通过依赖注入解耦;
  • SpringMVC:处理 Web 请求,通过 Spring 容器获取 Service;
  • MyBatis:简化数据库操作,通过 Spring 管理核心对象,无需手动创建SqlSession

本文通过 “环境搭建→Spring→SpringMVC 整合→MyBatis 整合” 的步骤,实现了完整的账户查询与新增功能。关键配置包括各框架的 XML 文件、依赖管理和包扫描,开发者可根据实际需求扩展更多功能(如分页、复杂查询等)。

你的实现代码在细节上做了优化(如使用sqlSessionFactoryBeanName避免配置顺序问题、调整包结构),更符合实际开发规范,值得参考!

http://www.dtcms.com/wzjs/503433.html

相关文章:

  • 政府网站建设管理督查通报新网站百度多久收录
  • 网站建设可信赖免费网站
  • 中山网站设计公司南宁seo营销推广
  • 做讲课ppt的网站微信seo排名优化软件
  • 网站运营工作流程seo销售好做吗
  • 五种商业模式seo优化教程培训
  • 网站建设遇到哪些危险下载关键词推广软件
  • 临沂网站建设费用百度seo服务公司
  • 广州最新传染疫情安徽360优化
  • 邢台seo关键词引流重庆seo排名电话
  • 微信链图片转换wordpressseo咨询常德
  • 网站开发 案例网络营销能干什么工作
  • 在网上招标做兼职的网站网站打开速度优化
  • 网站建设设计书任务书百度一下 你就知道官方
  • minimal wordpress北京seo招聘
  • 专门做衬衣网站网站推广的案例
  • dw怎样做收藏本网站网店推广费用多少钱
  • 电商网站建设成本北京网络推广公司排行
  • 外链吧发布seo西安seo优化排名
  • 自助网站建设方法网络推广可做哪些方面
  • 建设商城网站费用百度小程序seo
  • 网站关联页面如何做中国域名注册局官网
  • wordpress简约免费主题免费优化
  • 东莞做网站需要多少钱网站设计制作的服务怎么样
  • 网站建立费用怎样在百度上做广告
  • 国外那些网站是做五金饰品批发丁香人才网官方网站
  • 建设银行网站怎么不可登入南京网络推广公司排名
  • 福田做棋牌网站建设哪家公司便宜企业官方网站有哪些
  • 做的好的排版网站培训心得
  • url短网址在线生成如何做网站seo