springboot整合mybatis-plus3.0-beta

声明

这只是一个基本springboot整合mybatis-plus3.0-beta的例子,包含springboot搭建、整合mybatis-plus3.0-beta,以及遇到的坑。

springboot

关于sprintboot的介绍太多了,用我的话概述就是快速构建项目,搭建常规SSM你可能需要30分钟及以上,用springboot你只要5分钟。

mybatis-plus作用

mybatis-plus3.0-beta可以提供通用dao层、通用service层、分页功能,并提供代码生成器。单表可以快速生成后台mapper、service、serviceImpl、空的controller类。

搭建springboot项目

我用的是eclispe,也没有装插件,所以通用这个网址生成springboot项目。springboot向导。
springboot整合mybatis-plus3.0-beta_第1张图片
点击Switch back to the simple version.
springboot整合mybatis-plus3.0-beta_第2张图片
勾选web,然后下载该项目。
下载完成后解压,通过import-import-maven-exist maven projects导入
springboot整合mybatis-plus3.0-beta_第3张图片
导入完成后目录结构如下:
springboot整合mybatis-plus3.0-beta_第4张图片
创建目录,创建TestController,用于测试SpringMVC是否成功。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping("test")
    public String test() {
        return "Hello springboot!";
    }
}

springboot整合mybatis-plus3.0-beta_第5张图片

启动项目:打开ZyApplication.java类,右键Run as-java Application,出现Started ZyApplication in 3.508 seconds (JVM running for 3.964)表示成功。当然项目不一样名称就不一样,不必纠结。
打开浏览器:http://localhost:8080/test,成功访问。
springboot整合mybatis-plus3.0-beta_第6张图片
这里你会发现和以往访问不一样,因为不用输入项目名,怎么使用http://ip:port/projectName方式访问呢?

带项目名访问

将application.properties修改成application.yml,当然你用properties也可以,这里我使用yml文件。内容如下:

server: 
    servlet: 
        context-path: /springboot

springboot整合mybatis-plus3.0-beta_第7张图片
重启,再次访问:http://localhost:8080/springboot/test,访问成功。
springboot整合mybatis-plus3.0-beta_第8张图片
那么问题来了,每次改重启好麻烦,能热部署吗?能。

热部署支持

打开pom.xml文件,添加热部署支持


 <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-devtoolsartifactId>
     <optional>trueoptional>
 dependency>

springboot整合mybatis-plus3.0-beta_第9张图片
打开application.yml,添加热部署配置

spring:
    devtools: 
        restart: 
            enabled: true

springboot整合mybatis-plus3.0-beta_第10张图片
再次重启,重启完你再修改java文件你会发现项目会自动部署而不用重启。

使其支持jsp

打开pom.xml,添加相关jar包
springboot整合mybatis-plus3.0-beta_第11张图片
打开application.yml,添加jsp相关配置,并创建相关目录及test.jsp。
springboot整合mybatis-plus3.0-beta_第12张图片
修改TestController为如下内容,使其跳到对应的test.jsp,并在test.jsp中取出test的值显示。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {

    @RequestMapping("test")
    public String test(Model model) {
        model.addAttribute("test", "jsp测试");
        return "contest/test";
    }
}

创建test.jsp,路径如下方图片所示。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>testtitle>
head>
<body>
    ${test}
body>
html>

springboot整合mybatis-plus3.0-beta_第13张图片
打开浏览器,访问http://localhost:8080/springboot/test,成功显示。(如果这里提示404,请手动重新启动即可)
springboot整合mybatis-plus3.0-beta_第14张图片

加入mybatis

创建数据库springboot,执行下面的sql语句

DROP TABLE IF EXISTS `sys_admin`;

