SpringMVC(13) —— SSM整合:MyBatis层(spring-dao.xml)


在原来的MVC 3层架构中

  • M层:model层,包含了Dao层和service层,即对数据库的具体操作和实现指定功能的业务逻辑编码就在M层完成
  • C层:controller层,即servlet,servlet用于接收前端传过来的数据,调用model获取数据,并将数据返回给前端,最后指定视图跳转
  • V层:view层,即视图层,一般就是JSP页面和HTML页面,这些页面接收servlet传递过来的参数,以及可以获取session和application中的数据,获得数据之后就将数据渲染在页面上供用户读取

现在我们使用的SSM框架

  • mybatis:mybatis主要对数据库的操作进行了封装简化,即对Dao层做了简化,让我们是实现一张表只需要一个mapper接口,一个mapper.xml和一个mybatis核心配置文件就能操作到指定的数据库中的数据;
    • 对于model层中的service层,mybatis并没有对它进行封装简化,这层主要的变化就是由于引入了spring框架,所以这一层要使用的Dao层的接口实例由spring容器来自动注入,其他的并没有什么变化,该怎么写还是怎么写
  • spring:spring框架的引入让我们获得了两大利器,IOC容器和AOP横向增强技术
    • IOC对应到以前的MVC架构中,它的作用就是管理service调用dao层的对象实例,和servlet层调用service层的对象实例,即管理dao层和service层的bean;
    • 正是因为spring容器要管理service层的bean,所以AOP横向功能增强也应该在spring容器中配置,事务也应该在spring容器中配置;
    • 除此之外,由于要整和spring和mybatis,所以spring容器中还要配置mybatis的数据环境节点和sqlSessionFactory节点;
    • 以及管理封装mybatis操作的mapper的实现类(这一步可以使用dao接口包扫描,让spring自动扫描mapper接口包,生成对应的实现类,并按照我们配置的spring文件自动为我们注入到service层中)

0.项目准备

环境:

  • IDEA
  • MySQL 5.7.19
  • Tomcat 9
  • Maven 3.6

要求:

  • 需要熟练掌握MySQL数据库(能够建表,基本CRUD即可)
  • Spring
  • JavaWeb及MyBatis知识
  • 简单的前端知识(也很重要)

1.项目开发步骤

在这里插入图片描述

2.需求分析

    需求:图书的CRUD

3.数据库设计

-- 创建数据库
CREATE DATABASE `ssmbuild`;
--使用数据库
USE `ssmbuild`;
--清理数据库
DROP TABLE IF EXISTS `books`;

--创建表
CREATE TABLE `books` (
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
`bookName` VARCHAR(100) NOT NULL COMMENT '书名',
`bookCounts` INT(11) NOT NULL COMMENT '数量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

--插入数据
INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,'Java',1,'从入门到放弃'),
(2,'MySQL',10,'从删库到跑路'),
(3,'Linux',5,'从进门到进牢');

在这里插入图片描述

4.业务实现

1.环境搭建

  1. 新建一Maven项目! ssmbuild , 添加web的支持
    在这里插入图片描述
    <?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.thhh</groupId>
        <artifactId>ssmbuild</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--1、依赖问题-->
        <!--2、资源文件导出问题-->
    
    </project>
    
  2. 导入相关的pom依赖
    <?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.thhh</groupId>
       <artifactId>ssmbuild</artifactId>
       <version>1.0-SNAPSHOT</version>
    
       <!--1、依赖问题
               junit、数据库驱动、连接池、servlet、jsp、mybatis、mybatis-spring、spring-->
       <dependencies>
           <!--Junit-->
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>4.12</version>
               <scope>test</scope>
           </dependency>
           <!--数据库驱动-->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.47</version>
           </dependency>
           <!-- 数据库连接池 c3p0-->
           <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
           <dependency>
               <groupId>com.mchange</groupId>
               <artifactId>c3p0</artifactId>
               <version>0.9.5.5</version>
           </dependency>
    
           <!--Servlet - JSP -->
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
               <version>2.5</version>
           </dependency>
           <dependency>
               <groupId>javax.servlet.jsp</groupId>
               <artifactId>jsp-api</artifactId>
               <version>2.2.1-b03</version>
           </dependency>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>jstl</artifactId>
               <version>1.2</version>
           </dependency>
           <!--Mybatis-->
           <dependency>
               <groupId>org.mybatis</groupId>
               <artifactId>mybatis</artifactId>
               <version>3.5.2</version>
           </dependency>
           <dependency>
               <groupId>org.mybatis</groupId>
               <artifactId>mybatis-spring</artifactId>
               <version>2.0.5</version>
           </dependency>
           <!--Spring-->
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-webmvc</artifactId>
               <version>5.2.8.RELEASE</version>
           </dependency>
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-jdbc</artifactId>
               <version>5.2.8.RELEASE</version>
           </dependency>
       </dependencies>
    
    
    
       <!--2、资源文件导出问题-->
       <build>
           <resources>
               <resource>
                   <directory>src/main/resources</directory>
                   <includes>
                       <include>**/*.properties</include>
                       <include>**/*.xml</include>
                   </includes>
                   <filtering>true</filtering>
               </resource>
               <resource>
                   <directory>src/main/java</directory>
                   <includes>
                       <include>**/*.properties</include>
                       <include>**/*.xml</include>
                   </includes>
                   <filtering>true</filtering>
               </resource>
           </resources>
       </build>
    
    </project>
    
  3. 链接数据库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 创建包结构
    在这里插入图片描述

