zoukankan      html  css  js  c++  java
  • MyBatis整合Spring+SpringMVC搭建一个web项目(SSM框架)

    本文讲解如何搭建一个SSM架构的web站点

    【工具】

    IDEA、SqlYog、Maven

    【简述】

    该项目由3个模块组成:dao(数据访问层)、service(业务处理层)、web(表现层)

    dao层:负责与数据库交互,包含entity(实体类)和dao(持久化方法类)包

    service层:负责业务处理和事务管理,将表现层输入输出的数据进行处理后持久化保存、返回表现层所需要的各种数据

    web层:网站项目,负责与用户交互

    【开始搭建】

    一、dao层

    依赖:mysql-connector-java、mybatis、mybatis-spring、spring-jdbc、spring-core、spring-context、spring-aop

    说明:该层需要配置与数据库交互,我们用的是mysql数据库,所以依赖mysql连接库、mybatis库;我们要和spring整合,所以依赖mybatis-spring库、spring-jdbc为;另外我们需要使用spring来管理实例,所以需要依赖spring套餐(core、context、aop)

    spring配置文件:

    spring-dao.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
            <!--<property name="driverClassName" value="com.mysql.cj.jdbc.MysqlDataSource"></property>-->
            <!--<property name="url" value="jdbc:mysql://localhost:3306/mycode_statistics?characterEncoding=UTF-8&amp;serverTimezone=GMT"></property>-->
            <!--<property name="username" value="root"></property>-->
            <!--<property name="password" value="root"></property>-->
        <!--</bean>-->
        <!--上面和下面这两种配置数据源的方式都可以,效果是一样的-->
        <bean id="dataSource" class="com.mysql.cj.jdbc.MysqlDataSource">
            <property name="url" value="jdbc:mysql://localhost:3306/mycode_statistics?characterEncoding=UTF-8&amp;serverTimezone=GMT"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
        </bean>
    
        <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"></property>
            <property name="typeAliasesPackage" value="cc.yzeng.entity"></property>
        </bean>
    
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
            <property name="basePackage" value="cc.yzeng.dao"></property>
        </bean>
    </beans>

    该文件配置了3个对象:

    1:dataSource,数据源对象,用于连接数据库,使用 org.springframework.jdbc.datasource.DriverManagerDataSource 或 com.mysql.cj.jdbc.MysqlDataSource 都可以,效果一样。

    2:sqlSessionFactoryBean,数据库连接对象,用于打开与数据库的连接,获得会话,这是mybatis-spring里封装的对象 org.mybatis.spring.SqlSessionFactoryBean ,封装自mybatis的SqlSessionFactory,专门用于ioc容器管理的sqlSessionFactory对象

       属性dataSource,引用数据源对象

         属性typeAliasesPackage,用于给配置文件里的type指定别名,通常写实体类包名,这样我们在写映射文件的时候经常用到实体类,就可以不用写包名了

    3:MapperScannerConfigurer,映射文件自动配置,用于将接口与配置文件自动关联并生成代理类,这样就可以通过接口->配置文件 来访问数据库了,而不用写接口实现类

      属性sqlSessionFactoryBeanName,引用sqlSessionFactoryBean对象

         属性basePackage,指接口所在的包名,且配置文件也要放在与包名相同的目录下

    xml映射文件:

    示例,路径:resources/cc.yzeng.dao/UserDao.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="cc.yzeng.dao.UserDao">
        <insert id="addUser" parameterType="User">
            insert into user values(#{userId},#{username},#{password},#{addTime},#{status})
        </insert>
        <select id="findUserByUserName" resultType="User">
            select * from user where username = #{username}
        </select>
        <select id="findAll" resultType="User">
            select * from user
        </select>
        <update id="updateUser" parameterType="User">
            update user
            <set>
                <if test="username != null">
                    username = #{username},
                </if>
                <if test="status != null">
                    status = #{status},
                </if>
            </set>
            where userId = #{userId}
        </update>
    </mapper>

     以上是一个xml映射文件的示例,一个实体类对应一个映射文件,映射文件的路径与接口的包名一致(而不是实体类的包名)、文件名与接口类名一致id与方法名一致(insert、select、update标签)

    二、service层

    依赖:spring-jdbc、spring-core、spring-context、spring-aop、spring-tx、spring-aspects、dao层

    spring配置文件:

    spring-service.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:tx="http://www.springframework.org/schema/tx" xmlns:apo="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
        <import resource="spring-dao.xml"></import>
        <context:component-scan base-package="cc.yzeng.service"></context:component-scan>
    
        <!--事务管理-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        
        <tx:advice transaction-manager="transactionManager" id="transactionInterceptor">
            <tx:attributes>
                <tx:method name="add*" propagation="REQUIRED"></tx:method>
                <tx:method name="create*" propagation="REQUIRED"></tx:method>
                <tx:method name="update*" propagation="REQUIRED"></tx:method>
                <tx:method name="*" read-only="true"></tx:method>
            </tx:attributes>
        </tx:advice>
    
        <apo:config>
            <apo:pointcut id="aa" expression="execution(public * cc.yzeng.service.impl.*.*(..))"></apo:pointcut>
            <apo:advisor advice-ref="transactionInterceptor" pointcut-ref="aa"></apo:advisor>
        </apo:config>
    
        <apo:aspectj-autoproxy></apo:aspectj-autoproxy>
    </beans>

    该配置文件由:导入dao配置文件、自动扫描组件、事务管理三块组成,由于不同层都有一个spring配置文件,所以要按照依赖关系分别导入这些文件

    三、web层

     依赖:spring-webmvc

     说明:依赖spring-webmvc这个库会自动引用其它spring框架需要的库

    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>
      <!--所有请求指向springMVC的入口-->
      <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <!--配置spring配置文件所在路径,默认为WEB-INF目录-->
          <param-name>namespace</param-name>
          <param-value>spring.xml</param-value>
        </init-param>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
      <!--content目录不走springMVC处理-->
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/content</url-pattern>
      </servlet-mapping>
    </web-app>

    spring.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"
           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">
    
        <!--自动扫描bean-->
        <context:component-scan base-package="cc.yzeng.controller"></context:component-scan>
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>

    配置自动扫描指向controller目录,就可以使用注解方式配置路由了。

    controller类(示例):

    package cc.yzeng.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class IndexController {
        @RequestMapping("home")
        @ResponseBody
        public String Home(){
            return "hello,world!";
        }
    }
  • 相关阅读:
    app后端session共享问题
    nignx
    dubbo
    lucene&solr-day1
    SSM框架整合,以CRM为例子
    SpringMVC入门第二天
    HBase集群搭建
    SecureCRT的Home+End+Del键映射
    记一次让人的喷血的排错经历
    基于docker搭建mysql集群
  • 原文地址:https://www.cnblogs.com/yzeng/p/11379920.html
Copyright © 2011-2022 走看看