SSM项目整合
由于SpringMVC是Spring框架中的一个模块,所以SSM框架整合只需要进行Spring与Mybatis和SpringMVC和Mybatis之间的整合
1、导入依赖
| <dependencies> |
| |
| <dependency> |
| <groupId>junit</groupId> |
| <artifactId>junit</artifactId> |
| <version>4.13.2</version> |
| <scope>test</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-test</artifactId> |
| <version>5.3.20</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-context</artifactId> |
| <version>5.3.20</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis</artifactId> |
| <version>3.5.9</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>mysql</groupId> |
| <artifactId>mysql-connector-java</artifactId> |
| <version>8.0.29</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-jdbc</artifactId> |
| <version>5.3.20</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-tx</artifactId> |
| <version>5.1.6.RELEASE</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.apache.commons</groupId> |
| <artifactId>commons-dbcp2</artifactId> |
| <version>2.1.1</version> |
| </dependency> |
| <dependency> |
| <groupId>org.apache.commons</groupId> |
| <artifactId>commons-pool2</artifactId> |
| <version>2.4.2</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis-spring</artifactId> |
| <version>2.0.7</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-webmvc</artifactId> |
| <version>5.1.6.RELEASE</version> |
| </dependency> |
| <dependency> |
| <groupId>org.springframework</groupId> |
| <artifactId>spring-web</artifactId> |
| <version>5.1.6.RELEASE</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.projectlombok</groupId> |
| <artifactId>lombok</artifactId> |
| <version>1.18.24</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>javax.annotation</groupId> |
| <artifactId>javax.annotation-api</artifactId> |
| <version>1.3.2</version> |
| </dependency> |
| </dependencies> |
2、编写配置文件
jdbc.properties
| jdbc.driver=com.mysql.jdbc.Driver |
| jdbc.url=jdbc:mysql://localhost:3306/ssm |
| jdbc.username=root |
| jdbc.password=root |
| jdbc.maxTotal=30 |
| jdbc.maxIdle=10 |
| jdbc.initialSize=5 |
applicationContext.xml
| <?xml version="1.0" encoding="UTF-8"?> |
| <beans xmlns="http://www.springframework.org/schema/beans" |
| xmlns:context="http://www.springframework.org/schema/context" |
| xmlns:tx="http://www.springframework.org/schema/tx" |
| 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/context http://www.springframework.org/schema/context/spring-context.xsd |
| http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> |
| |
| <context:property-placeholder location="classpath:jdbc.properties"/> |
| |
| <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> |
| <property name="url" value="${jdbc.url}"/> |
| <property name="driverClassName" value="${jdbc.driver}"/> |
| <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="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> |
| <property name="dataSource" ref="dataSource"/> |
| </bean> |
| |
| |
| <tx:annotation-driven transaction-manager="transactionManager"/> |
| |
| |
| <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> |
| <property name="dataSource" ref="dataSource"/> |
| <property name="configLocation" value="classpath:mybatis-config.xml"/> |
| </bean> |
| |
| <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> |
| <property name="basePackage" value="cn.pickle.dao"/> |
| </bean> |
| |
| <context:component-scan base-package="cn.pickle.service"/> |
| </beans> |
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> |
| |
| <typeAliases> |
| <package name="cn.pickle.po"/> |
| </typeAliases> |
| </configuration> |
springmvc-config.xml
| <?xml version="1.0" encoding="UTF-8"?> |
| <beans xmlns="http://www.springframework.org/schema/beans" |
| xmlns:context="http://www.springframework.org/schema/context" |
| 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 |
| http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> |
| |
| <context:component-scan base-package="cn.pickle.controller"/> |
| |
| <mvc:annotation-driven/> |
| |
| <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> |
| <property name="prefix" value="/WEB-INF/jsp/"/> |
| <property name="suffix" value=".jsp"/> |
| </bean> |
| </beans> |
web.xml
| <?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"> |
| |
| |
| <context-param> |
| <param-name>contextConfigLocation</param-name> |
| <param-value>classpath:applicationContext.xml</param-value> |
| </context-param> |
| |
| <listener> |
| <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> |
| </listener> |
| |
| |
| <filter> |
| <filter-name>encoding</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>encoding</filter-name> |
| <url-pattern>/*</url-pattern> |
| </filter-mapping> |
| |
| |
| <servlet> |
| <servlet-name>dispatcherServlet</servlet-name> |
| <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
| <init-param> |
| <param-name>contextConfigLocation</param-name> |
| <param-value>classpath:springmvc-config.xml</param-value> |
| </init-param> |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| <servlet-mapping> |
| <servlet-name>dispatcherServlet</servlet-name> |
| <url-pattern>/</url-pattern> |
| </servlet-mapping> |
| </web-app> |
3、编写Po
| package cn.pickle.po; |
| |
| import lombok.AllArgsConstructor; |
| import lombok.Data; |
| import lombok.NoArgsConstructor; |
| |
| |
| |
| |
| |
| |
| @Data |
| @NoArgsConstructor |
| @AllArgsConstructor |
| public class User { |
| private Integer id; |
| private String username; |
| } |
| |
4、编写Dao
| package cn.pickle.dao; |
| |
| import cn.pickle.po.User; |
| import org.apache.ibatis.annotations.Select; |
| |
| |
| |
| |
| |
| |
| public interface UserDao { |
| |
| |
| |
| |
| |
| @Select("select * from t_user where id= #{id}") |
| public User findUserById(Integer id); |
| |
| } |
| |
5、编写Service
| package cn.pickle.service.Impl; |
| |
| import cn.pickle.dao.UserDao; |
| import cn.pickle.po.User; |
| import cn.pickle.service.UserService; |
| import org.springframework.stereotype.Service; |
| import org.springframework.transaction.annotation.Transactional; |
| |
| import javax.annotation.Resource; |
| |
| |
| |
| |
| |
| |
| @Service |
| @Transactional |
| public class UserServiceImpl implements UserService { |
| @Resource(name = "userDao") |
| private UserDao userDao; |
| @Override |
| public User findUserById(Integer id) { |
| return userDao.findUserById(id); |
| } |
| } |
| |
6、编写Controller
| package cn.pickle.controller; |
| |
| import cn.pickle.po.User; |
| import cn.pickle.service.UserService; |
| import org.springframework.stereotype.Controller; |
| import org.springframework.ui.Model; |
| import org.springframework.web.bind.annotation.RequestMapping; |
| |
| import javax.annotation.Resource; |
| |
| |
| |
| |
| |
| |
| @Controller |
| public class UserController { |
| @Resource(name = "userServiceImpl") |
| private UserService userService; |
| |
| @RequestMapping(value = "/findUserById") |
| public String findUserById(Integer id, Model model){ |
| final User user = userService.findUserById(id); |
| model.addAttribute("user",user); |
| return "user"; |
| } |
| } |
| |
7、编写jsp
| <%-- |
| Created by IntelliJ IDEA. |
| User: gaogaoaixuexi |
| Date: 2022/7/15 |
| Time: 20:52 |
| To change this template use File | Settings | File Templates. |
| --%> |
| <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
| <html> |
| <head> |
| <title>Title</title> |
| </head> |
| <body> |
| <table> |
| <tr> |
| <td>用户</td> |
| <td>${user.id}</td> |
| </tr> |
| <tr> |
| <td>用户姓名</td> |
| <td>${user.username}</td> |
| </tr> |
| </table> |
| </body> |
| </html> |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南