美文网首页Spring Bootspringboot
第六篇 : SpringBoot 整合 mybatis-plus

第六篇 : SpringBoot 整合 mybatis-plus

作者: 程序员果果 | 来源:发表于2018-12-03 23:34 被阅读80次

    这一篇我们讲解如何在springboot下整合mybatis-plus,并访问数据库。
    MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。


    对于 mybatis-plus 的使用,可以参照官网http://mp.baomidou.com/,这里我就不讲解了。

    一、创建数据库表

    DROP TABLE IF EXISTS `tb_employee`;
    CREATE TABLE `tb_employee` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `lastName` varchar(255) DEFAULT NULL,
      `email` varchar(255) DEFAULT NULL,
      `gender` int(2) DEFAULT NULL,
      `d_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    二、创建项目

    创建一个项目springboot-mybatis

    1、pom.xml

    <?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.gf</groupId>
        <artifactId>springboot-mybatis</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot-mybatis</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.0.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity</artifactId>
                <version>1.7</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    
    

    2. 代码生成器

    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

    1. mapper.xml.vm

    在resources/templates 下创建 Mapper 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="${package.Mapper}.${table.mapperName}">
    
    #if(${enableCache})
        <!-- 开启二级缓存 -->
        <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
    
    #end
    #if(${baseResultMap})
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
    #foreach($field in ${table.fields})
    #if(${field.keyFlag})##生成主键排在第一位
            <id column="${field.name}" property="${field.propertyName}" />
    #end
    #end
    #foreach($field in ${table.commonFields})##生成公共字段
        <result column="${field.name}" property="${field.propertyName}" />
    #end
    #foreach($field in ${table.fields})
    #if(!${field.keyFlag})##生成普通字段
            <result column="${field.name}" property="${field.propertyName}" />
    #end
    #end
        </resultMap>
    
    #end
    #if(${baseColumnList})
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
    #foreach($field in ${table.commonFields})
            ${field.name},
    #end
            ${table.fieldNames}
        </sql>
    
    #end
    </mapper>
    
    

    2. CodeGenerator

    package com.gf.config;
    
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.core.toolkit.StringPool;
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.InjectionConfig;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    import com.baomidou.mybatisplus.generator.config.FileOutConfig;
    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.TemplateConfig;
    import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class CodeGenerator {
    
        public static void main(String[] args) throws InterruptedException {
            AutoGenerator mpg = new AutoGenerator();
    
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            gc.setOutputDir(projectPath + "/src/main/java");
            gc.setFileOverride(true);
            gc.setActiveRecord(true);
            gc.setEnableCache(false);// XML 二级缓存
            gc.setBaseResultMap(true);// XML ResultMap
            gc.setBaseColumnList(true);// XML columList
            gc.setOpen(false);
            gc.setAuthor("gf");
    
    
            // 自定义文件命名,注意 %s 会自动填充表实体属性!
            gc.setMapperName("%sMapper");
            gc.setXmlName("%sMapper");
            gc.setServiceName("%sService");
            gc.setServiceImplName("%sServiceImpl");
            gc.setControllerName("%sController");
    
            mpg.setGlobalConfig(gc);
    
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setDbType( DbType.MYSQL);
            dsc.setDriverName("com.mysql.jdbc.Driver");
            dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?useSSL=false");
            dsc.setUsername("xxxxxx");
            dsc.setPassword("xxxxxx");
            mpg.setDataSource(dsc);
    
            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setParent("com.gf");
            pc.setController( "controller");
            pc.setEntity( "entity" );
            //pc.setModuleName("test");
            mpg.setPackageInfo(pc);
    
            // 自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
            List<FileOutConfig> focList = new ArrayList<>();
            focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定义输入文件名称
                    return projectPath + "/src/main/resources/mapper/"
                            + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                }
            });
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
            mpg.setTemplate(new TemplateConfig().setXml(null));
    
            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            //此处可以修改为您的表前缀
            strategy.setTablePrefix(new String[] { "tb_"});
            // 表名生成策略
            strategy.setNaming(NamingStrategy.underline_to_camel);
            // 需要生成的表
            strategy.setInclude(new String[] { "tb_employee" });
            // 排除生成的表
            //strategy.setExclude(new String[]{"test"});
            strategy.setEntityLombokModel( true );
    
            mpg.setStrategy(strategy);
    
            // 执行生成
            mpg.execute();
        }
    
    }
    
    

    我运行 CodeGenerator 会发现,我么需要的 entity、mapper、service、controller 都有了,而且mybatis-plus 为我们封装了很对常用的方法 ,大大的提到了我们的开发效率

    3. application.properties

    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=xxxxxx
    spring.datasource.password=xxxxxx
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    4. EmployeeController

    @RestController
    @RequestMapping("/employee")
    public class EmployeeController {
    
    
        @Autowired
        EmployeeService employeeService;
    
        @RequestMapping(value = "/list", method = RequestMethod.GET)
        public List<Employee> getEmployees() {
            return employeeService.list( null );
        }
    
        @RequestMapping(value = "/{id}", method = RequestMethod.GET)
        public Employee getEmployeeById(@PathVariable("id") int id) {
            return employeeService.getById( id );
        }
    
        @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
        public String updateEmployee(@PathVariable("id") int id, @RequestParam(value = "lastName", required = true) String lastName,
                                    @RequestParam(value = "email", required = true) String email , @RequestParam(value = "gender", required = true) int gender , @RequestParam(value = "dId", required = true) int dId) {
            Employee employee = new Employee();
            employee.setId( id );
            employee.setLastName( "张" );
            employee.setEmail( "zhang@163.com" );
            employee.setGender( 1 );
            employee.setDId( 1 );
    
            boolean b = employeeService.updateById( employee );
    
            if (b) {
                return "update success";
            } else {
                return "update fail";
            }
    
        }
    
        @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
        public String delete(@PathVariable(value = "id")int id) {
            boolean b = employeeService.removeById( id );
    
            if(b) {
                return "delete success";
            }else {
                return "delete fail";
            }
    
        }
    
        @RequestMapping(value = "", method = RequestMethod.POST)
        public String postEmployee(@RequestParam(value = "lastName", required = true) String lastName,
                                   @RequestParam(value = "email", required = true) String email , @RequestParam(value = "gender", required = true) int gender , @RequestParam(value = "dId", required = true) int dId) {
    
            Employee employee = new Employee();
            employee.setLastName( "王" );
            employee.setEmail( "wang@163.com" );
            employee.setGender( 2 );
            employee.setDId( 2 );
            boolean b = employeeService.save( employee );
    
            if(b) {
                return "sava success";
            }else {
                return "sava fail";
            }
    
        }
    
    
    }
    

    源码下载:https://github.com/gf-huanchupk/SpringBootLearning

    相关文章

      网友评论

        本文标题:第六篇 : SpringBoot 整合 mybatis-plus

        本文链接:https://www.haomeiwen.com/subject/krrpcqtx.html