[Spring-SpringMVC-MyBatis] 01- SSM整合(应该是最简单不啰嗦的了)


prtyaa
prtyaa 2023-12-27 15:17:58 66176
分类专栏: 资讯

因为之前介绍了maven项目,

然后就不在采用导jar包的方式整合SSM(Spring+SpringMVC+MyBatis)

直接用maven

步骤走吧~


一 用模版创建项目

填写好自己的信息没问题就下一步就好


二 在pom文件中添加依赖 并且整合一次

推荐直接复制就好,不要手敲~如果有版本要求,修改版本就好

 <!--Dependency Version Management-->
    <properties>
        <spring.version>5.2.4.RELEASE</spring.version>
        <mysql.driver.version>5.1.38</mysql.driver.version>
        <log4j.version>1.2.17</log4j.version>
        <aspectj.version>1.9.5</aspectj.version>
        <mybatis.version>3.5.4</mybatis.version>
        <mybatis-spring.version>2.0.3</mybatis-spring.version>
        <servlet-api.version>3.1.0</servlet-api.version>
        <jsp-api.version>2.2</jsp-api.version>
        <jstl.version>1.2</jstl.version>
        <tomcat-plugin.version>2.2</tomcat-plugin.version>
        <mybatis-generator.version>1.3.5</mybatis-generator.version>
        <junit.version>4.11</junit.version>
        <jackson-version>2.9.9</jackson-version>
        <commons-fileupload-version>1.3.1</commons-fileupload-version>
    </properties>
        <dependencies>
            <!--Spring 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>
            <!--MySQL Driver Dependency-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.driver.version}</version>
            </dependency>
            <!--Log4j Dependency-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!--AspectJ Dependency-->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectj.version}</version>
            </dependency>
            <!--MyBatis Dependency-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!--MyBatis Integration Spring Dependency-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!--Web Dependency-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>${jsp-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson-version}</version>
            </dependency>
            <!-- apache 图片上传 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload-version}</version>
            </dependency>
        </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <!-- 添加配置Tomcat插件 -->
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!-- 配置Tomcat -->
                <configuration>
                    <!-- / 表示项目路径,如果仅斜杠就是项目跟路径 -->
                    <path>/</path>
                    <!-- 配置端口号 默认80-->
                    <port>80</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

 


三 补全目录结构

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_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-persist-*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter><!--这个Filter 执行顺序必须在其他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>
        <init-param><!--强制请求设置字符集-->
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping><!--强制响应字符集 -->
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-web-mvc.xml</param-value>
        </init-param>
      <!-- Servlet默认生 命周期中,创建对象是在第-次接收到请求时-->
      <!--而DispatcherServlet创建对 象后有大量的“框架初始化”工作,不适合在第一次请求时来做-->
      <!--设置load-on-startup就是为了让DispatcherServlet在Web应用启动时创建对象、初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- / 除了jsp之外的所有请求都能进servlet-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

db.properties

jdbc.driver =com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root

applicationContext-dao.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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" 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/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util.xsd">
    <!--解析properties配置文件-->
    <context:property-placeholder location="classpath:resource/db.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.lin.pojo"/>
    </bean>
    <!--配置MapperScanner-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.lin.mapper"/>
    </bean>
</beans>

applicationContext-service.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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" 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/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util.xsd">
    <!--配置Spring包扫描-->
    <context:component-scan base-package="com.lin.service"/>
</beans>

