栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM整合配置过程与MyBatis-Plus敏捷开发插件用法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM整合配置过程与MyBatis-Plus敏捷开发插件用法

Spring/Spring MVC/MyBatis(SSM)整合配置过程

MyBatis-Plus敏捷开发插件的用法

主要知识点

SSM整合配置

MyBatis-Plus配置与应用

SSM整合配置

通过Spring IoC容器管理第三方框架对象,让多框架形成整体

Spring/Spring MVC/MyBatis(SSM)是业内最主流的框架搭配

SSM整合三阶段
  • Spring与Spring MVC环境配置
  • Spring与MyBatis的整合配置
  • 整合其他组件:声明式事务/日志/任务调度
一. Spring与Spring MVC环境配置

依赖spring-webmvc

配置DispatcherServlet

启用Spring MVC注解模式

配置请求与响应字符集

配置FreeMarker模版引擎

配置Json序列化组件

1.依赖spring-webmvc

pom.xml



    4.0.0

    synu.edu.cn
    book-review
    1.0-SNAPSHOT

    
        8
        8
    

    
        
            org.springframework
            spring-webmvc
            5.2.16.RELEASE
        

        
        
            org.freemarker
            freemarker
            2.3.28
        
        
        
            org.springframework
            spring-context-support
            5.2.16.RELEASE
        

        
        
            com.fasterxml.jackson.core
            jackson-core
            2.9.8
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.9.8
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.9.8
        
    

2.配置DispatcherServlet

web.xml



    
    
        springmvc
        
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        
        0
    
    
    
        springmvc
        
        /
    

3.启用Spring MVC注解模式

applicationContext.xml

xmlns引入了tx声明式事务,在后面的配置会详细写



    
    

    
    
            
            
                
                    
                        
                        text/html;charset=utf-8
                        
                    
                
            
        
    
    
    

4.配置请求与响应字符集

请求字符集配置,只对post生效