CREATE TABLE `sys_admin` (
  `id` varchar(64) NOT NULL COMMENT 'PK',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(64) NOT NULL COMMENT '密码',
  `status` int(1) NOT NULL COMMENT '状态',
  `salt` varchar(64) NOT NULL COMMENT '加密字符',
  `head_img` text COMMENT '头像',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `sys_admin` */

insert  into `sys_admin`(`id`,`username`,`password`,`status`,`salt`,`head_img`,`create_time`) values 
('1','root','root',1,'1',NULL,'2018-07-17 15:18:56');

打开pom.xml,添加mybatis和mysql的jar包,如下内容



<dependency>
    <groupId>org.mybatis.spring.bootgroupId>
    <artifactId>mybatis-spring-boot-starterartifactId>
    <version>1.1.1version>
dependency>



<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
dependency>


<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.1.0version>
dependency>

完整的pom.xml如下


<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.0modelVersion>

    <groupId>com.houpugroupId>
    <artifactId>zyartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>zyname>
    <description>Demo project for Spring Bootdescription>

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.3.RELEASEversion>
        <relativePath/> 
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-jasperartifactId>
            <scope>providedscope>
        dependency>

        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>jstlartifactId>
        dependency>

        
        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>1.1.1version>
        dependency>

        
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.1.0version>
        dependency>
    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>


project>

创建下面文件,各文件所在位置如下:
springboot整合mybatis-plus3.0-beta_第15张图片
SysAdminMapper.xml



<mapper namespace="com.houpu.zy.module.contest.mapper.SysAdminMapper">

    <resultMap id="BaseResultMap" type="com.houpu.zy.module.contest.entity.SysAdmin">
        <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="password" property="password" />
        <result column="status" property="status" />
        <result column="salt" property="salt" />
        <result column="head_img" property="headImg" />
        <result column="create_time" property="createTime" />
    resultMap>

    <select id="selectSysAdmin" resultMap="BaseResultMap">
        select * from sys_admin
    select>
mapper>

SysAdminMapper.java

package com.houpu.zy.module.contest.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.houpu.zy.module.contest.entity.SysAdmin;

@Mapper
public interface SysAdminMapper {

    /**
     * 查询所有sysAdmin记录
     * @return
     */
    List selectSysAdmin();
}

ISysAdminService.java

package com.houpu.zy.module.contest.service;

import java.util.List;

import com.houpu.zy.module.contest.entity.SysAdmin;

public interface ISysAdminService {

    /**
     * 查询所有sysAdmin记录
     * @return
     */
    List selectSysAdmin();
}

SysAdminServiceImpl.java

package com.houpu.zy.module.contest.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.mapper.SysAdminMapper;
import com.houpu.zy.module.contest.service.ISysAdminService;

@Service
public class SysAdminServiceImpl implements ISysAdminService {

    @Autowired
    private SysAdminMapper sysAdminMapper;

    @Override
    public List selectSysAdmin() {
        return sysAdminMapper.selectSysAdmin();
    }

}

SysAdmin.java

package com.houpu.zy.module.contest.entity;

import java.io.Serializable;

/**
 *
 * @author huahao
 * @since 2018-07-17
 */
public class SysAdmin implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * PK
     */
    private String id;
    /**
     * 用户名
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 状态
     */
    private Integer status;
    /**
     * 加密字符
     */
    private String salt;
    /**
     * 头像
     */
    private String headImg;
    /**
     * 创建时间
     */
    private String createTime;


    public String getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getHeadImg() {
        return headImg;
    }

    public void setHeadImg(String headImg) {
        this.headImg = headImg;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "SysAdmin{" +
        ", id=" + id +
        ", username=" + username +
        ", password=" + password +
        ", status=" + status +
        ", salt=" + salt +
        ", headImg=" + headImg +
        ", createTime=" + createTime +
        "}";
    }
}

TestController.java

package com.houpu.zy.module.contest.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.service.ISysAdminService;

@Controller
public class TestController {

    @Autowired
    private ISysAdminService sysAdminService;

    @RequestMapping("test")
    public String test(Model model) {
        model.addAttribute("test", "jsp测试");
        return "contest/test";
    }

