前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot-mybatisPlus整合

springboot-mybatisPlus整合

作者头像
sucl
发布2019-08-07 14:27:09
3.4K0
发布2019-08-07 14:27:09
举报

很久没有写博客,最近项目中用到了springboot、mybatis,看到现在网上也有开源的mybatis-plus,干脆整合过来,该项目最终作为实现后台的模块的基础CRUD功能,在项目中可以不用修改任何地方就可以直接使用。下面从开始来看如何搭建与使用。

参考文档:spring-boot mybatis-plus

准备工作:

springboot版本1.5.10.RELEASE

mybatisPlus版本3.0.1

1、由于是通过idea构建项目,像平时一样,先构建一个空的maven项目,其中包括一些idea的配置,然后就是一个pom.xml文件和src源码文件夹,如下图:

2、打开pom.xml引入我们依赖的各种jar,此项目中需要的依赖库如下:

   <properties>
        <mybatisplus.version>3.0.1</mybatisplus.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 子引入mybatis相关的包 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- springboot开发工具 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 处理实体getter setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- springboot胚子文件自动提示 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 测试相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <!-- 不用spring-boot-starter-parent -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.10.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

jar包相关说明已经注明,现在开始正式的代码编辑。

3、由于代码是通过数据库反向生成,数据库我们使用mysql,先在间几张表,USER、DEPT

CREATE TABLE `USER` (
`USER_ID`  varchar(36) NOT NULL ,
`USER_NAME`  varchar(56) NULL ,
`USER_CAPTION`  varchar(56) NULL ,
`PASSWORD`  varchar(56) NULL ,
`AGE`  int NULL ,
`ADDRESS`  varchar(128) NULL ,
`TELEPHONE`  varchar(20) NULL ,
`EMAIL`  varchar(56) NULL ,
`STATUS`  char(2) NULL ,
`MEMO`  varchar(255) NULL ,
PRIMARY KEY (`USER_ID`)
);

CREATE TABLE `DEPT` (
`ID`  varchar(36) NOT NULL ,
`DEPT_NO`  varchar(24) NULL ,
`DEPT_NAME`  varchar(56) NULL ,
`DEPT_PARENT_NO`  varchar(24) NULL ,
`DUTY`  varchar(56) NULL ,
`CONTACT`  varchar(24) NULL ,
PRIMARY KEY (`ID`)
);

4、通过mybatis-plus代码生成器生成代码,可以参考官方文档,生成的代码主要包括entity、mapper、service、comtroller,这样我们基本的代码就有了,当然,如果有对生成代码的地方有需要修改的,一方面通过配置处理,如果对代码定制化的地方,就需要我们更改模板了,模板具体位置在mybatis-plus-generator/templates中,我们将该文件夹整个拷贝到java/main/resources中,里面有.vm,.ftl后缀的文件,这个分别对应模板引擎Volecity,Freemaker使用不同的模板文件,我们可以直接在上面做一些修改。

根据需要我已经将模板做了一些更改,主要是根据需要会添加一些东西。

5、生成代码后,根据需修改真假一些扩展功能,以后只用维护一下,后台代码就可以得到复用了。

6、配置项目基础模块

  • 添加springboot配置文件 application.yml

目前只是用到基本的一些功能,所以配置的比较少,如果有新的需要,可以根据官方文档进行扩展,引入需要的功能模块。

server:
  port: 8081
  context-path: /mp

spring:
  messages:
    encoding: utf-8
    basename: i18n.messages

mybatis-plus:
  mapper-locations: classpath*:com/sucl/sbmp/*/mapper/**Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.sucl.sbmp.*.entity
  global-config:
    refresh: true
    db-config:
      db-type: mysql
#      id-type: uuid
    configuration:
      map-underscore-to-camel-case: true
      cache-enabled: false
#  config-location: classpath:mybatis-config.xml

mp:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/sbmp?useUnicode=true&useSSL=false&characterEncoding=utf8
    username: sbmp
    password: 123456
  • 添加启动类,数据库配置等

这些都是一些基础的配置

@SpringBootApplication
@MapperScan("com.sucl.sbmp.*.mapper")
@EnableTransactionManagement
public class MpStartApplication {

    public static void main(String[] args) {
        SpringApplication.run(MpStartApplication.class,args);
    }

}
springboot启动类配置,加上mybatis mapper接口扫描


    @Bean("dataSource")
    @ConfigurationProperties(prefix = "mp.datasource")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }
添加安装标准在配置文件中引入数据库,只用标记对应的前缀即可

    /***
     * plus 的性能优化,开发模式使用
     * @return
     */
    @Bean
    @ConditionalOnProperty(name = "spring.profiles.active",havingValue = "dev")
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(1000);//sql 最大执行时长
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }

    /**
     * 分页插件
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//        paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }
两个插件,一个是复杂打印sql的,一个是分页插件
  • 添加公共模块的

在生成代码的时候,我们用到了BaseEntity、BaseController,其中BaseEntity我们可以定义一些公共字段,同时通过实现MetaObjectHandler接口来完成公共字段的填充;而baseController我们可以定义一些基础的增删改查接口

public class BaseEntity implements Domain {

//    @TableField(value = "CREATOR",fill = FieldFill.INSERT)
//    private String creator;
//
//    @TableField(value = "CREATE_DATE",fill = FieldFill.INSERT)
//    private Date createDate;
}

@Service
public class DefaultMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        if(metaObject.hasSetter("creator") && StringUtils.isEmpty(metaObject.getValue("creator")))
            setFieldValByName("creator","admin",metaObject);
        if(metaObject.hasSetter("createDate") && StringUtils.isEmpty(metaObject.getValue("createDate")))
            metaObject.setValue("createDate",new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {

    }
}

这样就不用在在接口中处理公共字段了

public class BaseController<S extends IService<M>,M extends Domain> {

    /**
     * 业务服务
     */
    @Autowired
    protected S service;

    /**
     * 根据主键查询
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    protected M get(@PathVariable("id") String id){
        return service.getById(id);
    }
}
这里可以定义我们常用的接口服务,如果有特殊的服务,可以在生产的代码对应的controller去进行添加

7、直接通过postman可以进行测试了

到这里,一个基本的后台服务架构就已经搭建完成了。

代码源码可以参考:sbmp

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档