写点什么

全栈开发实战|SSM 框架整合开发

作者:TiAmo
  • 2023-04-18
    江苏
  • 本文字数:10757 字

    阅读完需:约 35 分钟

全栈开发实战|SSM框架整合开发

简介: 全栈开发实战|SSM 框架整合开发

01、相关 JAR 包


实现 SSM 框架整合开发,需要导入相关 JAR 包,包括 MyBatis、Spring、Spring MVC、MySQL 连接器、MyBatis 与 Spring 桥接器、Log4j 以及 DBCP 等 JAR 包。


1●MyBatis 框架所需的 JAR 包

MyBatis 框架所需的 JAR 包,包括它的核心包和依赖包。


2●Spring 框架所需的 JAR 包

Spring 框架所需的 JAR 包,包括它的核心模块 JAR、AOP 开发使用的 JAR、JDBC 和事务的 JAR 包以及 Spring MVC 所需要的 JAR 包,具体如下:


commons-logging-1.2.jar

spring-aop-5.3.2.jar

spring-beans-5.3.2.jar

spring-context-5.3.2.jar

spring-core-5.3.2.jar

spring-expression-5.3.2.jar

spring-jdbc-5.3.2.jar

spring-tx-5.3.2.jar

spring-web-5.3.2.jar

spring-webmvc-5.3.2.jar


3●MyBatis 与 Spring 整合的中间 JAR 包

该中间 JAR 包的最新版本为 mybatis-spring-2.0.6.jar。此版本可从地址“http://mvnrepository.com/artifact/org.mybatis/mybatis-spring”下载。


4●数据库驱动 JAR 包

我们所使用的 MySQL 数据库驱动包为 mysql-connector-java-5.1.45-bin.jar。


5●数据源所需的 JAR 包

整合时使用的是 DBCP 数据源,需要准备 DBCP 和连接池的 JAR 包。最新版本的 DBCP 的 JAR 包为 commons-dbcp2-2.8.0.jar,可从地址“http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi”下载;最新版本的连接池的 JAR 包为 commons-pool2-2.9.0.jar,可从地址“http://commons.apache.org/proper/commons-pool/download_pool.cgi”下载。


02、MapperScannerConfigurer 方式


一般情况下,将数据源及 MyBatis 工厂配置在 Spring 的配置文件中,实现 MyBatis 与 Spring 的无缝整合。在 Spring 的配置文件中,首先,使用 org.apache.commons.dbcp2.BasicDataSource 配置数据源。其次,使用 org.springframework.jdbc.datasource.DataSourceTransactionManager 为数据源添加事务管理器。最后,使用 org.mybatis.spring.SqlSessionFactoryBean 配置 MyBatis 工厂,同时指定数据源,并与 MyBatis 完美整合。


使用 Spring 管理 MyBatis 的数据操作接口的方式有多种。其中,最常用最简捷的一种是基于 org.mybatis.spring.mapper.MapperScannerConfigurer 的整合,实现 Mapper 代理开发。MapperScannerConfigurer 将包()中所有接口自动装配为 MyBatis 映射接口 Mapper 的实现类的实例(映射器),所有映射器都被自动注入 SqlSessionFactory 实例,同时扫描包中 SQL 映射文件,MyBatis 核心配置文件不再加载 SQL 映射文件(但要保证接口与 SQL 映射文件名相同)。配置文件的示例代码如下:

<!-- 配置数据源 --><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">  <property name="driverClassName" value="${jdbc.driver}" />  <property name="url" value="${jdbc.url}" />  <property name="username" value="${jdbc.username}" />  <property name="password" value="${jdbc.password}" />  <!-- 最大连接数 -->  <property name="maxTotal" value="${jdbc.maxTotal}" />  <!-- 最大空闲连接数 -->  <property name="maxIdle" value="${jdbc.maxIdle}" />  <!-- 初始化连接数 -->  <property name="initialSize" value="${jdbc.initialSize}" /></bean><!-- 添加事务支持 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource" /></bean><!-- 开启事务注解 --><tx:annotation-driven transaction-manager="txManager" /><!-- 配置MyBatis工厂,同时指定数据源,并与MyBatis完美整合 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="dataSource" />  <!-- configLocation的属性值为MyBatis的核心配置文件 -->  <property name="configLocation" value="classpath:config/mybatis-config.xml" /></bean><!--Mapper代理开发,MapperScannerConfigurer将包中所有接口自动装配为MyBatis映射接口Mapper的实现类的实例(映射器),所有映射器都被自动注入SqlSessionFactory实例,同时扫描包中SQL映射文件,MyBatis核心配置文件不再加载SQL映射文件 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <!-- mybatis-spring组件的扫描器,basePackage:属性可以包含多个包名,多个包名之间可以用逗号或分号隔开 -->  <property name="basePackage" value="dao" />  <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean>
复制代码


