最简单的SSM整合spring+mybatis+springmvc

一: spring整合mybatis

1 新建项目 导入依赖(sprinhg8个 mybtais log4j 数据源 spring-mybatis(整合包)还有springmvc )

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fafa</groupId>
    <artifactId>spring07</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <junit.version>4.12</junit.version>
        <mybatis.version>3.2.8</mybatis.version>
        <MysqL.version>5.1.44</MysqL.version>
        <slf4j.version>1.6.6</slf4j.version>
        <spring.version>4.3.14.RELEASE</spring.version>
        <lombok.version>1.18.0</lombok.version>
        <pageHelper.version>4.1.6</pageHelper.version>
        <jsqlparser.version>0.9.6</jsqlparser.version>
        <mybatis-spring.version>1.2.2</mybatis-spring.version>
        <druid.version>1.0.9</druid.version>
        <mbg.version>1.3.2</mbg.version>
        <c3p0.version>0.9.5-pre10</c3p0.version>
        <jackson.version>2.9.8</jackson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- webmvc jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- mybatis 的分页插件 -->
        <dependency>
            <groupId>com.github.pageHelper</groupId>
            <artifactId>pageHelper</artifactId>
            <version>${pageHelper.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>${jsqlparser.version}</version>
        </dependency>
        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- MysqL -->
        <dependency>
            <groupId>MysqL</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${MysqL.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <!-- spring 容器包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring 核心包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring bean -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring 一些表示式 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring test-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring aop-->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- 日志处理 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!--生成mybatis 代码-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>${mbg.version}</version>
        </dependency>

        <!-- mybatis 整合入spring 的包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>
        <!-- 帶有连接池功能的數據源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
                <version>3.3</version>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8081</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <dependencies>
                    <dependency>
                        <groupId>MysqL</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.44</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!--配置文件的路径-->
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2 添加配置文件自动生成代码

![在这里插入图片描述](https://img-blog.csdnimg.cn/ea41a0930e17437193a0fb5872a6240f.png

jdbc.driverClass=com.MysqL.jdbc.Driver
jdbc.url=jdbc:MysqL://localhost:3306/shujuku?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.user=root
jdbc.password=123456

group.package=com.fafa
# \u5982\u679C\u662FMysqL \u8FD9\u4E2A\u914D\u7F6E\u53EF\u4EE5\u4E0D\u5199  \u5982\u679C\u662Foracle \u8FD9\u91CC\u8981\u5199\u6210\u6570\u636E\u5E93\u540D\u5B57
catalog.name=shujuku
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	<properties resource="config.properties"/>
	<context id="testTables" targetRuntime="MyBatis3">
		<property name="javaFileEncoding" value="UTF-8"></property>
		<property name="beginningDelimiter" value="`"/>
		<property name="endingDelimiter" value="`"/>
		<property name="lombok" value="Getter,Setter,ToString,Accessors"/>
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="${jdbc.driverClass}"
			connectionURL="${jdbc.url}"
			userId="${jdbc.user}"
			password="${jdbc.password}">
		</jdbcConnection>
	
		<!-- 认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="${group.package}.entity"
			targetProject="src/main/java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimstrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="mapper"
			targetProject="src/main/resources">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="${group.package}.mapper"
			targetProject="src/main/java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定数据库表
		% 就是把这个数据库下面的表 都反向生成
		-->
		<table schema="" tableName="tb_users"></table>


	</context>
</generatorConfiguration>

log4j.rootLogger=INFO,A3,STDOUT
log4j.logger.com.fafa.mapper=debug
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n

log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
<?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>
    
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <plugins>
        <!-- com.github.pageHelperpageHelper类所在包名 -->
        <plugin interceptor="com.github.pageHelper.pageHelper">
            <!-- 设置数据库类型 Oracle,MysqL,MariaDB,sqlite,Hsqldb,Postgresql六种数据库 -->
            <property name="dialect" value="MysqL" />
            <!-- 自动转化页码 和 开始条数 -->
            <property name="offsetAsPageNum" value="true"/>
        </plugin>
    </plugins>

</configuration>

3

1Datasource 的bean(c3p0)
2session工厂(这个是spring 提供类) 对标自己写的 Mydbutils
3告诉spring mapper的接口在哪里 spring 要生成一个mapper 的bean
4把spring 提供事务切面

beans_mapper.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"

       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-4.3.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

   <context:component-scan base-package="com.fafa" use-default-filters="true">
      <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
   </context:component-scan>

   <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
   <!--配置事务用注解驱动-->
   <tx:annotation-driven></tx:annotation-driven>

   <!--数据源 切记去掉mb 中的数据源的配置-->
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="driverClass" value="com.MysqL.jdbc.Driver"/>
      <property name="jdbcUrl" value="jdbc:MysqL://localhost:3306/shujuku?characterEncoding=utf8"/>
      <property name="user" value="root"/>
      <property name="password" value="123456"/>
   </bean>
   <!--配置session 工厂 切记去掉 mb.xml 中的映射的配置-->
   <bean id="sessionFactory" class="org.mybatis.spring.sqlSessionfactorybean">
      <property name="dataSource" ref="dataSource"/>
      <property name="configLocation" value="classpath:mb.xml"/>
      <!--映射文件在哪里-->
      <property name="mapperLocations" value="classpath:mapper/*.xml"/>
   </bean>
   <!--mapper 烧苗 spring 要生成所的mapper bean-->
   <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionfactorybeanName" value="sessionFactory"/>
      <!--去哪里扫描 mapper 的接口-->
      <property name="basePackage" value="com.fafa.mapper"/>
   </bean>
   <!--把spring 提供事务切面类 配置成bean-->
   <!--事务切面bean-->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
   </bean>

</beans>

beans_mvc.xml

<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/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!--去哪里扫描controller bean-->
    <context:component-scan base-package="com.fafa.controller"/>

    <!--声明路径和 controller 关系 通过注解 驱动获得-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--配置视图解析器 的bean-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--配置转发-->
    <mvc:view-controller path="/" view-name="login"/>
    <mvc:view-controller path="/tocs" view-name="cs"/>

    <!--静态资源不被dispatcherServlet 拦截-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    </beans>

4 自己写service 测试

在这里插入图片描述

package com.fafa.service;
import com.fafa.entity.TbUsers;

public interface UseRSService {
    public void addUser(TbUsers users) throws Exception;

    TbUsers findUsersByID(int id);

    TbUsers login(String name,String password);
}
package com.fafa.service.impl;

import com.fafa.entity.TbUsers;
import com.fafa.entity.TbUsersExample;
import com.fafa.exception.AppException;
import com.fafa.mapper.TbUsersMapper;
import com.fafa.service.UseRSService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;


@Service
public class UseRSServiceImpl implements UseRSService {
  @Autowired
  private TbUsersMapper usersMapper;
    @Override
    @Transactional(readOnly = false,timeout = -1,rollbackFor=Exception.class,propagation = Propagation.required)
    public void addUser(TbUsers users) throws Exception {
        usersMapper.insertSelective(users);
//       int a=1/0;
//      if (1==1){
//        throw new Exception();
//      }

//      usersMapper.insertSelective(users);
    }

  @Override
  public TbUsers findUsersByID(int id) {
    return usersMapper.selectByPrimaryKey(id);
  }

  @Override
   public TbUsers login(String name, String password) {
    TbUsersExample example = new TbUsersExample();
    example.createCriteria().andNameEqualTo(name);
    List<TbUsers> tbUsers = usersMapper.selectByExample(example);
    if (tbUsers==null||tbUsers.size()==0){
      throw new AppException("300","用户不存在");
    }
    if (password.equals(tbUsers.get(0).getpassword())==false){
      throw new AppException("301","用户名或密码错误");
    }

    return tbUsers.get(0);
  }
}

test

package com.fafa.test;

import com.fafa.entity.TbUsers;
import com.fafa.service.impl.UseRSServiceImpl;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:beans_mapper.xml")
public class Test {
    @Autowired
    private UseRSServiceImpl useRSService;
    @org.junit.Test
    public void add() throws Exception {
        TbUsers users = TbUsers.builder().name("发发").password("123456").build();
        useRSService.addUser(users);
//            int a = 1/0;
//        useRSService.addUser(users);
    }

}

5 配置事务切面bean(spring 提供的)

已经在beans配置了
在去需要事务增强方法添加事务注解

    @Transactional(readOnly = false,timeout = -1,rollbackFor=Exception.class,propagation = Propagation.required)
 public void addUser(TbUser user)

二: 整合springmvc

1 web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">


    <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:beans_mvc.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>
    <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>
    <!--配置项目启动的时候 加载 spring 的容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans_mapper.xml</param-value>
    </context-param>

</web-app>

2 排除spring bean扫描 springmvc的controller

<!--去哪里扫描注解 要排除controller 注解-->
<context:component-scan base-package="com.qf.springtest010" use-default-filters="true">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...