创建SpringBoot接口项目要点

SpringBoot整合

创建Spring Web项目
pom.xml


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

application.yml

server:
  port: 80

实体类


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    @TableId
    private Integer id;
    private String type;
    private String bookname;
    private String description;

}
Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发,SpringBoot目前默认集成了lombok技术,并提供了对应的版本控制,所以只需要提供对应的坐标即可,在pom.xml中添加lombok的坐标。

    
    
        org.projectlombok
        lombok
    

数据层开发——基础CRUD

数据层开发使用MyBatisPlus,数据源使用Druid

<dependencies>
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>3.4.3version>
    dependency>
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druid-spring-boot-starterartifactId>
        <version>1.2.6version>
    dependency>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <scope>runtimescope>
    dependency>
dependencies>
server:
  port: 80

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: root

使用MP的标准通用接口BaseMapper加速开发,注意@Mapper和泛型的指定

@Mapper
public interface BookDao extends BaseMapper {
}
MP技术默认的主键生成策略为雪花算法,生成的主键ID长度较大,和目前的数据库设定规则不相符,需要配置一下使MP使用数据库的主键生成策略。在application.yml中添加对应配置即可,具体如下
server:
  port: 80

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: root

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_		#设置表名通用前缀
      id-type: auto				#设置主键id字段的生成策略为参照数据库设定的策略,当前数据库设置id生成策略为自增
SpringBoot整合MP的时候通过配置的形式就可以查阅执行期SQL语句,配置如下
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

定义MP拦截器并将其设置为Spring管控的bean

//实现分页拦截器
@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());//****
        return interceptor;
    }
}

数据层开发——条件查询功能制作

QueryWrapper条件

@Test
void testGetBy(){
    QueryWrapper qw = new QueryWrapper<>();
    qw.like("name","Spring");
    bookDao.selectList(qw);
}

LambdaQueryWrapper条件

@Test
void testGetBy2(){
    String name = "1";
    LambdaQueryWrapper lqw = new LambdaQueryWrapper();
    lqw.like(Book::getName,name);
    bookDao.selectList(lqw);
}

动态条件

@Test
void testGetBy2(){
    String name = "1";
    LambdaQueryWrapper lqw = new LambdaQueryWrapper();
    //if(name != null) lqw.like(Book::getName,name);		//方式一:JAVA代码控制
    lqw.like(name != null,Book::getName,name);				//方式二:API接口提供控制开关
    bookDao.selectList(lqw);
}

业务层开发

public interface BookService {
    Boolean save(Book book);
    Boolean update(Book book);
    Boolean delete(Integer id);
    Book getById(Integer id);
    List getAll();
    IPage getPage(int currentPage,int pageSize);
}

业务层实现类如下,转调数据层即可

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public Boolean save(Book book) {
        return bookDao.insert(book) > 0;
    }

    @Override
    public Boolean update(Book book) {
        return bookDao.updateById(book) > 0;
    }

    @Override
    public Boolean delete(Integer id) {
        return bookDao.deleteById(id) > 0;
    }

    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    @Override
    public List getAll() {
        return bookDao.selectList(null);
    }

    @Override
    public IPage getPage(int currentPage, int pageSize) {
        IPage page = new Page(currentPage,pageSize);
        bookDao.selectPage(page,null);
        return page;
    }
}

业务层快速开发

业务层接口快速开发

public interface IBookService extends IService {
    //添加非通用操作API接口
}
业务层接口实现类快速开发,关注继承的类需要传入两个泛型,一个是数据层接口,另一个是实体类
@Service
public class BookServiceImpl extends ServiceImpl implements IBookService {
    @Autowired
    private BookDao bookDao;
	//添加非通用操作API
}

表现层开发

@RestController
@RequestMapping("/books")
public class BookController2 {

    @Autowired
    private IBookService bookService;

    @GetMapping
    public List getAll(){
        return bookService.list();
    }

    @PostMapping
    public Boolean save(@RequestBody Book book){
        return bookService.save(book);
    }

    @PutMapping
    public Boolean update(@RequestBody Book book){
        return bookService.modify(book);
    }

    @DeleteMapping("{id}")
    public Boolean delete(@PathVariable Integer id){
        return bookService.delete(id);
    }

    @GetMapping("{id}")
    public Book getById(@PathVariable Integer id){
        return bookService.getById(id);
    }

    @GetMapping("{currentPage}/{pageSize}")
    public IPage getPage(@PathVariable int currentPage,@PathVariable int pageSize){
        return bookService.getPage(currentPage,pageSize, null);
    }
}
  1. 基于Restful制作表现层接口
    • 新增:POST
    • 删除:DELETE
    • 修改:PUT
    • 查询:GET
  2. 接收参数
    • 实体数据:@RequestBody
    • 路径变量:@PathVariable

表现层消息一致性处理

@Data
public class R {
    private Boolean flag;
    private Object data;
    public R(Boolean flag,Object data){
        this.flag=flag;
        this.data=data;
    }
    public R(Object data){
        if(data!=null){
            this.flag=true;
            this.data=data;
        }else
        {
            this.flag=false;
            this.data=data;
        }
        
    }
}

你可能感兴趣的:(Java,spring,boot,后端,java)