整合Mybatis、Spring、SpringMVC

整合Mybatis、Spring、SpringMVC

简单概述一下SSM它们各个的实现方式跟总结,方便更好的理解整合原理。

Mybatis

1.我们的Mybatis简单来说就是用来操作数据库写一些语句配mapping操作数据库,第一步就是导入依赖,然后再resource文件下创建一个mybatis.config ,正常使用就是把我们以前使用jdbc连接数据库的代码写上,驱动、账号、密码配置,然后我们写一个接口写一个查询的方法,然后创建一个Mybatis-Config.xml 再mapper中配置好语句设置好返回类型跟参数,然后就是通过sqlsessionfuctory来执行语句。

Spring

1.如果说Mybatis操作数据库的话,我们的Spring就类似于操作实体类一样,Spring中有俩种思想,俩种模式,一个是IOC反转思想,一个是AOP面向切面编程。在IOC反转思想就是,我们通过设置给属性或者对象设置set,然后我们在用户层调用set直接设置对象然后get就可以获取到在spring中我们直接把实现接口bean上通过测试就可以获取这个接口的实现方法或者属性。

SpringMVC

1.前面俩个一个是操作数据库一个是类似操作实体类,SpringMVC就是操作视图层,通过Controller,SpringMVC在SSM整个项目中占据重要地位,我们导入SpringMVC依赖然后,建一个普通项目并且添加web,然后我们配置web下面的xml中注册DispatcherServlet,然后配置下面的init-param绑定resource下面的配置文件,我们里面的配置要写在里面所以要前后交互需要将俩个配置文件进行关联,然后给对应的selvt创建对应的mapping 设置/意思是使所有页面都会走到这个地方,然后我们在resource下面设置自动扫描,设置注解驱动,设置静态资源过滤,设置视图解析器,然后我们通过注解就可以跟我们设置的jsp页面进行交互。

SSM整合总流程(细致)

第一步创建一个项目,添加web,并且设置成如下的目录格式:
在这里插入图片描述

第二步导入所有需要的依赖

   <dependencies>
        <!--        mysql依赖-->

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>

        <!--        Mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--        junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.4</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>


    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

第三步展示数据库

在这里插入图片描述

第四步创建实体类封装使其的所有属性跟数据库的字段对应

在这里插入图片描述

package com.xs.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class books {
    private int bookid;
    private String bookName;
    private int bookCounts;
    private String detail;


}

第五步在Dao层写增删改查的接口并且映射到Mapper中

在这里插入图片描述

package com.xs.dao;

import com.xs.pojo.books;

import java.util.List;

public interface Modelbooks {
    //增加一本书
    int InsertBook(books books);
    //删除一本书
    int DeleteBookById(int id);
    //修改一本书
    int UpdateBook(books books);
    //查找一本书
    books SelectBookById(int id);
    //查找所有的书
    List<books> SelectBooks();
}

