SSM整合(spring-springmvc-mybatis)之HelloWorld
一、目录结构
helloworld(SSM)创建步骤:
步骤一:创建一个类型为Dynamic Web Project 名称为ssm的项目
步骤二:加入jar包:
spring核心jar包:
- commons-logging-1.2.jar
- spring-beans-5.3.10.jar
- spring-context-5.3.10.jar
- spring-core-5.3.10.jar
- spring-expression-5.3.10.jar
spring aop:
- spring-aop-5.3.10.jar
- spring-aspects-5.3.10.jar
springmvc jar包:
- spring-web-5.3.10.jar
- spring-webmvc-5.3.10.jar
spring 数据库交互jar包:
- spring-jdbc-5.3.10.jar
- spring-tx-5.3.10.jar
mybatis jar包:
- mybatis-3.5.9.jar
- mysql-connector-java-8.0.27 (1).jar
- log4j-1.2.17.jar
mybatis-spring 适配器包:
- mybatis-spring-1.3.2.jar
c3po:
- c3p0-0.9.5.5.jar
- c3p0-oracle-thin-extras-0.9.5.5.jar
- mchange-commons-java-0.2.19.jar
MyBatis-Spring下载地址:
https://github.com/mybatis/spring 在release中选择对应的版本下载即可;
步骤三:配置
web.xml:
- 配置DispacherServlet
- 配置启动spring ioc容器的Listener
配置说明,可参考十二、springMVC整合spring

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 5 version="4.0"> 6 <context-param> 7 <param-name>contextConfigLocation</param-name> 8 <param-value>classpath:spring.xml</param-value> 9 </context-param> 10 <listener> 11 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 12 </listener> 13 <!-- 配置DispatcherServlet(快捷键 alt +/) --> 14 <servlet> 15 <servlet-name>springDispatcherServlet</servlet-name> 16 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 17 <!-- 配置DispatcherServletd 一个初始化参数:配置springmvc配置文件的位置和名称 --> 18 <!-- 实际上也可以不通过 contextConfigLocation 来配置Springmvc的配置文件,而是用默认的 即默认的配置文件为 19 /WEB-INF/<servlet-name>-servlet.xml 本项目默认位置配置文件即为: /WEB-INF/springDispatcherServlet-servlet.xml --> 20 <init-param> 21 <param-name>contextConfigLocation</param-name> 22 <param-value>classpath:springmvc.xml</param-value> 23 </init-param> 24 <!-- 表示springDispatcherServlet在加载的时候被创建 --> 25 <load-on-startup>1</load-on-startup> 26 </servlet> 27 28 <!-- Map all requests to the DispatcherServlet for handling --> 29 <servlet-mapping> 30 <servlet-name>springDispatcherServlet</servlet-name> 31 <url-pattern>/</url-pattern> 32 </servlet-mapping> 33 34 </web-app>
springmvc.xml:
基础配置(扫描包配置+视图解析器配置+<mvc:annotation-driven></mvc:annotation-driven>)
配置说明,可参考十二、springMVC整合spring spring和springmvc 整合时对扫描包做了特殊处理,来解决重复扫描包启动时实例化两次的问题;

