IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot 中 Mybatis-plus使用及注意事项 -> 正文阅读

[Java知识库]springboot 中 Mybatis-plus使用及注意事项

Mybatis-plus 使用及注意事项

Mybatis-plus官网(不定时无无)

1. pml依赖

        <!--		mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <!--		mybatis plus自动代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--模板引擎freemarker或默认的Velocity引擎模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        <!--		mybatis-plus-join联表查询-->
        <dependency>
            <groupId>com.github.yulichang</groupId>
            <artifactId>mybatis-plus-join</artifactId>
            <version>1.2.4</version>
        </dependency>

模板引擎freemarker可更换为默认的Velocity引擎模板

  <dependency>
          <groupId>org.apache.velocity</groupId>
           <artifactId>velocity-engine-core</artifactId>
           <version>2.3</version>
       </dependency>

2.配置文件(yaml为例)

#数据库配置等
#...
#关闭thymeleaf模板引擎
spring:
	thymeleaf:
    	cache: false
#mybatis-plus配置
mybatis-plus:
	type-aliases-package: com/euphoria/shop/entity
	mapper-locations: classpath:com/euphoria/shop/mapper/xml/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
     #逻辑删除配置
      logic-delete-value: 1      
      logic-not-delete-value: 0
  • 若mapper位置位于resource下,mapper-locations可使用默认值
    mapper-locations: classpath*:/mapper/**/*.xml

3.MybatisPlusConfig 配置类

@MapperScan("com.euphoria.mapper")
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
    //分页
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

    //乐观锁
    @Bean
    public MybatisPlusInterceptor OptimisticLockerInnerInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

4.实体类中注解开发

 @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
 @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
  @TableLogic
    private Integer deleted;

5.使用mybatis-plus-join联表查询

依赖

    <dependency>
        <groupId>com.github.yulichang</groupId>
        <artifactId>mybatis-plus-join</artifactId>
        <version>1.2.4</version>
    </dependency>

使用前需将mapper接口继承的baseMapper改为MPJBaseMapper

public interface UserCartMapper extends MPJBaseMapper<UserCart>。。。

使用案例

    IPage<UserCartVo> goodsPage = baseMapper.selectJoinPage(new Page<>(currentPage, pageSize), UserCartVo.class,
                new MPJLambdaWrapper<UserCartVo>().selectAll(UserCart.class)
                        .select(Goods::getName, Goods::getPicture, Goods::getPriceNew, Goods::getPriceOld, Goods::getStore)
                        .leftJoin(Goods.class, Goods::getGoodsId, UserCart::getGoodsId)
                        .eq(UserCart::getUserId, userCart)
                        .orderByDesc(UserCart::getUserCartId)
        );

复杂联表建议还是自写xml⑧hhhhhh.

6. mybatis plus自动代码生成器(数据自改)

   <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.5.2</version>
    </dependency>

在测试类中运行:

 public static void main(String[] args) {
        String propath = System.getProperty("user.dir");
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8&serverTimezone=Asia/Shanghai",
                        "root", "123456")//数据库配置
                .globalConfig(builder -> {
                    builder.disableOpenDir()//不自动打开文件位置
                            .author("euphoria")
                            .enableSwagger()               // 开启 swagger 模式
                            .outputDir(propath + "/src/main/java");// 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.euphoria") // 设置父包名
                            .moduleName("shop") // 设置父包模块名  组合即com.euphoria.shop...
                            .entity("entity")
                            .service("Service")
                            .serviceImpl("Service.impl")
                            .mapper("mapper")
                            .controller("controller");
                })
                .strategyConfig(builder -> {
                    builder.addInclude("user")// 设置需要生成的表名,对应数据库表名
                            //entity配置
                            .entityBuilder()
                            .enableLombok()
                            //以下视情况而定
                            //版本
                            .versionColumnName("version")
                            .versionPropertyName("version")
                            //逻辑删除
                            .logicDeleteColumnName("deleted")
                            .logicDeletePropertyName("deleted")
                            //创建更新时间
                            .addTableFills(new Column("create_time", FieldFill.INSERT))
                            .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                            //ID类型
                            .idType(IdType.ASSIGN_UUID)

                            //controller
                            .controllerBuilder()
                            .enableRestStyle()
                            //service
                            .serviceBuilder()
                            .formatServiceFileName("%sService")  //去掉开头I
                            .formatServiceImplFileName("%sServiceImp")               
                    ;
                })
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

7.注意事项(BUG日记)

  • 启动类上mapperscan 扫描需写对,即@MapperScan("com.euphoria.shop.mapper")

否则报错UnsatisfiedDependencyException: Error creating bean with name ‘userServiceImp’

Caused by: org.springframework.beans.factory.BeanCreationException:
      Error creating bean with name 'sqlSessionFactory' defined in class path resource
[com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]
      Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: 
Failed to instantiate[org.apache.ibatis.session.SqlSessionFactory]: Factory method'sqlSessionFactory' threw
exception; nested exception is org.apache.ibatis.type.TypeException: The alias
'Collection' is already mapped to the value 'java.util.Collection'.

解决:修改类名,避免重复

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:56:31  更:2022-09-04 01:00:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:55:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码