美文网首页
spring boot 整合mybatis plus

spring boot 整合mybatis plus

作者: 侧耳倾听y | 来源:发表于2021-07-05 10:30 被阅读0次

quick start

  • 依赖
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>
  • 配置文件
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mess?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
  • 包扫描
@SpringBootApplication
@MapperScan("org.example.mybatisplusdemo.mapper")
public class MybatisPlusDemoApplication {

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

}
  • mapper
public interface OrderMapper extends BaseMapper<Orders> {

}
  • 测试
@SpringBootTest
class MybatisPlusDemoApplicationTests {

    @Test
    void contextLoads() {
    }

    @Autowired
    private OrderMapper orderMapper;

    @Test
    public void testSelect() {
        List<Orders> ordersList = orderMapper.selectList(null);
        for (Orders orders : ordersList) {
            System.out.println(orders);
        }
    }
}

在idea里面,注入的变量orderMapper会冒红,但是并不影响。应该是底层会扫描mapper包自动实例化。
mybatis-plus也无需再设置驼峰命名规则映射。

其它常用功能

日志

配置文件,输出SQL语句

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

常用注解

  1. @TableName 用于定义表名
属性 用途
value 用于定义表名
  1. @TableId 用于定义表的主键
属性 用途 可选值
value 用于定义主键字段名
type 用于定义主键类型(主键策略 IdType) IdType.AUTO 主键自增,系统分配,不需要手动输入
IdType.NONE 未设置主键
IdType.INPUT 需要自己输入 主键值
IdType.ASSIGN_ID 系统分配 ID,用于数值型数据(Long,对应 mysql 中 BIGINT 类型)
IdType.ASSIGN_UUID 系统分配 UUID,用于字符串型数据(String,对应 mysql 中 varchar(32) 类型)。
  1. @TableField 用于定义表的非主键字段。
属性 用途 可选值
value 用于定义非主键字段名
exist 用于指明是否为数据表的字段, true 表示是,false 为不是
fill 用于指定字段填充策略(FieldFill) FieldFill.DEFAULT 默认不填充
FieldFill.INSERT 插入时填充
FieldFill.UPDATE 更新时填充
FieldFill.INSERT_UPDATE 插入、更新时填充
  1. @TableLogic 用于定义表的字段进行逻辑删除(非物理删除)
属性 用途
value 用于定义未删除时字段的值
delval 用于定义删除时字段的值
  1. @Version 用于字段实现乐观锁

代码生成器

  • 依赖
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>
  • 代码
        // Step1:代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // Step2:全局配置
        GlobalConfig gc = new GlobalConfig();
        // 填写代码生成的目录(需要修改)
        String projectPath = "/Users/xxx/gitee_projects/demo/mybatis-plus-demo";
        // 拼接出代码最终输出的目录
        gc.setOutputDir(projectPath + "/src/main/java");
        // 配置开发者信息(可选)(需要修改)
        gc.setAuthor("wxy");
        // 配置是否打开目录,false 为不打开(可选)
        gc.setOpen(false);
        // 实体属性 Swagger2 注解,添加 Swagger 依赖,开启 Swagger2 模式(可选)
        // gc.setSwagger2(true);
        // 重新生成文件时是否覆盖,false 表示不覆盖(可选)
        gc.setFileOverride(false);
        // 配置主键生成策略,此处为 ASSIGN_ID(可选)
        gc.setIdType(IdType.ASSIGN_ID);
        // 配置日期类型,此处为 ONLY_DATE(可选)
        gc.setDateType(DateType.ONLY_DATE);
        // 默认生成的 service 会有 I 前缀
        gc.setServiceName("%sService");
        mpg.setGlobalConfig(gc);

        // Step3:数据源配置(需要修改)
        DataSourceConfig dsc = new DataSourceConfig();
        // 配置数据库 url 地址
        dsc.setUrl("jdbc:mysql://localhost:3306/mess?useUnicode=true&characterEncoding=utf8");
        // dsc.setSchemaName("testMyBatisPlus"); // 可以直接在 url 中指定数据库名
        // 配置数据库驱动
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        // 配置数据库连接用户名
        dsc.setUsername("root");
        // 配置数据库连接密码
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);

        // Step:4:包配置
        PackageConfig pc = new PackageConfig();
        // 配置父包名(需要修改)
        pc.setParent("org.example.mybatisplusdemo");
        // 配置模块名(需要修改)
//        pc.setModuleName("mybatis-plus-demo");
        // 配置 entity 包名
        pc.setEntity("model");
        // 配置 mapper 包名
        pc.setMapper("mapper");
        // 配置 service 包名
        pc.setService("service");
        // 配置 controller 包名
        pc.setController("controller");
        mpg.setPackageInfo(pc);

        // Step5:策略配置(数据库表配置)
        StrategyConfig strategy = new StrategyConfig();
        // 指定表名(可以同时操作多个表,使用 , 隔开)(需要修改)
        strategy.setInclude("test_user");
        // 配置数据表与实体类名之间映射的策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 配置数据表的字段与实体类的属性名之间映射的策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 配置 lombok 模式
        strategy.setEntityLombokModel(true);
        // 配置 rest 风格的控制器(@RestController)
        strategy.setRestControllerStyle(true);
        // 配置驼峰转连字符
        strategy.setControllerMappingHyphenStyle(true);
        // 配置表前缀,生成实体时去除表前缀
        // 此处的表名为 test_user,去除前缀后剩下为 user。
        strategy.setTablePrefix("test_");
        mpg.setStrategy(strategy);
        // Step6:执行代码生成操作
        mpg.execute();

自动填充数据

  • 实现MetaObjectHandler接口
@Component
public class MetaHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }
}
  • 实体类字段加注解
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

逻辑删除

  • 实体类字段加注解
    @TableLogic(value = "0", delval = "1")
    @TableField(fill = FieldFill.INSERT)
    private Integer delFlag;
  • 最好在添加时默认填充
@Component
public class MetaHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "delFlag", Integer.class, 0);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    }
}

分页插件

  • 注入配置
@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
  • 使用
        // Step1:创建一个 Page 对象
        Page<User> page = new Page<>();
        // Page<User> page = new Page<>(2, 5);
        // Step2:调用 mybatis-plus 提供的分页查询方法
        userService.page(page, null);
        // Step3:获取分页数据
        System.out.println(page.getCurrent()); // 获取当前页
        System.out.println(page.getTotal()); // 获取总记录数
        System.out.println(page.getSize()); // 获取每页的条数
        System.out.println(page.getRecords()); // 获取每页数据的集合
        System.out.println(page.getPages()); // 获取总页数
        System.out.println(page.hasNext()); // 是否存在下一页
        System.out.println(page.hasPrevious()); // 是否存在上一页

乐观锁

  • 注入配置
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
  • 使用
        User user = new User();
        user.setGender(false).setPhoneNumber("999");
        userService.save(user);
        System.out.println(userService.list());
        user.setPhoneNumber("998");
        userService.update(user,null);
        System.out.println(userService.list());

插入时version是1,更新后version变成2

相关文章

网友评论

      本文标题:spring boot 整合mybatis plus

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