    @RequestMapping("user")
    public String user(Model model) {
        List SysAdminList = sysAdminService.selectSysAdmin();
        model.addAttribute("SysAdminList", SysAdminList);
        return "contest/user";
    }
}

打开application.yml,添加数据库配置:

    datasource:
        name: mydb
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://127.0.0.1:3306/springboot
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        minIdle: 1
        maxActive: 2
        initialSize: 1
        timeBetweenEvictionRunsMillis: 3000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 'ZTM' FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false   
mybatis:
    typeAliasesPackage: com.houpu.zy.module.contest.entity
    mapperLocations: classpath:mappers/**/*.xml           

完整的application.yml如下

server: 
    servlet: 
        context-path: /springboot

spring:
    devtools: 
        restart: 
            enabled: true
            exclude: /views/**
    mvc: 
        view: 
            prefix: /views/module/
            suffix: .jsp
    datasource:
        name: mydb
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://127.0.0.1:3306/springboot
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        minIdle: 1
        maxActive: 2
        initialSize: 1
        timeBetweenEvictionRunsMillis: 3000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 'ZTM' FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false   

mybatis:
    typeAliasesPackage: com.houpu.zy.module.contest.entity
    mapperLocations: classpath:mappers/**/*.xml  

user.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>testtitle>
head>
<body>
    <table>
       <c:forEach items="${SysAdminList}" var="user">
           <tr>
               <td>${user.username }td>
               <td>${user.status }td>
               <td>${user.password }td>
               <td>${user.salt }td>
               <td>${user.headImg }td>
           tr>
       c:forEach>
    table>
body>
html>

至此已经集成mybatis,并编写了一个例子。打开浏览器访问:http://localhost:8080/springboot/user
结果如下:
springboot整合mybatis-plus3.0-beta_第16张图片
以上项目代码可从这里下载:
链接: https://pan.baidu.com/s/10UBxUM-bufTUDwnhvApOmw 密码: eg5d

使用mybatis-plus重构项目

  1. 删除文件service、serviceImpl、mapper.java、mapper.xml、entity。
  2. 将pom中的mybatis包改成mybatis-plus的包
  3. 去掉application.yml文件中mybatis的配置(不去也不影响),加入mybatis-plus配置。
  4. 新增CodeGeneration.java(从mybatis-plus官网有这个类)
  5. 运行CodeGeneration.java并将生成的文件放入项目中
  6. 默认的dao层接口文件中并没有@mapper注解,这里有2种方式,第一种是在每个*mapper.java中加入@mapper注解,第二种是写个config类来扫描mapper.java,上面集成mybatis时你们看到我使用的是第一种,这里我推荐使用第二种,这里生成的代码不需要改动就能用了。
  7. 新增步骤6说的第二种配置类:MybatisPlusConfig.java
  8. 编写controller代码,测试通过。

step1、删除文件service、serviceImpl、mapper.java、mapper.xml、entity等文件

这个没啥好说的,跳过了。

step2、将pom中的mybatis包改成mybatis-plus的包

将原来的mybatis依赖的jar包删除掉,即在pom.xml中删掉下面内容


        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>1.1.1version>
        dependency>

在末尾加上


        <dependency>
             <groupId>com.baomidougroupId>
             <artifactId>mybatis-plus-boot-starterartifactId>
             <version>3.0-betaversion>
         dependency>

step3、去掉application.yml文件中mybatis的配置(不去也不影响),加入mybatis-plus配置

在application.yml文件末尾加上以下内容:

#mybatis-plus
mybatis-plus:
    mapper-locations: classpath:mappers/**/*.xml
    #实体扫描,多个package用逗号或者分号分隔
    typeAliasesPackage: com.houpu.zy.module.contest.entity
    global-config: 
      db-config: 
        #刷新mapper 调试神器
        #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
        id-type: 3
        #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
        field-strategy: not_empty
        #驼峰下划线转换
        column-underline: true
        #数据库大写下划线转换
        #capital-mode: true
        #逻辑删除配置
        logic-delete-value: 0
        logic-not-delete-value: 1
        db-type: mysql
        #自定义填充策略接口实现
        #meta-object-handler: com.baomidou.springboot.xxx
        #自定义SQL注入器
        #sql-injector: com.baomidou.springboot.xxx
    configuration: 
        map-underscore-to-camel-case: true
        cache-enabled: false
    ##logging
    logging:
      level: debug 

step4、新增CodeGeneration.java(从mybatis-plus官网有这个类)

下面生成的文件路径请自行修改

package com.houpu.zy;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGeneration {

    /**
     * 
     * @Title: main
     * @Description: 生成
     * @param args
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("C:\\Users\\huahao\\Desktop\\新建文件夹");
        gc.setFileOverride(true);
        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("huahao");// 作者

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/springboot");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { "" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(new String[] { "sys_admin" }); // 需要生成的表

        strategy.setSuperServiceClass(null);
        strategy.setSuperServiceImplClass(null);
        strategy.setSuperMapperClass(null);

        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.houpu.zy.module.contest");
        pc.setController("web");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setMapper("mapper");
        pc.setEntity("entity");
        pc.setXml("xml");
        mpg.setPackageInfo(pc);

        // 执行生成
        mpg.execute();

    }

}

step5、step6跳过不讲,直接看step7生成的类

在com.houpu.zy.module.contest目录下新建config目录。
然后在config目录下新建如下类:

package com.houpu.zy.module.contest.config;

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

@Configuration
//@MapperScan("com.houpu.zy.module.*.mapper*")//这个注解,作用相当于下面的@Bean MapperScannerConfigurer,2者配置1份即可
public class MybatisPlusConfig {

    /**
     * mybatis-plus分页插件
* 文档:http://mp.baomidou.com
*/
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } /** * 相当于顶部的: * {@code @MapperScan("com.houpu.springboot.module.*.mapper*")} * 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径 */ @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer(); scannerConfigurer.setBasePackage("com.houpu.zy.module.*.mapper*"); return scannerConfigurer; } }

step8、编写controller代码,测试通过。

修改SysAdminController.java内容如下:

package com.houpu.zy.module.contest.web;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.houpu.zy.module.contest.entity.SysAdmin;
import com.houpu.zy.module.contest.service.SysAdminService;

/**
 * 

* 前端控制器 *

* * @author huahao * @since 2018-07-18 */
@Controller @RequestMapping("/sysAdmin") public class SysAdminController { @Autowired private SysAdminService sysAdminService; @RequestMapping("user") public String user(Model model) { Wrapper wrapper = new QueryWrapper(); List SysAdminList = sysAdminService.selectList(wrapper); model.addAttribute("SysAdminList", SysAdminList); return "contest/user"; } }

启动项目,浏览器访问:http://localhost:8080/springboot/sysAdmin/user,成功显示。
至此,springboot集成mybatis-plus完成。

基于mybatis-plus的项目代码在下方网盘
链接: https://pan.baidu.com/s/1MTrqZm-H30f1S6H5K9gdsg 密码: ttw5

总结

全文共讲述了3个阶段的变化

  1. springboot
  2. springboot+mybatis
  3. springboot+mybatis-plus

其中,到第二阶段已经是ssm框架都集成了.
第三阶段中mybatis-plus已经包含mybatis的包,并扩展了通用dao、通用service、分页、代码生成器。
全文较长,但是是从第一步一点点增加上来的,大家可以看到每次新增的配置或代码是做什么用的,网上大多数教程都是贴代码或者贴部分代码,导致绕每多弯路,相信我这个教程还算是不错的。

最后,我本人也是在学习springboot、springcloud中,毕竟早就已经到了分布式时代了。
作者:默非默,QQ:3094759846

你可能感兴趣的:(JAVA,springboot)