SSM整合(spring-springmvc-mybatis)之HelloWorld

 


一、目录结构

 

 

helloworld(SSM)创建步骤:

步骤一:创建一个类型为Dynamic Web Project  名称为ssm的项目

步骤二:加入jar包:

spring核心jar包:

  1. commons-logging-1.2.jar
  2. spring-beans-5.3.10.jar
  3. spring-context-5.3.10.jar
  4. spring-core-5.3.10.jar
  5. spring-expression-5.3.10.jar

spring aop:

  1. spring-aop-5.3.10.jar
  2. spring-aspects-5.3.10.jar

springmvc jar包:

  1. spring-web-5.3.10.jar
  2. spring-webmvc-5.3.10.jar

spring 数据库交互jar包:

  1. spring-jdbc-5.3.10.jar
  2. spring-tx-5.3.10.jar

mybatis jar包:

  1. mybatis-3.5.9.jar
  2. mysql-connector-java-8.0.27 (1).jar
  3. log4j-1.2.17.jar

mybatis-spring 适配器包:

  1. mybatis-spring-1.3.2.jar

c3po:

  1. c3p0-0.9.5.5.jar
  2. c3p0-oracle-thin-extras-0.9.5.5.jar
  3. mchange-commons-java-0.2.19.jar

MyBatis-Spring下载地址:

https://github.com/mybatis/spring 在release中选择对应的版本下载即可;

步骤三:配置

web.xml:

  1. 配置DispacherServlet 
  2. 配置启动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>
View Code
复制代码

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>
View Code
复制代码

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=
View Code
复制代码

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>
View Code
复制代码

 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
View Code
复制代码

代码部分:

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 }
View Code
复制代码

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 }
View Code
复制代码

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 }
View Code
复制代码

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 }
View Code
复制代码

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 }
View Code
复制代码

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>
View Code
复制代码

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>
View Code
复制代码

运行结果:

当运行http://localhost:8080/SSM/emp/getById?id=1 时,跳转到了success页面,且形式了当前的id;

 

SSM的CRUD:

SSM整合(spring-springmvc-mybatis)之CRUD

posted @   啄木鸟伍迪  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
//火箭 GenerateContentList();

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示