1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 9 10 <!-- spirngmvc 只负责 网站跳转逻辑 --> 11 <context:component-scan base-package="ssm" use-default-filters="false"> 12 <context:include-filter type="annotation" 13 expression="org.springframework.stereotype.Controller" /> 14 <context:include-filter type="annotation" 15 expression="org.springframework.stereotype.Service" /> 16 </context:component-scan> 17 18 <bean 19 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 20 <property name="prefix" value="/WEB-INF/views/"></property> 21 <property name="suffix" value=".jsp"></property> 22 </bean> 23 <mvc:annotation-driven></mvc:annotation-driven> 24 </beans>
spring.xml:
扫描包配置+数据源配置+事务配置+mybatis配置;
扫描包配置:请参考十二、springMVC整合spring spring和springmvc 整合时对扫描包做了特殊处理,来解决重复扫描包启动时实例化两次的问题;
数据源配置:和四、JdbcTemplate的配置 中的配置是一样的;
mybatis配置:
- 创建出 sqlSessionFactoryBean对象
- 配置一个可以进行批量执行的sqlSession
- 扫描所有的mapper接口的实现,让这些mapper能够自动注入
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:tx="http://www.springframework.org/schema/tx" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 8 http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd 9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 10 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> 11 12 <!-- spring 希望管理所有的业务逻辑组件,等 --> 13 14 <!-- 自动扫描配置 --> 15 <context:component-scan base-package="ssm" 16 use-default-filters="false"> 17 <context:exclude-filter type="annotation" 18 expression="org.springframework.stereotype.Controller" /> 19 <context:exclude-filter type="annotation" 20 expression="org.springframework.stereotype.Service" /> 21 </context:component-scan> 22 23 <!-- spring用来控制业务逻辑。数据源、事务控制、aop... --> 24 <!-- 导入资源文件 --> 25 <context:property-placeholder 26 location="classpath:dbconfig.properties" /> 27 <!-- 配置c3p0数据源 --> 28 <bean id="datasource" 29 class="com.mchange.v2.c3p0.ComboPooledDataSource"> 30 <property name="user" value="${jdbc.username}"></property> 31 <property name="password" value="${jdbc.password}"></property> 32 <property name="driverClass" value="${jdbc.driver}"></property> 33 <property name="jdbcUrl" value="${jdbc.url}"></property> 34 </bean> 35 <!-- spring 事务管理器 --> 36 <bean id="transactionManager" 37 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 38 <property name="dataSource" ref="datasource"></property> 39 </bean> 40 <!-- 开启基于注解的事务 --> 41 <tx:annotation-driven 42 transaction-manager="transactionManager" /> 43 44 <!-- 整合mybatis目的: 1.spring管理所有组件。mapper的实现类。可以对service中引用dao的内容,可以为@Autowired 45 自动注入mapper; 2.spring用来管理声明式事务, --> 46 <!-- 创建出 sqlSessionFactoryBean对象 --> 47 <bean id="sqlSessionFactoryBean" 48 class="org.mybatis.spring.SqlSessionFactoryBean"> 49 <property name="dataSource" ref="datasource"></property> 50 <!-- configLocation指定全局配置文件的位置 --> 51 <property name="configLocation" 52 value="classpath:mybatis-config.xml"></property> 53 <!-- 指定mapper位置(如果mapper与mapper接口的文件名不一样的话这里需要配置,若一样就可以不配置) --> 54 <property name="mapperLocations" 55 value="classpath:mapper/*.xml"></property> 56 </bean> 57 <!--配置一个可以进行批量执行的sqlSession --> 58 <bean id="sqlSession" 59 class="org.mybatis.spring.SqlSessionTemplate"> 60 <constructor-arg name="sqlSessionFactory" 61 ref="sqlSessionFactoryBean"></constructor-arg> 62 <constructor-arg name="executorType" value="BATCH"></constructor-arg> 63 </bean> 64 <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入 --> 65 <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 配置SqlSessionFactoryBean的名称 66 <property name="basePackage" value="ssm.mapper" /> </bean> --> 67 <mybatis-spring:scan base-package="ssm.mapper" /> 68 </beans>
dbconfig.properties:

1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/mybatis 3 jdbc.username=root 4 jdbc.password= 5 6 jdbc2.driver=com.mysql.jdbc.Driver 7 jdbc2.url=jdbc:mysql://localhost:3306/mybatis2 8 jdbc2.username=root 9 jdbc2.password=
mybatis-config.xml:
具体的mybatis的全局配置文件说明请参看二、mybatis全局配置文件说明

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- settings包含很多重要的设置项; name:设置项的名字,value设置项的取值 --> 7 <settings> 8 <!-- 开启驼峰命名 比如数据库字段为Last_Name 则 自动变为lastName --> 9 <setting name="mapUnderscoreToCamelCase" value="true" /> 10 <!-- 分步查询配合一下两个配置 实现懒加载(按需加载) --> 11 <setting name="lazyLoadingEnabled" value="true" /> 12 <setting name="aggressiveLazyLoading" value="false" /> 13 </settings> 14 15 <!-- 配置顺序,properties settings typeAliases typeHandlers objectFactory objectWrapperFactory 16 reflectFactory plugings environment databaseIdProvider mappers --> 17 </configuration>
log4j.properties:

