Mybatis-plus常见用法

数据库表结构

CREATE TABLE `student` (
  `id` varchar(32) NOT NULL,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `age` datetime DEFAULT NULL COMMENT '生日',
  `CREATE_BY` varchar(64) NOT NULL,
  `CREATE_DATE` datetime DEFAULT NULL,
  `UPDATE_BY` varchar(64) DEFAULT NULL,
  `UPDATE_DATE` datetime DEFAULT NULL,
  `REMARKS` varchar(255) DEFAULT NULL,
  `DEL_FLAG` char(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述

枚举类型

实体类中声明枚举类型

springweb接受枚举类型配置

  1. 定义枚举类
    方法一:采用继承IEnum实现
    方法二:注解方式请看Mybatis-plus官方文档

以下以方法一为例

@AllArgsConstructor
public enum SexEnum implements IEnum<String> {
    BOY("1", "男"),
    GIRY("2", "女");

    private String value;
    private String desc;

    @Override
    public String getValue() {
        return this.value;
    }
}
  1. 全局配置枚举类型转换
server:
  port: 8081
spring:
  application:
    name: sky-user
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/shiro?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 5
      maximum-pool-size: 20
      connection-test-query: SELECT 1
mybatis-plus:
  type-enums-package: com.sky.sd.user.bean.enums
  1. 测试
@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class TestCase {

    @Autowired
    private UserDao userDao;

    @Test
    public void test() {
        User user = userDao.selectById(1);
        log.info("用户数据为:{}", user);
    }
}

查询结果
在这里插入图片描述

序列化枚举值为数据库存储值

  1. 增加如下配置
@Configuration
public class ConsumWebMvcConfig implements WebMvcConfigurer {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer(){
        return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
    }
}

在这里插入图片描述

SpringMVC接受枚举类型和返回枚举类型转换

具体请看Spring接收枚举类型

逻辑删除

逻辑删除

局部配置

在实体类删除字段上增加@TableLogic注解

   @TableLogic
   private Integer isDel;
全局配置

在配置文件中增加如下配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDel#全局逻辑删除字段值 3.3.0开始支持,详情看下面。
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

查询中排除删除字段

使用mp自带方法删除和查找都会附带逻辑删除功能
查询,会在where后边加上del_flag=0逻辑删除标识,如下图所示
在这里插入图片描述
删除的时候会自动更新,如下图所示
在这里插入图片描述
可以通过增加@TableField(select = false)使查询中不带delFlag字段

  @TableField(select = false)
    private String delFlag;

在这里插入图片描述

查询所有数据

由于使用mp自带方法删除和查找都会附带逻辑删除功能,有时候需要查询全部功能,这个时候需要自定义sql但是又想用mybatis-plus Wrapper,可以自定义,

    @Select("select * from user ${ew.customSqlSegment}")
    Student test(@Param(Constants.WRAPPER) Wrapper<Student> wrapper);

在这里插入图片描述

自动填充

控制台输出日志

增加如下配置

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

分页

mybatis-plus分页

  1. 增加如下配置
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }
}
  1. 测试
   @Test
    public void page() {
        IPage<User> userPage = new Page<>(2, 1);
        userPage = userMapper.selectPage(userPage,null);
        System.out.println(userPage/**/);
    }

自定义分页

  1. 在UserMapper.java中添加分页方法
public interface UserMapper extends BaseMapper<User> {

    //自定义分页查询,方式一
    IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER)Wrapper<User> wrapper);


    //自定义分页查询,方式二
    IPage<User> selectUserPage2(Page<User> page, @Param("age") Integer age);

}
  1. 在UserMapper.xml中添加SLQ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mp.dao.UserMapper">

    <select id="selectUserPage" resultType="com.mp.entity.User">
       select * from user ${ew.customSqlSegment}
    </select>

    <select id="selectUserPage2" resultType="map">
      select * from user where age &gt;=#{age}
    </select>

</mapper>
  1. 测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class PageTest {

    @Autowired
    private UserMapper userMapper;

    /**
     * 自定义分页查询,方式一
     */
    @Test
    public void selectMyPage(){
        QueryWrapper<User> query = Wrappers.query();
        query.ge("age", 30);
        Page<User> page = new Page<>(1, 2);
        IPage<User> userIPage = userMapper.selectUserPage(page, query);
        System.out.println("总记录数:"+userIPage.getTotal());
        System.out.println("总页数:"+userIPage.getPages());
        List<User> users = userIPage.getRecords();
        users.forEach(System.out::println);
    }

    /**
     * 自定义分页查询,方式二
     */
    @Test
    public void selectMyPage2(){
        Page<User> page = new Page<>(1, 2);
        IPage<User> userIPage = userMapper.selectUserPage2(page, 30);
        System.out.println("总记录数:"+userIPage.getTotal());
        System.out.println("总页数:"+userIPage.getPages());
        List<User> users = userIPage.getRecords();
        users.forEach(System.out::println);
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值