SSM基于整合

一:创建ssh(spring&springmvc&mybatis)maven工程

1-1:打开idea创建工程,按照如下步骤创建maven项目

如下填写组织名和项目名

如下选择maven库路径,以及maven软件下的config目录下的setting文件

1-2:在pop.xml文件中导入工程所需要的jar包

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.lanou</groupId>
  <artifactId>ssm1</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>ssm1 Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <!--配置编码-->
  <properties>
    <spring_data_version>4.3.8.RELEASE</spring_data_version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--mybatis核心jar包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.5</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.15</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.3</version>
    </dependency>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.22.0-CR2</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!--数据库驱动jar包-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.18</version>
    </dependency>
    <dependency>
      <!--spring 核心jar包-->
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring_data_version}</version>
    </dependency>
    <!--mybatis文件交给spring管理jar包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.2.1</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>mchange-commons-java</artifactId>
      <version>0.2.3.4</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.5</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>ssm1</finalName>
    <!--扫描src/main/java路径下所有properties配置文件和xml文件-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!-- 是否替换资源中的属性-->
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
  </build>

</project>

1-3:在resource文件夹下配置数据库连接数据源,properties文件

文件内容如下,数据库连接以及c3p0池的配置

# 配置四大参数
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis
db.username=root
db.password=123
# 池配置
db.initialPoolSize=20
db.maxIdleTime=60
db.maxPoolSize=200
db.minPoolSize=50
db.acquireIncrement=3
db.acquireRetryDelay=1000
db.acquireRetryAttempts=30
db.breakAfterAcquireFailure=false

1-4:配置mybatis配置文件

配置如下:由于整合中数据库的连接以及事物等都由spring来维护,所以将这些配置文件配置在spring配置文件中

<?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>
        <!-- lazyLoadingEnabled:延迟加载的开关,默认为:false -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- aggressiveLazyLoading默认为true一当为true上面的懒加载就会失效-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!-- cacheEnabled:二级缓存的开关,默认为:false-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <mappers>
        <!--扫描该路径下的包下的所有mapper影射文件-->
        <package name="com.ssm.*.dao"/>
    </mappers>
</configuration>


1-5:配置spring配置文件

java下目录结构


