zoukankan      html  css  js  c++  java
  • javaweb各种框架组合案例(八):springboot+mybatis-plus+restful

    一、介绍

    1. springboot是spring项目的总结+整合

      当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间还会出现冲突,让你的项目出现难以解决的问题。基于这种情况,springboot横空出世,在考虑到Struts控制层框架有漏洞,springboot放弃(大多数企业同样如此)了Struts,转而代之是springMVC,不过,springboot是自动集成springMVC的,不需要任何配置,不需要任何依赖,直接使用各种控制层注解。springboot是springcloud的基础,是开启微服务时代的钥匙。

    2. mybatis-plus

      mybatis-plus是国内大佬基于mybatis基础上的一个增强版,且只做增强,不做减少,其核心是BaseMapper,这是一个通用版的dao接口,有着比较完善的CRUD操作,使用时只需将自己的dao接口继承BaseMapper即可,类似于之前【demo】中的核心dao思想。

     3.对比mybatis优点

      不需要mapper.xml文件,dao直接继承BaseMapper<T> 即可使用。

    二、新建springboot工程

    1. 使用idea2019新建project,选择spring Initializr,next

    2. 填写坐标信息,next

     3. Developer Tools选择Lombok, Web选择Spring Web Starter,SQL选择MySQL Driver,next

      由于工程依赖中不包括mybatis-plus,所以稍后需要在pom中额外加入mybatis-plus依赖

      lombok是为了省去实体类中getter/setter方法,使之在运行时动态添加getter/setter

      

    4. 填写项目名已经存放位置,finish

     

    三、项目构建

    1. 数据库准备

    create database mybatis_plus;
    
    DROP TABLE IF EXISTS user;
    
    CREATE TABLE user
    (
        id BIGINT(20) NOT NULL COMMENT '主键ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        age INT(11) NULL DEFAULT NULL COMMENT '年龄',
        email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
        PRIMARY KEY (id)
    );
    
    DELETE FROM user;
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, 'Jone', 18, 'test1@baomidou.com'),
    (2, 'Jack', 20, 'test2@baomidou.com'),
    (3, 'Tom', 28, 'test3@baomidou.com'),
    (4, 'Sandy', 21, 'test4@baomidou.com'),
    (5, 'Billie', 24, 'test5@baomidou.com');

    2. pom.xml

      在原有基础上添加

    <!-- mybatis-plus -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.1.2</version>
    </dependency>

     

    3. 配置文件

      application.properties

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
    spring.datasource.username=root
    spring.datasource.password=root

    4.项目包结构

     5. 实体类User

    package club.xcreeper.springboot_mybatis_plus.entity;
    
    import lombok.Data;
    
    @Data
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }

    6. dao层

    package club.xcreeper.springboot_mybatis_plus.dao;
    
    import club.xcreeper.springboot_mybatis_plus.entity.User;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    public interface UserDao extends BaseMapper<User> {
    
    }

    7. service层

    package club.xcreeper.springboot_mybatis_plus.service;
    
    import club.xcreeper.springboot_mybatis_plus.entity.User;
    
    public interface UserService  {
        User getOne(long id);
        User findByNameAndAge(String name,Integer age);
    }
    package club.xcreeper.springboot_mybatis_plus.service.impl;
    
    import club.xcreeper.springboot_mybatis_plus.dao.UserDao;
    import club.xcreeper.springboot_mybatis_plus.entity.User;
    import club.xcreeper.springboot_mybatis_plus.service.UserService;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao;
    
        @Override
        public User getOne(Long id) {
            return userDao.selectById(id);
        }
    
        @Override
        public User findByNameAndAge(String name, Integer age) {
            return userDao.selectOne(new QueryWrapper<User>().eq("name",name).eq("age",age));
        }
    
    
    }

    8. controller层

    package club.xcreeper.springboot_mybatis_plus.controller;
    
    import club.xcreeper.springboot_mybatis_plus.entity.User;
    import club.xcreeper.springboot_mybatis_plus.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @GetMapping(value = "/{id}")
        public User getOne(@PathVariable long id){
            return userService.getOne(id);
        }
    
        @GetMapping(value = "/getUser",params = {"name","age"})
        public User findByNameAndAge(String name,Integer age){
            return userService.findByNameAndAge(name,age);
        }
    }

    9. 需要在启动类上加@ScanMapper注解

    package club.xcreeper.springboot_mybatis_plus;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan("club.xcreeper.springboot_mybatis_plus.dao")
    public class SpringbootMybatisPlusApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootMybatisPlusApplication.class, args);
        }
    
    }

    10. 启动项目,并使用postman进行接口测试

      测试getOne接口

      测试findByNameAndAge接口

      

  • 相关阅读:
    CompletableFuture详解1
    使用CompletionService解决耗时时间过长任务导致的阻塞问题以及解决ExecutorService.shutdownNow()导致正在执行中的任务被打断,但该任务不会被返回
    ScheduledExecutorService和ScheduledThreadPoolExecutor
    future的缺陷和CompletionService对他的优化
    Future方法详解
    ExecutorService的API详解
    scheduler的前奏Timer&Crontab和Quartz的比较
    [Paper Reading]--Exploiting Relevance Feedback in Knowledge Graph
    [Leetcode] DP-- 96. Unique Binary Search Trees
    [Leetcode] DP-- 474. Ones and Zeroes
  • 原文地址:https://www.cnblogs.com/xiaogblog/p/11150912.html
Copyright © 2011-2022 走看看