idea mybatisplus 插件_10分钟学习mybatisplus

mybatis plus 是一款mybatis增强插件,可以在mybatis基础上来进行灵活的单表操作,不用再写SQL语句(仅限于单表),是一款简单易用的工具,本文结合SpringBoot来对Mybatis plus进行一个详细的讲解。

1、初始化

1.1 选择一个数据库,然后创建表

 CREATE TABLE `student`  (  `id` bigint(20) NOT NULL,  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,  `age` int(11) NULL DEFAULT NULL,  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,  `create_time` datetime(0) NULL DEFAULT NULL,  `update_time` datetime(0) NULL DEFAULT NULL,  `status` int(1) NULL DEFAULT NULL,  `version` int(255) NULL DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

1.2 使用IDEA来创建SpringBoot项目

6b28d8b41dfaad038a41c2414e1a238d.png

1.3 引入POM依赖

          <dependency>            <groupId>mysqlgroupId>            <artifactId>mysql-connector-javaartifactId>            <scope>runtimescope>        dependency>                <dependency>            <groupId>com.alibabagroupId>            <artifactId>druid-spring-boot-starterartifactId>            <version>1.1.14version>        dependency>                <dependency>            <groupId>com.baomidougroupId>            <artifactId>mybatis-plus-boot-starterartifactId>            <version>3.1.1version>        dependency>        <dependency>            <groupId>com.baomidougroupId>            <artifactId>mybatis-plus-generatorartifactId>            <version>3.1.1version>        dependency>                <dependency>            <groupId>org.projectlombokgroupId>            <artifactId>lombokartifactId>            <version>1.18.6version>            <scope>providedscope>        dependency>                <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-freemarkerartifactId>            <version>2.1.3.RELEASEversion>        dependency>

1.4 修改配置文件application.yml

 spring:  application:    name: mybatis-plus-practise  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai    username: root    password: 123456  jackson:    time-zone: GMT+8    date-format: yyyy-MM-dd HH:mm:ssserver:  port: 8080logging:  level:    cn.amoqi.mybatis.plus : debug    org.springframework: warnmybatis-plus:  # mybatis的xml文件位置  mapper-locations: classpath:/mapper/**/*Mapper.xml  # entity实体类包位置  typeAliasesPackage: cn.amoqi.mybatis.plus.api.entity  global-config:    db-config:      # 数据库主键生成方式:AUTO:数据库自增,ID_WORKER:雪花算法生成(框架默认),      #可在字段上加@TableId(type = IdType.ID_WORKER) 覆盖      id-type: AUTO      # 影响添加、更新、Wapper生成条件,not_empty字段为空的不进行操作,IGNORED忽略判断      #可在字段上加@TableField(strategy = FieldStrategy.IGNORED)覆盖默认      field-strategy: not_empty      # 数据库字段强行按照java实体的骆驼式命名法大写字母前转化为下划线加小写      column-underline: true      # 逻辑删除有效为1 删除为0      logic-not-delete-value: 1      logic-delete-value: 0    # 是否自动刷新 Mapper 对应的 XML 文件,    # Mapper 对应的 XML 文件会自动刷新,更改 XML 文件后,无需再次重启工程,由此节省大量时间。    refresh: true  configuration:    # 开启驼峰,数据库字段转换为驼峰命名    map-underscore-to-camel-case: true    cache-enabled: false

使用CodeGenerator类来生成controller、service、entity、mapper等,因为篇幅原因暂时就不列出代码生成器了,代码会传到gitee上,地址放到底部,需要的可以自取。

1.5 为启动类添加注解@MapperScan注解,指向mapper接口路径

 @SpringBootApplication@MapperScan("cn.amoqi.mybatis.plus.api.mapper")public class MybatisPlusPractiseApplication {    public static void main(String[] args) {        SpringApplication.run(MybatisPlusPractiseApplication.class, args);    }}

1.6 目录如下

32aa5ad91131a41a7a2df72bc012bf05.png

2、基本功能

2.1 添加

 @Testpublic void add(){    Student student = new Student();    student.setName("赵六");    student.setAge(23);    student.setAddress("广东");    studentService.save(student);}

2.2 修改

 @Testpublic void edit(){    Student student = new Student();    student.setName("赵六111");    student.setId(1288121141721862146L);    studentService.updateById(student);}

2.3 删除

 @Testpublic void del(){    studentService.removeById("1288121141721862146");}

2.4 列表

 @Testpublic void list(){    List<Student> list = studentService.list(Wrappers.<Student>lambdaQuery()    .ge(Student::getAge, 5));    System.out.println(list);    //复杂的    /*SELECT id,name,age,address FROM student WHERE name = ? AND ( age = ? OR address = ? ) */    List<Student> list1 = studentService.list(Wrappers.<Student>lambdaQuery().eq(Student::getName, "张三")    .and(wrapper -> wrapper.eq(Student::getAge, 3).or().eq(Student::getAddress, "山东")));    System.out.println(list1);}

2.5 分页

引入Mybatis plus分页插件

@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {
/**
* mybatis-plus配置
*/
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
}

分页测试1

    @Test
public void pageList(){
IPage page = studentService.page(new Page(1, 10),
Wrappers.lambdaQuery().ge(Student::getAge, 3));
System.out.println(page.getRecords());
}

复杂分页查询,使用xml关联别的表,查询列表分页的情况

创建一个school

CREATE TABLE `school`  (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of school
-- ----------------------------
INSERT INTO `school` VALUES (1, '明天中学');

为Student实体类中添加

private Integer schoolId;
@TableField(exist = false)
private String schoolName;

mapper

public interface StudentMapper extends BaseMapper {
@Select("select st.*,sc.name school_name from student st left join school sc on st.school_id = sc.id")
IPage selectListWithSchool(Page page);
}

service

@Override
public IPage selectListWithSchool(Integer page){
Page studentPage = new Page(page, 10);
IPage studentIPage = this.baseMapper.selectListWithSchool(studentPage);
return studentIPage;
}

分页测试2

@Test
public void pageList2(){
IPage studentIPage = studentService.selectListWithSchool(1);
System.out.println(studentIPage.getRecords());
}

3、其他

3.1 逻辑删除

配置mybatis-plus

mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

在实体类字段上加上

@TableLogic
private Integer deleted;

3.2 生成主键

mybatis-plus:
global-config:
db-config:
# 数据库主键生成方式:AUTO:数据库自增,ID_WORKER:雪花算法生成(框架默认),
#可在字段上加@TableId(type = IdType.ID_WORKER) 覆盖
id-type: AUTO

3.3 自动填充功能

实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ...."); //日志
this.setFieldValByName("create_time",new Date(),metaObject);
this.setFieldValByName("update_time",new Date(),metaObject);
this.setFieldValByName("status",1,metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.setFieldValByName("update_time", new Date(), metaObject);
}
}

字段上加入

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

75652c8182452b4ac88c176f33e935ec.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值