03、整合示例


下面通过 SSM 框架整合,实现【例 3-2】的功能。


【例 3-2】SSM 框架整合开发。


具体实现步骤如下。


1●创建 Web 应用并导入相关 JAR 包

使用 Eclipse 创建一个名为 ch3_2 的 Web 应用,将相关 JAR 包复制到 WEB-INF/lib 目录中。


2●创建数据库连接信息属性文件及 Log4j 的日志配置文件

在应用 ch3_2 的 src 目录下,创建名为 config 的包,并在该包中创建数据库连接信息属性文件 jdbc.properties 文件,具体内容如下:


jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8

jdbc.username=root

jdbc.password=root

jdbc.maxTotal=30

jdbc.maxIdle=10

jdbc.initialSize=5


在应用 ch3_2 的 src 目录下,创建 Log4j 的日志配置文件 log4j.properties 文件.


3●创建持久化类

在应用 ch3_2 的 src 目录下,创建一个名为 com.mybatis.po 的包,并在该包中创建持久化类 MyUser。


4●创建 SQL 映射文件

在应用 ch3_2 的 src 目录下,创建一个名为 com.mybatis.mapper 的包,并在该包中创建 SQL 映射文件 UserMapper.xml。


5●创建 MyBatis 的核心配置文件

在应用 ch3_2 的 config 包中,创建 MyBatis 的核心配置文件 mybatis-config.xml。在该文件中,配置实体类别名、日志输出等,具体内容如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>  <settings>    <setting name="logImpl" value="LOG4J" />  </settings>  <typeAliases>    <package name="com.mybatis.po" />  </typeAliases></configuration>
复制代码


6●创建 Mapper 接口

在应用 ch3_2 的 com.mybatis.mapper 包中,创建接口 UserMapper。使用 @Repository 注解标注该接口是数据访问层。该接口中的方法与 SQL 映射文件 UserMapper.xml 的 id 一致。UserMapper 接口的核心代码如下:

@Repositorypublic interface UserMapper {  public MyUser selectUserById(Integer id);  public List<MyUser> selectAllUser();  public int addUser(MyUser myUser);  public int updateUser(MyUser myUser);  public int deleteUser(Integer id);}
复制代码


7●创建控制类

在应用 ch3_2 的 src 目录下,创建一个名为 controller 的包,并在该包中创建控制器类 TestController。在该控制器类中,调用 Mapper 接口中的方法操作数据库,核心代码如下:

@Controllerpublic class TestController {    @Autowired    private UserMapper userMapper;    @RequestMapping("/test")public String test() {    //查询一个用户    MyUser mu = userMapper.selectUserById(1);    System.out.println(mu);    //添加一个用户    MyUser addmu = new MyUser();    addmu.setUname("陈恒");    addmu.setUsex("男");    userMapper.addUser(addmu);    //修改一个用户    MyUser updatemu = new MyUser();    updatemu.setUid(1);    updatemu.setUname("张三");    updatemu.setUsex("女");    userMapper.updateUser(updatemu);    //删除一个用户    userMapper.deleteUser(3);    //查询所有用户    List<MyUser> listMu = userMapper.selectAllUser();    for (MyUser myUser : listMu) {      System.out.println(myUser);    }    return "test";  }}
复制代码


8●创建测试页面

在/WEB-INF/目录下,创建一个名为 jsp 的文件夹,并在该文件夹中创建 test.jsp 文件


9●创建 Web、Spring、Spring MVC 的配置文件

在应用 ch3_2 的 config 包中创建 Spring 配置文件 applicationContext.xml 和 Spring MVC 配置文件 springmvc.xml,在应用 ch3_2 的/WEB-INF/目录中创建 Web 配置文件 web.xml。


在 Spring 配置文件 applicationContext.xml 中,首先,使用加载数据库连接信息属性文件;其次,使用 org.apache.commons.dbcp2.BasicDataSource 配置数据源,并使用 org.springframework.jdbc.datasource.DataSourceTransactionManager 为数据源添加事务管理器;再次,使用 org.mybatis.spring.SqlSessionFactoryBean 配置 MyBatis 工厂,同时指定数据源,并与 MyBatis 完美整合;最后,使用 org.mybatis.spring.mapper.MapperScannerConfigurer 实现 Mapper 代理开发,将 basePackage 属性指定包中所有接口自动装配为 MyBatis 映射接口 Mapper 的实现类的实例(映射器),所有映射器都被自动注入 SqlSessionFactory 实例,同时扫描包中 SQL 映射文件,MyBatis 核心配置文件不再加载 SQL 映射文件。Spring 配置文件 applicationContext.xml 的具体内容如下:

<?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:tx="http://www.springframework.org/schema/tx"  xmlns:context="http://www.springframework.org/schema/context"  xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx.xsd   http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 加载数据库配置文件 -->  <context:property-placeholder location="classpath:config/db.properties" />  <!-- 配置数据源 -->  <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">    <property name="driverClassName" value="${jdbc.driver}" />    <property name="url" value="${jdbc.url}" />    <property name="username" value="${jdbc.username}" />    <property name="password" value="${jdbc.password}" />    <!-- 最大连接数 -->    <property name="maxTotal" value="${jdbc.maxTotal}" />    <!-- 最大空闲连接数 -->    <property name="maxIdle" value="${jdbc.maxIdle}" />    <!-- 初始化连接数 -->    <property name="initialSize" value="${jdbc.initialSize}" />  </bean>  <!-- 添加事务支持 -->  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="dataSource" />  </bean>  <!-- 开启事务注解 -->  <tx:annotation-driven transaction-manager="txManager" />  <!-- 配置MyBatis工厂,同时指定数据源,并与MyBatis完美整合 -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    <property name="dataSource" ref="dataSource" />    <property name="configLocation" value="classpath:config/mybatis-config.xml" />  </bean>  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <property name="basePackage" value="com.mybatis.mapper" />    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  </bean></beans>
复制代码


在 Spring MVC 配置文件 springmvc.xml 中,使用扫描控制器包,并使用 org.springframework.web.servlet.view.InternalResourceViewResolver 配置视图解析器。具体代码如下:

<?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.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">   <context:component-scan base-package="controller"/>     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"            id="internalResourceViewResolver">       <property name="prefix" value="/WEB-INF/jsp/" />       <property name="suffix" value=".jsp" />    </bean></beans>
复制代码


在 Web 配置文件 web.xml 中,首先通过加载 Spring 配置文件 applicationContext.xml,并通过 org.springframework.web.context.ContextLoaderListener 启动 Spring 容器;其次配置 Spring MVC DispatcherServlet,并加载 Spring MVC 配置文件 springmvc.xml。Web 配置文件 web.xml 的代码如下:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"  id="WebApp_ID" version="4.0">  <!-- 实例化ApplicationContext容器 -->  <context-param>    <!-- 加载applicationContext.xml文件 -->    <param-name>contextConfigLocation</param-name>    <param-value>        classpath:config/applicationContext.xml      </param-value>  </context-param>  <!-- 指定以ContextLoaderListener方式启动Spring容器 -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <!--配置Spring MVC DispatcherServlet -->  <servlet>    <servlet-name>springmvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <!-- classpath是指到src目录查找配置文件 -->      <param-value>classpath:config/springmvc.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>springmvc</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping></web-app>
复制代码


10●测试应用

发布应用 ch3_2 到 Web 服务器 Tomcat 后,通过地址 http://localhost:8080/ch3_2/test 测试应用。成功运行后,控制台信息输出结果,如图 3.4 所示。


image.png


04、SqlSessionDaoSupport 方式


在 MyBatis 中,当我们编写好访问数据库的映射器接口后,MapperScannerConfigurer 就能自动根据这些接口生成 DAO 对象,然后使用 @Autowired 把这些 DAO 对象注入到业务逻辑层或控制层。因此,在这种情况下的 DAO 层中,几乎不用编写代码,而且也没有地方编写,因为只有接口。这固然方便,不过当我们需要在 DAO 层写代码时,这种方式就无能为力。幸运的是,MyBatis-Spring 提供了继承 SqlSessionDaoSupport 类的方式访问数据库。


类 org.mybatis.spring.support.SqlSessionDaoSupport 继承了 org.springframework.dao.support.DaoSupport 类,是一个抽象类,是作为 DAO 的基类使用,需要一个 SqlSessionFactory。我们在继承 SqlSessionDaoSupport 类的子类中通过调用 SqlSessionDaoSupport 类的 getSqlSession()方法来获取这个 SqlSessionFactory 提供的 SqlSessionTemplate 对象。而 SqlSessionTemplate 类实现了 SqlSession 接口,即可以进行数据库访问。所以,我们需要 Spring 框架给 SqlSessionDaoSupport 类的子类的对象(多个 DAO 对象)注入一个 SqlSessionFactory。


但自 mybatis-spring-1.2.0 以来,SqlSessionDaoSupport 的 setSqlSessionTemplate 和 setSqlSessionFactory 两个方法上的 @Autowired 注解被删除,这就意味着继承于 SqlSessionDaoSupport 的 DAO 类,它们的对象不能被自动注入 SqlSessionFactory 或 SqlSessionTemplate 对象。如果在 Spring 的配置文件中一个一个地配置的话,显然太麻烦。比较好的解决办法是在我们的 DAO 类中覆盖这两个方法之一,并加上 @Autowired 或 @Resource 注解。那么如果在每个 DAO 类中都这么做的话,显然很低效。更合理的做法是,写一个继承于 SqlSessionDaoSupport 的 BaseDao,在 BaseDao 中完成这个工作,然后其他的 DAO 类再都 BaseDao 继承。BaseDao 的示例代码如下:

package dao;import javax.annotation.Resource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.support.SqlSessionDaoSupport;public class BaseDao extends SqlSessionDaoSupport  {   //依赖注入sqlSession工厂   @Resource(name = "sqlSessionFactory")   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {         super.setSqlSessionFactory(sqlSessionFactory);   }}
复制代码


下面通过实例讲解继承 SqlSessionDaoSupport 类的方式访问数据库。


【例 3-3】【例 3-2】的基础上,实现继承 SqlSessionDaoSupport 类的方式访问数据库。


1●创建 Web 应用并导入相关 JAR 包

使用 Eclipse 创建一个名为 ch3_3 的 Web 应用,将相关 JAR 包复制到 WEB-INF/lib 目录中。


2●复制数据库连接信息属性文件及 Log4j 的日志配置文件

在应用 ch3_3 的 src 目录下,创建名为 config 的包,将应用 ch3_3 的数据库连接信息属性文件 jdbc.properties 文件复制到该包中。


将应用 ch3_2 的 Log4j 日志配置文件 log4j.properties 文件,复制到 ch3_3 的 src 目录中,并将其中的“log4j.logger.com.mybatis.mapper=DEBUG”修改为“log4j.logger.dao=DEBUG”。


3●创建持久化类

在应用 ch3_3 的 src 目录下,创建一个名为 po 的包,并在该包中创建持久化类 MyUser。


4●创建 SQL 映射文件

在应用 ch3_3 的 src 目录下,创建一个名为 dao 的包,并在该包中创建 SQL 映射文件 UserMapper.xml。该文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="dao.UserMapper">  <!-- 根据uid查询一个用户信息 -->  <select id="selectUserById" parameterType="Integer"  resultType="MyUser">    select * from user where uid = #{uid}  </select>  <!-- 查询所有用户信息 -->  <select id="selectAllUser"  resultType="MyUser">    select * from user  </select></mapper>
复制代码


5●创建 MyBatis 的核心配置文件

在应用 ch3_3 的 config 包中,创建 MyBatis 的核心配置文件 mybatis-config.xml。在该文件中,配置实体类别名、日志输出、指定映射文件位置等,具体内容如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>  <settings>    <setting name="logImpl" value="LOG4J" />  </settings>  <typeAliases>    <package name="po" />  </typeAliases>  <!-- 告诉 MyBatis到哪里去找映射文件 -->   <mappers>        <mapper resource="dao/UserMapper.xml"/>   </mappers></configuration>
复制代码


6●创建 DAO 接口和接口实现类

在应用 ch3_3 的 dao 包中,创建接口 UserMapper。UserMapper 接口代码如下:

package dao;import java.util.List;import po.MyUser;public interface UserMapper {   public MyUser selectUserById(int id);   public List<MyUser> selectAllUser();}
复制代码


在应用 ch3_3 的 dao 包中,创建 BaseMapper 类,在该类中使用 @Resource(name = "sqlSessionFactory")注解依赖注入 sqlSession 工厂。BaseMapper 类的核心代码如下:

public class BaseMapper extends SqlSessionDaoSupport  {   //依赖注入sqlSession工厂   @Resource(name = "sqlSessionFactory")   public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {         super.setSqlSessionFactory(sqlSessionFactory);   }}
复制代码


在应用 ch3_3 的 dao 包中,创建接口 UserMapper 的实现类 UserMapperImpl,在该类中使用 @Repository 注解标注该类的实例是数据访问对象。UserMapperImpl 类的核心代码如下:

@Repositorypublic class UserMapperImpl extends BaseMapper implements UserMapper {  public MyUser selectUserById(int id) {    //获取SqlSessionFactory提供的SqlSessionTemplate对象    SqlSession session = getSqlSession();    return session.selectOne("dao.UserMapper.selectUserById", id);  }  public List<MyUser> selectAllUser() {    SqlSession session = getSqlSession();    return session.selectList("dao.UserMapper.selectAllUser");  }}
复制代码


7●创建控制类

在应用 ch3_3 的 src 目录下,创建一个名为 controller 的包,并在该包中创建控制器类 MyController。在该控制器类中,调用 UserMapper 接口中的方法操作数据库,核心代码如下:

@Controllerpublic class MyController {  @Autowired  private UserMapper userMapper;  @RequestMapping("/test")  public String test() {    // 查询一个用户    MyUser mu = userMapper.selectUserById(1);    System.out.println(mu);    // 查询所有用户    List<MyUser> listMu = userMapper.selectAllUser();    for (MyUser myUser : listMu) {      System.out.println(myUser);    }    return "test";  }}
复制代码


8●创建测试页面

在/WEB-INF/目录下,创建一个名为 jsp 的文件夹,并在该文件夹中创建 test.jsp 文件


9●创建 Web、Spring、Spring MVC 的配置文件

在应用 ch3_3 的 config 包中创建 Spring 配置文件 applicationContext.xml 和 Spring MVC 配置文件 springmvc.xml,在应用 ch3_3 的/WEB-INF/目录中创建 Web 配置文件 web.xml。


在 Spring 配置文件 applicationContext.xml 中,首先,使用加载数据库连接信息属性文件;其次,使用 org.apache.commons.dbcp2.BasicDataSource 配置数据源,并使用 org.springframework.jdbc.datasource.DataSourceTransactionManager 为数据源添加事务管理器;最后,使用 org.mybatis.spring.SqlSessionFactoryBean 配置 MyBatis 工厂,同时指定数据源,并与 MyBatis 完美整合。Spring 配置文件 applicationContext.xml 的具体内容如下

<?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:tx="http://www.springframework.org/schema/tx"  xmlns:context="http://www.springframework.org/schema/context"  xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx.xsd   http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 加载数据库配置文件 -->  <context:property-placeholder location="classpath:config/db.properties" />  <!-- 配置数据源 -->  <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">    <property name="driverClassName" value="${jdbc.driver}" />    <property name="url" value="${jdbc.url}" />    <property name="username" value="${jdbc.username}" />    <property name="password" value="${jdbc.password}" />    <!-- 最大连接数 -->    <property name="maxTotal" value="${jdbc.maxTotal}" />    <!-- 最大空闲连接数 -->    <property name="maxIdle" value="${jdbc.maxIdle}" />    <!-- 初始化连接数 -->    <property name="initialSize" value="${jdbc.initialSize}" />  </bean>  <!-- 添加事务支持 -->  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="dataSource" />  </bean>  <!-- 开启事务注解 -->  <tx:annotation-driven transaction-manager="txManager" />  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">      <property name="dataSource" ref="dataSource" />        <property name="configLocation" value="classpath:config/mybatis-config.xml"></property>    </bean></beans>
复制代码


在 Spring MVC 配置文件 springmvc.xml 中,使用扫描包,并使用 org.springframework.web.servlet.view.InternalResourceViewResolver 配置视图解析器。具体代码如下:

<?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.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd">    <context:component-scan base-package="controller"/>     <context:component-scan base-package="dao"/>     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"            id="internalResourceViewResolver">       <property name="prefix" value="/WEB-INF/jsp/" />       <property name="suffix" value=".jsp" />    </bean> </beans>
复制代码


在 Web 配置文件 web.xml 中,首先通过加载 Spring 配置文件 applicationContext.xml,并通过 org.springframework.web.context.ContextLoaderListener 启动 Spring 容器;其次配置 Spring MVC DispatcherServlet,并加载 Spring MVC 配置文件 springmvc.xml。


10●测试应用

发布应用 ch3_3 到 Web 服务器 Tomcat 后,通过地址 http://localhost:8080/ch3_3/test 测试应用。

发布于: 2023-04-18阅读数: 18
用户头像

TiAmo

关注

有能力爱自己,有余力爱别人! 2022-06-16 加入

CSDN全栈领域优质创作者,万粉博主;阿里云专家博主、星级博主、技术博主、阿里云问答官,阿里云MVP;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

评论

发布
暂无评论
全栈开发实战|SSM框架整合开发_ssm_TiAmo_InfoQ写作社区