策码奔腾

SpringBoot(一) ---- SpringBoot集成MybatisPlus

一、创建SpringBoot项目

  1.访问https://start.spring.io/创建SpringBoot项目

  2.创建时依赖SpringWeb

  3.resources目录下创建application.yml文件,配置基本参数

server:
  port: 8080
spring:
  profiles.include: dev

  4.创建application-dev.yml文件

 

二、集成Mybatis

  1.添加Mybatis的Starter依赖

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>        

  2.application-dev.yml文件下配置数据源等参数

spring:
  datasource:
    url: jdbc:postgresql://rds.amazonaws.com:5432/bank
    username: postgres
    password: password
mybatis:
  mapper-locations: classpath:com/bank/mapper/xml/*.xml
  configuration:
    map-underscore-to-camel-case: true
logging:
level:
root: info
com:
    bank:
mapper: DEBUG

  3.启动类加入Mapper类扫描注解

@MapperScan("com.bank.mapper")

 

三、集成MybatisPlus

  1.添加MybatisPlus依赖

     <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

四、使用MybatisPlus

  1.代码生成

    创建如下代码生成类,运行后生成代码

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.util.Scanner;

/**
 * @Author neikou
 * @Date 2021/04/27
 **/
public class CodeGenerator {


    public static void main(String[] args) {




        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor(scanner("author"));
        gc.setOpen(false); //生成后是否打开资源管理器
        gc.setFileOverride(true); //重新生成时文件是否覆盖
        gc.setServiceName("%sService");    //去掉Service接口的首字母I
        gc.setIdType(IdType.AUTO); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(false);//开启Swagger2模式
        mpg.setGlobalConfig(gc);

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:postgresql://rds.amazonaws.com:5432/bank");
        dsc.setDriverName("org.postgresql.Driver");
        dsc.setUsername("postgres");
        dsc.setPassword("password");
        dsc.setDbType(DbType.POSTGRE_SQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null); //模块名
        pc.setParent("com.toa.toabank");
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);


        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude(scanner("tableName"));//对一张表生成代码
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setTablePrefix("PTP_"); //生成实体时去掉表前缀
        strategy.setEntityTableFieldAnnotationEnable(true);//生成字段注解

        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(false); // lombok 模型 @Accessors(chain = true) setter链式操作
        strategy.setChainModel(true);

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
        strategy.setVersionFieldName("version");
mpg.setStrategy(strategy);
// mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } /** * <p> * 读取控制台内容 * </p> */ public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotBlank(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } }

 

  2.乐观锁

    2.1在实体中为版本锁字段加入@Version注解(代码生成时可以在Strategy配置中使用setVersionFieldName设置自动生成);

    2.2在配置类中托管拦截器

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author neikou
 * @Date 2021/04/28
 **/
@Configuration
public class MybatisPlusInterceptorConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

    注:

      支持的数据类型:int,Integer,long,Long,Date,Timestamp,LocalDateTime

      仅支持 updateById(id) 与 update(entity, wrapper) 方法

 

  3.分页

    3.1在配置类中托管拦截器

/**
 * @Author neikou
 * @Date 2021/04/28
 **/
@Configuration
public class MybatisPlusInterceptorConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));//分页
        return interceptor;
    }

}

   3.2在sqlSessionFactory中添加拦截器插件

final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
       ...
        sessionFactory.setPlugins(mybatisPlusInterceptor());

 

      3.3使用batisplus自带的page方法进行分页,或现在自定义的mapper方法中加入Page<?> page参数,batisplus将自动分页

public interface UserMapper {//可以继承或者不继承BaseMapper
    /**
     * 查询 : 根据state状态查询用户列表,分页显示
     *
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(可以继承Page实现自己的分页对象)
     * @param state 状态
     * @return 分页对象
     */
    IPage<User> selectPageVo(Page<?> page, Integer state);
}

 

 
posted @ 2021-04-28 12:48  策码奔腾  阅读(152)  评论(0编辑  收藏  举报
console.log('欢迎');