spring配置文件如下

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


    <!--mvc导航 注解-->
    <mvc:annotation-driven/>

    <!--自动扫描-->
    <context:component-scan base-package="com.lanou.ssm.*"/>

    <!--注解-->
    <context:annotation-config/>
    <!--
        将静态资源,交由web处理
        SpringMVC不管
    -->
    <mvc:default-servlet-handler/>

    <!-- SpringMVC:处理请求转发 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <context:property-placeholder location="classpath:db.properties"/>

    <!-- 配置c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="driverClass" value="${db.driver}"/>
        <property name="jdbcUrl" value="${db.url}"/>
        <property name="user" value="${db.username}"/>
        <property name="password" value="${db.password}"/>

        <property name="initialPoolSize" value="${db.initialPoolSize}"/>
        <!--最大空闲时间,池中连接对象,长时间不使用则被丢弃-->
        <!--默认:0,不丢弃-->
        <property name="maxIdleTime" value="${db.maxIdleTime}"/>
        <property name="maxPoolSize" value="${db.maxPoolSize}"/>
        <property name="minPoolSize" value="${db.minPoolSize}"/>

        <!--若池中无空闲连接,则一次性增加多少连接对象-->
        <!--默认:3-->
        <property name="acquireIncrement" value="${db.acquireIncrement}"/>

        <!--两次获取连接的间隔时间-->
        <!--默认:1000毫秒-->
        <property name="acquireRetryDelay" value="${db.acquireRetryDelay}"/>

        <!--若获取连接失败,尝试多少次-->
        <!--默认:30次-->
        <property name="acquireRetryAttempts" value="${db.acquireRetryAttempts}"/>


        <!--获取连接失败,则会引起所有正在等待连接池给予连接的线程,抛出异常-->
        <!--但是数据源扔有效保留,并在下次调用getConnection时,继续尝试获取连接-->
        <!--如果设置为true,那么在尝试获取连接失败后,会将数据源设置为已断开状态并永久关闭-->
        <!--默认:false-->
        <property name="breakAfterAcquireFailure" value="${db.breakAfterAcquireFailure}"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <!--mybatis的配置文件路径-->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>

        <!--在spring的配置文件中,为mybatis指定数据源-->
        <!--就是我们上面定义的c3p0的dataSource-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--这里和ssh时一样,配置事务管理对象-->
    <!--切面-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>


    <!--配置事务属性-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*"/>
            <tx:method name="delete*"/>
            <tx:method name="update*"/>
            <tx:method name="find*"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pointCut" expression="execution(* com.ssm.*.dao.*.*(..))"/>

        <!--
            配置通知
            就是在切入点前后要做的事情(前置通知后置通知什么的
        -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
    </aop:config>

    <!--由spring管理原始dao-->
    <!--方式一-->
    <!--<bean id="userDao" class="com.lanou">-->
    <!--<property name="sqSessionFactory" ref="sqlSessionFactory"/>-->
    <!--</bean>-->

    <!--方式二-->
    <!--通过mapper代理开发模式,批量进行mapper配置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定批量mapper配置的包名(就是dao层)-->
        <property name="basePackage" value="com.lanou.ssm.*.dao"/>
        <!--指定这些dao都使用哪个SqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

</beans>

1-6:web.xml配置文件下的配置

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--指定Spring配置文件件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet.xml</param-value>
  </context-param>


  <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>60000</param-value>
  </context-param>
  <filter>
    <filter-name>characterEncoding</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>characterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>

    <!--指定SpringMVC配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-servlet.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


如果想要使用mybatis的逆向工程还需要有相应配置,如下,


generator.properties配置文件如下

该jar包在所在位置
jdbc.driverLocation=Users/lanou3g/Desktop/localWarehome/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=123

generator-config.xml配置文件如下

<?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="generator.properties"/>
    <classPathEntry location="${jdbc.driverLocation}"/>
    <context id="default" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection
                driverClass="${jdbc.driver}"
                connectionURL="${jdbc.url}"
                userId="${jdbc.username}"
                password="${jdbc.password}">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在该项目下所在的路径
        -->
        <javaModelGenerator targetPackage="com.lanou.yx.cost.domain"
                            targetProject="src/main/java">

            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加 构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
        <sqlMapGenerator targetPackage="com.lanou.yx.cost.dao"
                         targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->
        <javaClientGenerator targetPackage="com.lanou.yx.cost.dao"
                             targetProject="src/main/java"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>


        <!--数据库中的表对应关系-->
        <table tableName="account" domainObjectName="Account"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>

    </context>
</generatorConfiguration>

以上就是ssm所有配置下面我们来测试一下

如图建立一个测试文件


1-7:配置userMapper.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.lanou.ssm.user.dao.UserMapper">

    <insert id="addUser" parameterType="com.lanou.ssm.user.domain.User">
        INSERT INTO USER (id,username) VALUES (#{id},#{username});
    </insert>


</mapper>

插入数据  UserMapperTest中测试数据

public class UserMapperTest {

    private ApplicationContext context;
    private UserMapper mapper;

    @Before
    public void setUp() throws Exception {
       context =   new ClassPathXmlApplicationContext("spring-servlet.xml");
        mapper = (UserMapper) context.getBean("userMapper");

    }

    @Test
    public void insertUser() throws Exception {
        User user = new User();
        user.setUsername("abcd");
        mapper.addUser(user);
    }
}

数据库中内容如下


1-8:加入springmvc测试

在Controller新建UserController类 如下

package com.ssm.user.controller;

import com.ssm.user.dao.UserMapper;
import com.ssm.user.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserMapper userMapper;

    @RequestMapping("/tor")
    public String toRegister(){

        return "register";
    }

    @RequestMapping("/register")
    public String register(User user){
        userMapper.insertUser(user);

        return "login";
    }
    @RequestMapping("/login")
    public String login(User user){
        System.out.println(user);
        return "success";

    }
}

使用注解的方式,我们需要在UserMapper接口中使用注解自动装配 如下

package com.ssm.user.dao;

import com.ssm.user.domain.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper {
    
    void addUser(User user);
}

---------------以上就是ssm所以整合内容-----------


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值