2.编写代码

  1. 开发顺序
        开发顺序还是按照原来开发smbms的时候的顺序,或者这是开发项目的固定步骤
    Dao/Mapper层(接口+实现) – Service层(接口+实现) – controller层 – JSP

  2. Dao/Mapper层

    • 配置关联的数据库,使用配置文件
    jdbc.driver=com.mysql.jdbc.Driver
    # 使用mybatis8.0以上还要增加时区配置 &serverTimezone=Aisa/Shanghai
    jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=123
    
    1. 配置mybatis核心文件
    <?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>
        <!--数据源配置交给spring容器-->
        <typeAliases><!--别名配置-->
            <package name="com.thhh.pojo"/>
        </typeAliases>
    </configuration>
    

    3.创建对应的POJO
    在这里插入图片描述

    1. 有一个POJO就去为它创建一个Mapper/Dao
    package com.thhh.mapper;
    
    import com.thhh.pojo.Books;
    
    import java.util.List;
    
    public interface BookMapper {
        //新增一本数
        int addBook(Books books);
        
        //删除一本书
        int deleteBookById(int id);
        
        //修改一本书
        int updateBook(Books books);
        
        //查询一本书
        Books queryBookById(int id);
        
        //查询所有的书
        List<Books> queryBookList();
    }
    
    1. 有一个mapper,就为它创建一个mapper.xml
    <?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.thhh.mapper.BookMapper">
        <insert id="addBook" parameterType="books">
            insert into ssmbuild.books(bookName, bookCounts, detail) VALUES(#{bookName},#{bookCounts},#{detail})
        </insert>
        <delete id="deleteBookById">
            delete from ssmbuild.books where bookID = #{bookID}
        </delete>
        <update id="updateBook" parameterType="books">
            update ssmbuild.books
            set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
        </update>
        <select id="queryBookById" resultType="books">
            select * from ssmbuild.books where bookID = #{bookID}
        </select>
        <select id="queryBookList" resultType="books">
            select * from ssmbuild.books
        </select>
    </mapper>
    
    1. 将mapper.xml绑定到mybatis核心文件中,当然也可以绑定到spring配置文件的sqlsessionfactory节点内部
       <mappers>
           <mapper class="com.thhh.mapper.BookMapper"/>
       </mappers>
    
  3. service层

    1. 编写service层,业务层本来就是在实现业务员逻辑,主要还是在调用Dao/Mapper的方法执行,所以service接口设计可以和Dao/Mapper接口设计相同,只是方法的具体实现有所不同;dao层专注与操作数据库;service专注于调用dao层,实现业务
    package com.thhh.service;
    
    import com.thhh.pojo.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    public interface BookService {
        //新增一本数
        int addBook(Books books);
    
        //删除一本书
        int deleteBookById(int id);
    
        //修改一本书
        int updateBook(Books books);
    
        //查询一本书
        Books queryBookById(int id);
    
        //查询所有的书
        List<Books> queryBookList();
    }
    
    1. 实现service接口,由于我们的功能比较简单,现在的service层先不用进行逻辑代码编写,直接返回数据即可(原来的3层架构中,service层只要是获取数据库连接对象,调用dao操作数据的方法,并将连接对象传入,最后将dao层的数据返回)
    package com.thhh.service;
    
    import com.thhh.mapper.BookMapper;
    import com.thhh.pojo.Books;
    
    import java.util.List;
    
    public class BookServiceImpl implements BookService{
       //service调用dao层,需要一个dao层的对象,这里直接私有一个dao层的接口,实例化就是要spring容器自动注入
       private BookMapper bookMapper;
    
       public void setBookMapper(BookMapper bookMapper) {//必须有这个set方法,spring自动注入的原理就是调用set方法
           this.bookMapper = bookMapper;
       }
    
       @Override
       public int addBook(Books books) {
           return bookMapper.addBook(books);
       }
    
       @Override
       public int deleteBookById(int id) {
           return bookMapper.deleteBookById(id);
       }
    
       @Override
       public int updateBook(Books books) {
           return bookMapper.updateBook(books);
       }
    
       @Override
       public Books queryBookById(int id) {
           return bookMapper.queryBookById(id);
       }
    
       @Override
       public List<Books> queryBookList() {
           return bookMapper.queryBookList();
       }
    }
    

    到此,使用mybatis实现M层的代码和配置文件 就已经写完了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值