1 ### 设置### 2 log4j.rootLogger = debug,stdout,D,E 3 4 ### 输出信息到控制抬 ### 5 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 6 log4j.appender.stdout.Target = System.out 7 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 8 log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n 9 10 ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### 11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 12 log4j.appender.D.File = E://logs/log.log 13 log4j.appender.D.Append = true 14 log4j.appender.D.Threshold = DEBUG 15 log4j.appender.D.layout = org.apache.log4j.PatternLayout 16 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 17 18 ### 输出ERROR 级别以上的日志到=E://logs/error.log ### 19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 20 log4j.appender.E.File =E://logs/error.log 21 log4j.appender.E.Append = true 22 log4j.appender.E.Threshold = ERROR 23 log4j.appender.E.layout = org.apache.log4j.PatternLayout 24 log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 25 ### 设置### 26 log4j.rootLogger = debug,stdout,D,E 27 28 ### 输出信息到控制抬 ### 29 log4j.appender.stdout = org.apache.log4j.ConsoleAppender 30 log4j.appender.stdout.Target = System.out 31 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 32 log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n 33 34 ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### 35 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 36 log4j.appender.D.File = E://logs/log.log 37 log4j.appender.D.Append = true 38 log4j.appender.D.Threshold = DEBUG 39 log4j.appender.D.layout = org.apache.log4j.PatternLayout 40 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 41 42 ### 输出ERROR 级别以上的日志到=E://logs/error.log ### 43 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 44 log4j.appender.E.File =E://logs/error.log 45 log4j.appender.E.Append = true 46 log4j.appender.E.Threshold = ERROR 47 log4j.appender.E.layout = org.apache.log4j.PatternLayout 48 log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
代码部分:
EmployeeController.java:

1 package ssm.controller; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Controller; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.servlet.ModelAndView; 7 8 import ssm.entity.Employee; 9 import ssm.service.EmployeeService; 10 11 @RequestMapping("/emp") 12 @Controller 13 public class EmployeeController { 14 @Autowired 15 private EmployeeService employeeService; 16 17 @RequestMapping("/getEmp") 18 public ModelAndView getById(Employee employee) { 19 ModelAndView mv = new ModelAndView("success"); 20 mv.addObject("employee", employeeService.getEmpById(employee.getId())); 21 return mv; 22 } 23 24 }
Employee.java

1 package ssm.entity; 2 3 public class Employee { 4 5 private Integer id; 6 private String lastName; 7 private String email; 8 private String gender; 9 10 public Integer getId() { 11 return id; 12 } 13 14 public void setId(Integer id) { 15 this.id = id; 16 } 17 18 public String getLastName() { 19 return lastName; 20 } 21 22 public void setLastName(String lastName) { 23 this.lastName = lastName; 24 } 25 26 public String getEmail() { 27 return email; 28 } 29 30 public void setEmail(String email) { 31 this.email = email; 32 } 33 34 public String getGender() { 35 return gender; 36 } 37 38 public void setGender(String gender) { 39 this.gender = gender; 40 } 41 42 @Override 43 public String toString() { 44 return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]"; 45 } 46 47 }
EmployeeService.java

1 package ssm.service; 2 3 import ssm.entity.Employee; 4 5 public interface EmployeeService { 6 7 Employee getEmpById(Integer id); 8 9 }
EmployeeServiceImpl.java

1 package ssm.service; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Service; 5 6 import ssm.entity.Employee; 7 import ssm.mapper.EmployeeMapper; 8 9 @Service("employeeService") 10 public class EmployeeServiceImpl implements EmployeeService { 11 12 @Autowired 13 private EmployeeMapper employeeMapper; 14 15 @Override 16 public Employee getEmpById(Integer id) { 17 return employeeMapper.getEmpById(id); 18 } 19 20 }
EmployeeMapper.java

1 package ssm.mapper; 2 3 import ssm.entity.Employee; 4 5 public interface EmployeeMapper { 6 7 Employee getEmpById(Integer id); 8 9 }
EmployeeMapper.xml:

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="ssm.mapper.EmployeeMapper"> 6 7 <select id="getEmpById" resultType="ssm.entity.Employee"> 8 select * from tbl_employee 9 where id=#{id,jdbcType=INTEGER} 10 </select> 11 </mapper>
success.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h3>success</h3> 11 <p>${employee.id}</p> 12 13 </body> 14 </html>
运行结果:
当运行http://localhost:8080/SSM/emp/getById?id=1 时,跳转到了success页面,且形式了当前的id;
SSM的CRUD:
博客园地址:https://www.cnblogs.com/lixiuming521125/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!