映射到mapper文件
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xs.dao.Modelbooks">
    <!--    增加一本书-->
    <insert id="InsertBook" parameterType="com.xs.pojo.books">
        insert into books (bookName, bookCounts, detail)
        values (#{bookName}, #{bookCounts}, #{detail});
    </insert>
    <!--    删除一本书-->
    <delete id="DeleteBookById" parameterType="int">
        delete
        from books
        where bookid = #{id};
    </delete>
    <!--    修改一本书-->
    <update id="UpdateBook" parameterType="com.xs.pojo.books">
        update books
        set bookName=#{bookName},
            bookCounts=#{bookCounts},
            detail=#{detail}
        where bookid = #{bookid}
    </update>
    <!--    查找一本书-->
    <select id="SelectBookById" parameterType="int" resultType="com.xs.pojo.books">
        select *
        from where bookid=#{id};
    </select>
    <!--    查找所有的书-->
    <select id="SelectBooks" resultType="com.xs.pojo.books">
        select *
        from books;
    </select>
</mapper>

然后创建Mybatis-config.xml把mapper配置到文件中
在这里插入图片描述

<?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>


    <mappers>
        <mapper resource="com/xs/dao/ModelbooksMapper.xml"/>
    </mappers>
</configuration>

第六步 Spirng整合Mybatis连接数据库

在这里插入图片描述

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

<!--    关联数据库配置文件-->
    <context:property-placeholder location="classpath:database.properties"/>


<!--    链接c3p0数据库连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>


<!--        c3p0连接池的私有属性-->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
<!--        关闭连接后不自动commit-->
        <property name="autoCommitOnClose" value="false"/>
<!--        获取连接超时时间-->
        <property name="checkoutTimeout" value="10000"/>
<!--        当获取连接失败重试次数-->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

<!--    3.sqlsessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--        绑定Mybatis的配置文件-->
        <property name="configLocation" value="classpath:Mybatis-config.xml"/>

    </bean>


<!--    4.配置dao接口扫描包,动态的实现了Dao接口可以注入到Spring容器中!-->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--        注入sqlsessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--        要扫描的包  扫描dao下的所有包 我们不用再继承实体类了 不用配bean之后 service直接就可以获取到-->
        <property name="basePackage" value="com.xs.dao"/>
    </bean>

</beans>

第七步创建Service层业务层,用业务层调用Dao层,里面也写着同样的方法

在这里插入图片描述
然后我们通过Spring中的IOC反转中的Set格式,通过业务层创建Dao层对象然后把Dao层的增删改查的方法都实现了个复用过程返回给Service中的方法,然后我们通过调用Service就可以调用Dao层的方法。
在这里插入图片描述

package com.xs.service;

import com.xs.dao.Modelbooks;
import com.xs.pojo.books;

import java.util.List;

public class bookServiceImpl implements bookService{

    //我们的业务层调DAO层
    private Modelbooks modelbooks;

    public void setModelbooks(Modelbooks modelbooks) {
        this.modelbooks = modelbooks;
    }

    @Override
    public int InsertBook(books books) {
        return modelbooks.InsertBook(books);
    }

    @Override
    public int DeleteBookById(int id) {
        return modelbooks.DeleteBookById(id);
    }

    @Override
    public int UpdateBook(books books) {
        return modelbooks.UpdateBook(books);
    }

    @Override
    public books SelectBookById(int id) {
        return modelbooks.SelectBookById(id);
    }

    @Override
    public List<books> SelectBooks() {
        return modelbooks.SelectBooks();
    }
}

第八步配置Spring-service层的配置

在这里插入图片描述

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
      https://www.springframework.org/schema/context/spring-context.xsd">


<!--    插入自动扫描-->
    <context:component-scan base-package="com.xs.service"/>

    <bean id="bookServiceImpl" class="com.xs.service.bookServiceImpl">
        <property name="modelbooks" ref="modelbooks"/>
    </bean>
<!--    声明式事务配置-->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--        注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

第九步配置Spring-MVC的配置文件

在这里插入图片描述

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
      https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--    自动扫描-->
    <context:component-scan base-package="com.xs.Controller"/>
<!--注解驱动-->
<mvc:annotation-driven/>
<!--    静态资源过滤-->
    <mvc:default-servlet-handler/>
<!--    视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

第十步,(重要),一些隐形的bug存在其中

把三个配置文件导入到一个总AppactionContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">


    <import resource="classpath:spring-dao.xml"/>
    <import resource="classpath:spring-Service.xml"/>
    <import resource="classpath:springmvc-servlet.xml"/>
</beans>

然后把web下面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">

    <!--1.注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:AppactionContext.xml</param-value>
        </init-param>
        <!--启动级别-1-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--/ 匹配所有的请求;(不包括.jsp)-->
    <!--/* 匹配所有的请求;(包括.jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

第十一步在Controller中创建Controller测试类

在这里插入图片描述

package com.xs.Controller;


import com.xs.pojo.books;
import com.xs.service.bookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/book")
public class BookController {

    @Autowired//自动装配
    @Qualifier("bookServiceImpl")
    private bookService bookService;

    @RequestMapping("/cxbook")

    public String getTest(Model model){
        List<books> books = bookService.SelectBooks();
        model.addAttribute("list",books);

        return "/test";
    }
}

第十一步运行测试

在这里插入图片描述

总结:

此整合的核心在,我们配置了dao的配置连接数据库,并且设置了自动扫描dao包下的类使我们Spring-service配置bean的时候连接上数据库,所以当我们调用这个配置的bean的时候就可以直接获取数据库的连接。此处就是这处比较难理解。还有就是我们通过service层创建了跟dao层同样的方法接口,然后创建一个实现类继承接口继承方法,然后通过IOC反转set个dao层的接口对象,然后通过return的方式将dao层接口对象中的方法返回给service层的方法,这样就是实现了我们调用service中的方法就等于调用了dao层的方法并且通过走Mpper执行sql语句,实际上就是业务层调dao层的方式,任何项目都要遵循业务层调dao层的原则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值