applicationContext-trans.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.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
         http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--配置扫描包,主要是为了把Service扫描到IOC容器中-->
    <context:component-scan base-package="com.lin.crowd.service"></context:component-scan>

    <!--配置事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--配置数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置事务切面-->
    <aop:config >
        <!--考虑到后面整合SpringSecurity 避免把UserDetailsService 扫描到,所以让切入点定位到ServiceImpl-->
        <aop:pointcut id="tx" expression="execution(* *..*ServiceImpl.*(..))"/>
        <!--将切入点表达式和事务通知关联起来-->
        <aop:advisor advice-ref="" pointcut-ref="tx"/>
    </aop:config>

    <!--配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="txManager">
    <!--配置事务的属性-->
        <tx:attributes>
            <!--
            propagation属性:
                 REQUIRED:默认值,表示当前方法必须工作在事务中,如果当前线程上没有已经开启的事务,则自己开新事务。
                          如果有已存在的事务,就凑合一下
                     顾虑:用别人的事务有可能“被”回滚。
                 REQUIRES_ NEW: 建议使用的值,表示不管当前线程,上有没有事务,都要自己开事务,在自己的事务中运行。
                     好处:不再受到其他事务的印象

            rollback-for属性:
                           配置事务犯法针对什么样的异常回滚
                  默认 :是运行时异常
                  建议 :都回滚

            -->
            <!--增加方法-->
            <tx:method name="add*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <tx:method name="save*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <!--修改方法-->
            <tx:method name="modify*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <tx:method name="update*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <!--删除方法-->
            <tx:method name="drop*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <tx:method name="remove*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
            <!--查询方法 :配置只读属性 ,让数据库知道这是一个查询操作,能够进行一定的优化-->
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="count*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>

</beans>

springmvc.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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       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/context
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--配置SpringMVC包扫描-->
    <context:component-scan base-package="com.lin.controller"/>
    <!--配置注解驱动-->
    <mvc:annotation-driven/>
    <!--配置视图解析器-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>-->
    <!--静态资源放行-->
   <!-- <mvc:resources mapping="/img/**" location="/img/"></mvc:resources>
    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>-->
</beans>

四 配置tomcat与测试

因为还没写视图解析器的内容,所以我也注掉了那一部分的设置

编写一个controller包下的测试类,测试一下框架整合是否生效

package com.lin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author Lin
 */
@Controller
public class TestController {

    @RequestMapping("demo")
    public String test(){
        return "success.jsp";
    }
}

因为上面的测试是测试能否启动和跳转感觉应该不能确切知道是否整合成功,

所以就拿个模拟登陆做测试页面代码

页面代码

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<head>
    <title>Title</title>
</head>
<body>
<form action="login" method="post">
    <p>
        用户名<input type="text" name="uname">${msg}
    </p>
    <p>
        密 码<input type="password" name="pwd">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>
</body>
</html>

controller

package com.lin.controller;

import com.lin.pojo.Admin;
import com.lin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * @author Lin
 */
@Controller
public class UserLoginController {
    @Autowired
    UserService userService;

    @RequestMapping("/login")
    public String userLogin(HttpServletRequest request, String uname ,String pwd){

       Admin admin = userService.userLogin(uname,pwd);
       if (admin != null){
           return "success.jsp";
       }else {request.setAttribute("msg","用户名或密码错误");
           return "index.jsp";}
    }
}

service

package com.lin.service;

import com.lin.pojo.Admin;

public interface UserService {
    Admin userLogin(String uname,String pwd);
}

serviceimpl

package com.lin.service.impl;

import com.lin.mapper.UserMapper;
import com.lin.pojo.Admin;
import com.lin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author Lin
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;


    @Override
    public Admin userLogin(String uname, String pwd) {
      return  userMapper.findUser(uname,pwd);
    }
}

mapper

package com.lin.mapper;

import com.lin.pojo.Admin;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    Admin findUser(@Param("uname") String uname , @Param("pwd") String pwd);
}

mapper.xml

<?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="com.lin.mapper.UserMapper">

        <select id="findUser" resultType="Admin">
            select * from admin where uname=#{uname} and pwd=#{pwd}
    </select>
</mapper>

 

 


网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31404
赞同 0
评论 0 条
prtyaaL3
粉丝 1 发表 2554 + 关注 私信
上周热门
Kingbase用户权限管理  2023
信刻全自动光盘摆渡系统  1753
信刻国产化智能光盘柜管理系统  1422
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1021
银河麒麟打印带有图像的文档时出错  927
银河麒麟添加打印机时,出现“server-error-internal-error”  718
麒麟系统也能完整体验微信啦!  660
统信桌面专业版【如何查询系统安装时间】  636
统信操作系统各版本介绍  627
统信桌面专业版【全盘安装UOS系统】介绍  601
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!