web.xml

    
    
        characterFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        characterFilter
        /*
    

tomcat8之后默认tomcat对get请求就是UTF-8编码;get请求需要配置tomcat的server.xml

响应字符集配置,第3步代码中已经写了

applicationContext.xml

annotation-driven中额外增加message-converters

    

    
    
            
            
                
                    
                        text/html;charset=utf-8
                    
                
            
        
    
    
    
5.配置FreeMarker模版引擎

创建/WEB-INF/ftl目录

applicationContext.xml

    
    
        
        
        
        
    
    
    
        
        
        
        
            
                
                UTF-8
            
        
    
6.配置Json序列化组件

applicationContext.xml

list中新增加一项value即可application/json;charset=utf-8

    

    
    
            
            
                
                    
                        text/html;charset=utf-8
                        application/json;charset=utf-8
                    
                
            
        
    
    
    
测试

ftl目录下创建test.ftl文件,html内容写一个测试行

创建bookReview.controller.TestController.java

test1方法测试ftl的配置,test2方法测试json序列化

启动项目访问test/t1和test/t2成功即可

package bookReview.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

@Controller
public class TestController {
    @GetMapping("/test/t1")
    public ModelAndView test1(){
        //指向ftl目录下对test文件
        return new ModelAndView("/test");
    }

    @GetMapping("/test/t2")
    @ResponseBody
    public Map test2(){
        Map result = new HashMap();
        result.put("test","测试文本");
        return result;
    }
}
二. Spring与MyBatis的整合配置

依赖mybatis-spring及驱动

配置数据源与连接池

配置SqlSessionFactory

配置Mapper扫描器

创建mybatis-config.xml

先创建数据库和测试用表

数据库book_review

表test,内容id(主键自动递增)和context字段

1.依赖mybatis-spring及驱动

pom.xml

        
        
            org.springframework
            spring-jdbc
            5.2.6.RELEASE
        
        
            org.mybatis
            mybatis
            3.5.4
        
            
            org.mybatis
            mybatis-spring
            2.0.6
        
            
            mysql
            mysql-connector-java
            8.0.25
        
            
            com.alibaba
            druid
            1.2.8
        
2.配置数据源与连接池

applicationContext.xml

    
    
        
        
        
        
        
        
    
3.配置SqlSessionFactory

applicationContext.xml

通过IoC容器在初始化过程中自动实现SqlSessionFactory对象

    
    
        
        
        

    
4.配置Mapper扫描器

用于扫描指定包下所有mapper接口

applicationContext.xml

    
    
        
    

增加bookReview.mapper软件包

5.创建mybatis-config.xml

增加第3步注释空出的地方;这个配置可以不写,但是在MyBatis-Plus高级用法会用到,一起写上了

applicationContext.xml

    
    
        
        
        
        
    

创建src/main/resources/mybatis-config.xml




    
        
        
    

6.整合其他组件

在实际的项目开发中还需要注入如:声明式事务,日志模块,单元测试框架等等

  • 配置logback日志输出
  • 声明式事务配置
  • 整合JUnit单元测试
加入JUnit单元测试框架

pom.xml

        
        
            org.springframework
            spring-test
            5.2.6.RELEASE
        
        
            junit
            junit
            4.12
            test
        
				
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided     
        
测试

Mybatis扫描mapper包下的接口后,会自动生成与接口对应的实现类,而与之对应的Sql语句谁存放在xml文件中的

创建接口bookReview/mapper/TestMapper

package bookReview.mapper;

public interface TestMapper {
    public void insert();
}

创建src/main/resources/mappers/test.xml

注意mapper namespace要对应接口的路径




        
        insert into test(content) values('测试内容');
    

创建服务类bookReview/service/TestService

测试插入5条数据

package bookReview.service;

import bookReview.mapper.TestMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class TestService {
    @Resource
    private TestMapper testMapper;

    public void batchimport(){
        for (int i = 0; i < 5; i++) {
            testMapper.insert();
        }
    }
}

创建测试用例,在TestService点击菜单代码-生成-测试,勾选需要测试的方法;在自动生成的类中增加spring支持的注解

package bookReview.service;

import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestServiceTest extends TestCase {

    @Resource
    private TestService testService;

    @Test
    public void testBatchimport() {
        testService.batchimport();
        System.out.println("批量导入成功");
    }
}

运行测试方法,第一次运行会报错提示:java.lang.NoClassDefFoundError: javax/servlet/ServletContext

原因是javax/servlet/ServletContext这个类默认是由tomcat提供的,而现在的运行环境是java环境跟tomcat没有任何联系,为了解决这个问题,我们还需要在pom.xml中去依赖javax/servlet/ServletContext

在单元测试junit下增加:

        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided     
        

重新运行,执行成功!数据库加入了数据

加入logback日志组件

pom.xml

        
        
            ch.qos.logback
            logback-classic
            1.2.3
        

可以对日志格式进行调整

创建指定文件src/main/resources/logback.xml

配置声明式事务

通过配置或注解的形式简化程序中的注解管理

例如假设上面插入程序过程中产生异常,数据完整性就会被破坏

TestService

    public void batchimport(){
        for (int i = 0; i < 5; i++) {
          	if(i==3){
              	throw new RuntimeException("预期外的异常");
            }
            testMapper.insert();
        }
    }

配置声明式事务在当前的依赖包中要存在spring-tx,这个包包含在spring-jdbc中一并引入

applicationContext.xml

引入tx命名空间



配置声明式事务

    
    
            
    
    
    

配置完成,在需要调用事务的方法上增加@Transactional注解即可

程序成功运行全局提交,如果抛出运行时异常则回滚事务

package bookReview.service;

import bookReview.mapper.TestMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Service
public class TestService {
    @Resource
    private TestMapper testMapper;

    @Transactional
    public void batchimport(){
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                throw new RuntimeException("预期外的异常");
            }
            testMapper.insert5();
        }
    }
}
三. MyBatis-Plus介绍与整合步骤

Mybatis-Plus是基于Mybatis基础上的一个敏捷开发插件,可以帮助我们快速的完成对应数据表的增删改查操作

  • MyBatis-Plus(简称MP)是国人开发的一个MyBatis的增强工具
  • 自动实现Mapper CRUD操作,极致提高数据库开发效率
  • MP在MyBatis的基础上只做增强不做改变

之前的程序,实现增删改查需要声明接口,写对应sql语句,再进行调用,不是很方便

MyBatyis-Plus整合
  • pom引入mybatis-plus依赖
  • Spring XML更改配置SqlSessionFactory实现类
  • mybatis-config.xml增加MP分页插件

pom引入mybatis-plus依赖


    com.baomidou
    mybatis-plus
    3.4.3.4

Spring XML更改配置SqlSessionFactory实现类

只需要将原有的SqlSessionFactory实现调整一行,将类变更即可

    
    

    
        
        
        
        
    

mybatis-config.xml增加MP分页插件;注意插件版本3.3.2,我用3.4试了一下发现插件名不一样导致用报错,不知道还要改哪里配置,就用3.3.2版本继续了




    
        
        
    
    
        
    

MyBatis-Plus开发
  • 创建实体类,@TableName/@TableId/@TableFieId实现映射
  • 创建Mapper接口继承baseMapper,创建Mapper XML
  • 开发时注入Mapper对象,通过内置API实现CRUD操作

MyBatis-Plus核心注解

@TableName 将实体类与表名映射

@TableId 说明对应属性时表的主键

@TableFieId 设置属性与列明的对应关系

baseMapper接口核心API

案例 创建实体类,@TableName/@TableId/@TableFieId实现映射

每一个MP表都要有一个对应都实体,新增实体包和实体类

bookReview/eneity/Test

package bookReview.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("test")  //说明实体类对应哪一张表
public class Test {
    @TableId(type = IdType.AUTO)    //主键;自动递增
    @TableField("id")   //说明属性对应哪个字段
    private Integer id;
    @TableField("content")  //如果字段名与属性名相同或者符合驼峰命名转换规则,则TableField可以省略;如article_content属性名写articleContent
    private String content;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}
创建Mapper接口继承baseMapper,创建Mapper XML

bookReview/mapper/TestMapper

package bookReview.mapper;

import bookReview.entity.Test;
import com.baomidou.mybatisplus.core.mapper.baseMapper;

public interface TestMapper extends baseMapper {
    public void insert5();  //之前自定义的insert5方法也可以使用,注意不要与baseMapper接口方法重名
}

注意自定义的方法名要与之前创建的src/main/resources/mappers/test.xml中id对应

开发时注入Mapper对象,通过内置API实现CRUD操作

新建测试用例方法TestMyBatisPlus;注意注入TestMapper接口而不是之前的TestService类了;自定义的TestMapper接口继承了baseMapper接口,包含了CRUD方法;

package bookReview.service;

import bookReview.entity.Test;
import bookReview.mapper.TestMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestMyBatisPlus {
    @Resource
    private TestMapper testMapper;

    @org.junit.Test
    public void testInsert(){
        Test test = new Test();
        test.setContent("MyBatis Plus测试");
        testMapper.insert(test);
    }

    @org.junit.Test
    public void testUpdate(){
        Test test = testMapper.selectById(52);
        test.setContent("MyBatis Plus测试1");
        testMapper.updateById(test);
    }

    @org.junit.Test
    public void testDelete(){
        testMapper.deleteById(9);
    }

    @org.junit.Test
    public void testSelect(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("id",52);    //等值比较
        queryWrapper.gt("id", 52);     //id大于5  两个条件一起写可以追加
        List list = testMapper.selectList(queryWrapper);
        System.out.println(list.get(0));
    }

}

通过MyBatis-Plus可以根据配置好的映射关系,自动生成sql语句,极大的减少了我们的工作量

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号