mybatis plus 配置

创建数据库

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

创建表

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

导入相关依赖

<!-- 数据库驱动 --> 
<dependency> 
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> 
</dependency> 
 <dependency>
  <groupId>com.baomidou</groupId> 
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.0.5</version>
</dependency>

数据库相关连接配置


#数据库连接配置
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

创建相应的pojo类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

编写mapper接口 并继承BaseMapper

@Repository//代表是持久层
public interface UserMapper extends BaseMapper<User> {
    void selectList();
    //所有的crud已经编写完成
}

编写一个mybatisplus 配置类

@EnableTransactionManagement
//扫描mapper
@MapperScan("com.zhou.mapper")
@Configuration//代表这是一个配置类
public class MYbatisPlusConfig {
    //注册乐观锁插件

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
    //分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    //逻辑删除组件
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }
    //配置性能配置
    @Bean
    @Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        //设置sql的最大时间 如果超过了 不执行 毫秒
        performanceInterceptor.setMaxTime(100);
        //是否开启格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }

}
配个日志 查看sql语句等信息

```xml
#配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
直接用测试类测试

```java
 @Autowired
    private UserMapper userMapper;
    @Test
    public void add(){
        User user = new User();
        user.setId(5l);
        user.setName("zhouwuyi");
        user.setAge(13);
        user.setEmail("111111");
        userMapper.insert(user);

    }

自动填充,比如创建时间与修改时间可以从数据库层面进行设置,也可以从代码层面实现
在实体类增加属性并配上注解

@TableField(fill = FieldFill.INSERT)
    private Date create_time;
    //插入更新填充
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date update_time;

编写处理器来处理这个注解

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Slf4j
@Component
//要注入
public class MyMetaObjectHander 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);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //更新时填充
         log.info("start update fill......");
        this.setFieldValByName("update_time",new Date(),metaObject);

    }
}

乐观锁配置
1.增加version字段 version属性并注解

 @Version
    private Integer version;

2,在配置类中注册乐观锁插件

//注册乐观锁插件

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }

分页查询
配置类注册分页插件

//分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

测试类

@Test
    public void test6(){
        //第一页 每页5个
        //参数1 当前页 参数2 页面大小
        Page<User> page = new Page<>(2,3);
        userMapper.selectPage(page, null);
        for (User record : page.getRecords()) {
            System.out.println(record);
        }
        System.out.println(page.getTotal());
    }

逻辑删除
相当于每个记录多了一个逻辑删除字段 当删除的时候我们只是把逻辑删除字段给变化了 而每次查询等操作都要带着逻辑查询字段
在这里插入图片描述
没删除就是0 删除了就是1

在实体类中增加属性

@TableLogic
    private Integer deleted;

配置删除组件

//逻辑删除组件
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }
#配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
#控制逻辑删除的字段
mybatis-plus.global-config.db-config.logic-delete-field=deleted;

性能分析插件

@Bean
    @Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        //设置sql的最大时间 如果超过了 不执行 毫秒
        performanceInterceptor.setMaxTime(100);
        //是否开启格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }

在这里插入图片描述
重点 条件构造器
顾名思义 里面放的就是你要查询的条件
直接给几个例子去熟悉

@SpringBootTest
public class WapperTest {
    @Autowired
    public UserMapper userMapper;
    @Test
    public void test1(){
        //查询name不为空且邮箱不为空的参数,年龄大于等于12
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper
                .isNotNull("name")
                .isNotNull("email")
                //大于等于
                .ge("age",12);
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }
    @Test
    public void test2(){
        //查询name不为空且邮箱不为空的参数,年龄大于等于12
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper
                .eq("name","Jack");
        //查询一个
        User user = userMapper.selectOne(wrapper);
        System.out.println(user);
    }
    @Test
    public void test3(){
        //between and
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper
               .between("age",20,30);
        //查询结果数
        Integer integer = userMapper.selectCount(wrapper);
        System.out.println(integer);
    }
    @Test
    public void test4(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //模糊查询
        //左和右就是百分号在哪儿 e%右查询
        wrapper.notLike("name","a")
                //邮箱号以t开头
                .likeRight("email","t");
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        for (Map<String, Object> map : maps) {
            System.out.println(map);
        }
    }
    @Test
    public void test5(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //内嵌查询
        //id在子查询中查出来
        wrapper.inSql("id","select id from user where id<4");
        List<Object> objects = userMapper.selectObjs(wrapper);
        for (Object object : objects) {
            System.out.println(object);
        }
    }
    @Test
    public void test6(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //通过id进行排序
        wrapper
                .orderByDesc("id");
        List<Object> objects = userMapper.selectObjs(wrapper);
        for (Object object : objects) {
            System.out.println(object);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值