Mybatis-plus

添加依赖


    com.baomidou
    mybatis-plus-boot-starter
    3.4.2

另:全部依赖



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        
        2.1.3.RELEASE
         
    
    com.example
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.1
        
        
        
            mysql
            mysql-connector-java
            runtime
        

        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.3.0
        
        
        
            org.projectlombok
            lombok
            true
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.2
        
        
            org.junit.jupiter
            junit-jupiter
            RELEASE
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


调整配置

去掉mybatis配置

Mybatis-plus_第1张图片

添加mybatis plus配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  type-aliases-package: com.qcby.train.entity
  mapper-locations: classpath:mapper/*.xml

  # 全局配置id自增  =>
  global-config:
    db-config:
      id-type: auto

引入Lombok依赖,使代码更加简洁,刷新依赖

        
        
            org.projectlombok
            lombok
            1.16.14
        

 Mybatis-plus继承了分页 

创建config.MybatisPlusConfig类,添加@Configuration注解

@Configuration
public class MybatisPlusConfig {
    // 最新版
    @Bean  // 
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

实现分页

数据库

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

在entity包下创建User实体类

@Data 
//Lombok提供的注解,写上这个注解之后,不用写get,set,toString方法
@TableName("user")
//mybatis-plus提供的注解,写这个实体类对应的表名
public class User {
    private Long id;
    private String name;
}

mapper.xml文件




    

在mapper包下创建UserMapper接口,继承BaseMapper类,定义findAll方法

@Mapper
public interface UserMapper extends BaseMapper {
    public IPage findAll(Page page);
}

在service包下创建UserService接口,继承IService类,定义findAll方法

public interface UserService extends IService {
    public IPage findAll(Page page);
}

在service.impl包下创建UserServiceImpl类,继承ServiceImpl类,实现UserService 接口,加上@Service注解

@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;
 
    @Override
    public IPage findAll(Page page){
        return this.userMapper.findAll(page);
    }
}

在controller包下创建UserController类,加上@RestController注解

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserServiceImpl service;
 
    @RequestMapping("findAll")
    public IPage findAll(Integer pageNum, Integer pageSize){
        //分页实现
        Page page=new Page<>(pageNum,pageSize);
        return this.service.findAll(page);
    }
}

在SpringBootProjectApplication 类上,加上@MapperScan("com.qcby.mapper")注解

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

 http://localhost:8080/user/findAll?pageNum=1&pageSize=3

设置表名

默认表名就是实体类的类名

在实体类的类名上加上@TableName注解进行表示

Mybatis-plus_第2张图片

主键生成策略

默认MP插入数据时,在没有设置主键生成策略的情况下的策略是基于雪花算法的自增id

如果需要别的策略,在实体类中代表主键的字段上加上@TableId注解,使用其type属性指定主键生成策略

@TableId(type=IdType.AUTO) 自动增长

或在全局设置中设置

id-type:AUTO

驼峰映射

MP默认开启字段名列名的驼峰映射

userName(实体类中)——》user_name(数据库中)


自定义映射

在实体类的属性上面加@TableField("address")


如果需要关闭可以使用如下配置进行关闭

mybatis-plus:
  configuration:
	#是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
    map-underscore-to-camel-case: false

日志

如果需要打印MP操作对应的SQL语句等,可以配置日志输出。

配置方式如下:

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

条件构造器Wrapper

在其子类`AbstractWrapper`中提供了很多用于构造Where条件的方法。

QueryWrapper针对select方法,查询哪些列

UpdateWrapper针对set语法的set方法,设置来对哪些列进行更新

Mybatis-plus_第3张图片

         

常用AbstractWrapper方法

Mybatis-plus_第4张图片

自定义SQL实现分页

Mapper层

Service层 

 

Controller层

Mybatis-plus_第5张图片

如果使用mybatisplus自带的方法的话,直接在Mapper层,Service层继承mybatisplus的接口,在Controller层之间写对外的接口就好

Mapper层

Mybatis-plus_第6张图片

Service层

Mybatis-plus_第7张图片

Mybatis-plus_第8张图片

 Controller层

Mybatis-plus_第9张图片

list()是自带的方法,直接可以打印所有

不需要在mapper配置文件中写sql

另外mybatisplus自带分页

Mybatis-plus_第10张图片

注:标红线的是给分页查询加的条件(where),如不需要可去掉

Mybatisplus基础自带增删改查

 //增加或删除
@RequestMapping("/saveOrUpdate")
    public boolean saveOrUpdate(Student student){
        return iStudentService.saveOrUpdate(student);
    }
//删除
    @RequestMapping("/delete")
    public boolean delete(Long id){
        return iStudentService.removeById(id);
    }

//更新
    @RequestMapping("/update")
    public boolean update(Student student){
        return iStudentService.updateById(student);
    }
//全部查询
    @RequestMapping("list")
    public List list(){
      return iStudentService.list();
    }
//分页查询
    @RequestMapping("page")
    public Page page(Integer pageNo, Integer pageSize){
        Page page = new Page<>(pageNo,pageSize);
        return iStudentService.page(page);
    }

//查询,使用了QueryWrapper作为查询的条件
    @RequestMapping("/search")
//注意三个参数,页码,页大小,Student实例对象
    public IPage search(Integer pageNo,Integer pageSize, Student student){
        Page page = new Page<>(pageNo,pageSize);
        QueryWrapper queryWrapper = new QueryWrapper<>();
//如果输入不为空,获取输入的值
        if(!StringUtils.isEmpty(student.getSex())){
            queryWrapper.eq("sex",student.getSex());
        }
        if(!StringUtils.isEmpty(student.getName())){
               queryWrapper.like("name",student.getName());}
        if(!StringUtils.isEmpty(student.getNumber())){
            queryWrapper.like("number",student.getNumber());
        }

        return iStudentService.page(page,queryWrapper);
    }

你可能感兴趣的:(springboot,蓝桥杯,eureka,linq)