Spring Boot 集成Mybatis-Plus(一)

468 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情

前言

mybatis属于半自动的ORM框架,实现功能都需要编写大量的SQL语句,而JPA虽然是全自动的,但是如果对其原理掌握不够的话,用起来也会出现莫名的错误,基于这种大环境的由国人开发的mybatis-plus框架就应用而生了,Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Mybatis特性

图片.png

集成

引入jar包

<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.1</version>
		</dependency>
		
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
  

添加Mybatis-plus配置

mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.skywares.mybatisplus
  global-config:
    #数据库相关配置
    db-config:
      #主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: AUTO
      #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
      field-strategy: NOT_NULL
      #逻辑已删除
      logic-delete-value: 1
      #逻辑未删除
      logic-not-delete-value: 0
    banner: false
  #原生配置
  configuration:
    #驼峰命名
    map-underscore-to-camel-case: true
    //关闭缓存
    cache-enabled: false
    //如果查询结果中包含空值的列, 在映射的时候不会映射这个字段
    call-setters-on-nulls: true
    //
    jdbc-type-for-null: 'null'
    //开发测试,而生成用org.apache.ibatis.logging.slf4j.Slf4jImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

编写实现类

// dao 
public interface UserMapper extends BaseMapper<TUser>
{ 

}

// service

@Service
@Transactional(rollbackFor=Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper,TUser> implements UserService
{
}

//实体类
@TableName("t_user")
public class TUser implements Serializable
{
    private static final long serialVersionUID = -2981595606194707222L;

    //设置主键名称
    @TableId(value="oid",type=IdType.AUTO)
    private Long id;

    @TableField(value="name")
    private String name;

    @TableField(value="age")
    private int age;
    
    @TableField(value="address")
    private String address;
   
  }

说明:

  • @TableId :设置主键的名称主键策略类型

  • @TableField : 数据库字段名称,exist:默认为true,如果数据库不存在此字段,设置为false

  • @TableName : 数据库的表明

  • @Version:乐观锁标记注解

  • @TableLogic:逻辑软删除字段设置

测试

    
    @RequestMapping("/addUser")
    public String addUser()
    {
       TUser tUser =new TUser();
       tUser.setName("mybatis-plus");
       tUser.setAge(18);
       tUser.setAddress("SZ");
       userService.save(tUser);
       return "成功";
    }
 
   @RequestMapping("/queryUserPageList")
    public String queryUserPageList()
    {
       IPage<TUser> page = new Page<TUser>(1,10);
       IPage<TUser> userList= userService.page(page);
       String userStr=JSON.toJSONString(userList);
       return userStr;
    }
    
    
    @RequestMapping("/getUserById")
    public String getUserById(@RequestParam int id)
    {
       TUser tUser= userService.getById(id);
       return JSON.toJSONString(tUser);
    }

注意:

如果需要实现分页功能需要开启分页配置,否则分页不会生效.

@Configuration
public class MybatisPlusConfig
{
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 指定数据库方言为 MYSQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

逻辑删除

Yml配置

  #逻辑已删除
  logic-delete-value: 1
  #逻辑未删除
  logic-not-delete-value: 0

已删除为1,未删除字段值为0

实体配置

//软删除字段设置
    @TableLogic
    @TableField(value="deleteFlag")
    private boolean deleteFlag;
   
   //逻辑删除
    @RequestMapping("/deleteUser")
    public String deleteUser(@RequestParam Long id)
    {
       logger.info("deleteUser id:{}",id);
       userService.removeById(id);
       return "成功";
    }

测试

@RequestMapping("/deleteUser")
    public String deleteUser(@RequestParam Long id)
    {
       logger.info("deleteUser id:{}",id);
       userService.removeById(id);
       return "成功";
    }

测试结果:后端执行的是update更新语句,默认为0表示未删除,删除后更新为1。

总结

本文讲解了Spring Boot集成Mybatis-Plus入门实现了CRUD和分页功能,关于myabtis-plus的其他特性后续文章中会详细讲解。