MyBatisPlus笔记

Mybatis-Plus

1.依赖

     <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

2.配置

spring.application.name = itcast-mp-springboot
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456
# 设置Mapper接口所对应的XML文件位置,如果你在Mapper接口中有自定义方法,需要进行该配置
mybatis-plus.mapper-locations = classpath*:mapper/*.xml
# 设置别名包扫描路径,通过该属性可以给包中的类注册别名
mybatis-plus.type-aliases-package =com.cyrus.mptest.pojo

3.条件查询

1.比较操作

  • eq=
  • ne!=
  • gt>
  • ge>=
  • lt: <
  • le: <=
  • between : BETWEEN 值1 AND 值2
  • notBetween : NOT BETWEEN 值1 AND 值2
  • in : 字段 IN (value.get(0), value.get(1), ...)
  • notIn : 字段 NOT IN (v0, v1, ...)

2.模糊查询

  • likelike("name", "王") ---> name like '%王%'
  • notlikenotLike("name", "王") ---> name not like '%王%'
  • likeLeft: likeLeft("name", "王") ---> name like '%王'
  • likeRightlikeRight("name", "王") ---> name like '王%'

3.排序

  • orderByorderBy(true, true, "id", "name") ---> order by id ASC,name ASC
  • orderByAscorderByAsc("id", "name") ---> order by id ASC,name ASC
  • orderByDescorderByDesc("id", "name") ---> order by id DESC,name DESC

4.逻辑查询

  • or
  • and

其他

  • last: 自行拼接语句

4.分页

1.配置

@Configuration
@MapperScan("com.cyrus.mptest.mapper") //设置mapper接口的扫描包
public class MybatisPlusConfig {
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2.例子

IPage<User> userPage = 		// count:当前页 size:每页多少数据
    userMapper.selectPage(new Page<User>(1, 4), new QueryWrapper<User>().like("name", ""));

5.实例

1.数据库映射

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("tb_user")
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    @TableField("user_name")
    private String userName;

    @TableField("password")
    private String passWord;

    @TableField("name")
    private String name;

    @TableField("age")
    private Integer age;

    @TableField("email")
    private String email;
}
1.关于主键
@TableId(type = IdType.AUTO)
private Long id;
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
   ...
}

2.service层

//继承IService<T>接口
public interface UserService extends IService<User> {
}
//继承ServiceImpl<M extends BaseMapper<T>, T>实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

3.mapper层

public interface UserMapper extends BaseMapper<User> {
}

4.启动

@SpringBootApplication
@MapperScan("com.cyrus.mptest.mapper")
public class MptestApplication {
    public static void main(String[] args) {
        SpringApplication.run(MptestApplication.class, args);
    }
}

5.测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusTest {
    @Autowired
    private UserService userService;
    @Test
    public void test1() {
        List<User> users = userService.list(new QueryWrapper<User>().like("name", "").eq("user_name", "zxc").gt("age", 18));
        for (User user : users) {
            System.out.println(user);
        }
    }
    @Test
    public void test2() {
        IPage<User> page = userService.page(new Page<User>(1, 2), new QueryWrapper<User>().eq("user_name", "zxc"));
        System.out.println("总页数:"+page.getPages());
        System.out.println("总记录数:" + page.getTotal());
        List<User> records = page.getRecords();
        for (User record : records) {
            System.out.println(record);
        }
    }
}

6.逻辑删除

@Configuration
public class EduConfig {
    /**
     * 逻辑删除插件
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
}
@TableLogic  //逻辑删除字段上添加该注解
private Boolean isDeleted;

自动填充

配置类

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("gmtCreate", new Date(), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}

在对应字段上添加注解

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

    @TableField(fill = FieldFill.INSERT_UPDATE)
    rivate Date gmtModified;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值