SpringBoot实例

  实例功能简单,仅包括用户管理、图书管理及用户下单购买书,项目结构如下所示:

一.脚本

sql.sql

create database springboot;

use springboot;

create table t_user(
  id       int,
  name     varchar(30),
  age      int
);

create table t_book(
  id int,
  name varchar(30),
  price decimal(18,2),
  remain_num int
);

create table t_order(
  id int,
  user_id int,
  user_name varchar(30),
  book_id int,
  book_name varchar(30),
  book_num int,
  book_price decimal(18,2)
);

 

二.Dao层

UserDao.java

package com.bijian.dao;

import com.bijian.entity.User;
import org.apache.ibatis.annotations.*;

/**
 * 添加了@Mapper注解之后这个接口在编译时会生成相应的实现类
 * 需要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id
 * 也就是说这个接口是不支持重载的
 */
@Mapper
//@Repository
public interface UserDao {

    /*
    * 用户数据新增
     */
    @Insert("insert into t_user(id,name,age) values (#{id},#{name},#{age})")
    void addUser(User user);

    /*
    * 用户数据修改
     */
    @Update("update t_user set name=#{name},age=#{age} where id=#{id}")
    void updateUser(User user);


    /*
    * 用户数据删除
     */
    @Delete("delete from t_user where id=#{id}")
    void deleteUser(int id);

    /*
    * 根据用户名称查询用户信息
     */
    @Select("select id,name,age from t_user where name=#{userName}")
    User findByName(@Param("userName") String userName);


    /*
    * 根据用户ID查询用户信息
     */
    @Select("select id,name,age from t_user where id=#{userId}")
    User findById(@Param("userId") int userId);

    /*
    *根据用户age查询用户信息
     */
    @Select("select id,name,age from t_user where age=#{userAge}")
    User findByAge(@Param("userAge") int userAge);
}

BookDao.java

package com.bijian.dao;

import com.bijian.entity.Book;
import org.apache.ibatis.annotations.*;

/**
 * 添加了@Mapper注解之后这个接口在编译时会生成相应的实现类
 * 需要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id
 * 也就是说这个接口是不支持重载的
 */
@Mapper
//@Repository
public interface BookDao {

    /*
    * book数据新增
     */
    @Insert("insert into t_book(id,name,price,remain_num) values (#{id},#{name},#{price}, #{remainNum})")
    int addBook(Book book);

    /*
    * 用户数据修改
     */
    @Update("update t_book set name=#{name},price=#{price},remain_num=#{remainNum} where id=#{id}")
    int updateBook(Book book);


    /*
    * 用户数据删除
     */
    @Delete("delete from t_book where id=#{id}")
    int deleteBook(int id);

    /*
    * 根据用户名称查询用户信息
     */
    @Select("select id,name,price,remain_num from t_book where name = #{bookName}")
    Book findByName(@Param("bookName") String bookName);

    @Select("select id,name,price,remain_num as remainNum from t_book where id = #{bookId}")
    Book findById(@Param("bookId") int bookId);
}

OrderDao.java

package com.bijian.dao;

import com.bijian.entity.Order;
import org.apache.ibatis.annotations.*;

/**
 * 添加了@Mapper注解之后这个接口在编译时会生成相应的实现类
 * 需要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id
 * 也就是说这个接口是不支持重载的
 */
@Mapper
//@Repository
public interface OrderDao {

    /*
     * 用户下单
     */
    @Insert("insert into t_order(id,user_id,user_name,book_id,book_name,book_num,book_price) values (#{id},#{userId},#{userName}, #{bookId},#{bookName}, #{bookNum}, #{bookPrice})")
    int addOrder(Order order);

    /*
     * 根据订单ID查询订单信息
     */
    @Select("select id,user_id as userId,user_name as userName,book_id as bookId,book_name as bookName,book_num as bookNum,book_price as bookPrice from t_order where id = #{orderId}")
    Order findById(@Param("orderId") int orderId);
}

 

三.entity类

User.java

package com.bijian.entity;

public class User {
    private int id;
    private String name;
    private int age;

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Book.java

package com.bijian.entity;

import java.math.BigDecimal;

public class Book {
    private int id;
    private String name;
    private BigDecimal price;
    private long remainNum;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public long getRemainNum() {
        return remainNum;
    }

    public void setRemainNum(long remainNum) {
        this.remainNum = remainNum;
    }
}

Order.java

package com.bijian.entity;

import java.math.BigDecimal;

public class Order {

    private int id;
    private int userId;
    private String userName;
    private int bookId;
    private String bookName;
    private int bookNum;
    private BigDecimal bookPrice;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public int getBookNum() {
        return bookNum;
    }

    public void setBookNum(int bookNum) {
        this.bookNum = bookNum;
    }

    public BigDecimal getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(BigDecimal bookPrice) {
        this.bookPrice = bookPrice;
    }
}

 

四.服务层

UserService.java

package com.bijian.service;

import com.bijian.entity.User;

public interface UserService {
    //新增用户
    boolean addUser(User user);

    //修改用户
    boolean updateUser(User user);

    //删除用户
    boolean deleteUser(int id);

    //根据用户名字查询用户信息
    User findUserByName(String userName);

    //根据用户ID 查询用户信息
    User findUserById(int userId);

    //根据用户年龄查询用户信息
    User findUserByAge(int userAge);
}

UserServiceImpl.java

package com.bijian.service.impl;

import com.bijian.dao.UserDao;
import com.bijian.entity.User;
import com.bijian.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;


    @Override
    public boolean addUser(User user) {
        boolean flag=false;
        try {
            userDao.addUser(user);
            flag = true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean updateUser(User user) {
        boolean flag=false;
        try{
            userDao.updateUser(user);
            flag=true;
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean deleteUser(int id) {
        boolean flag = false;
        try{
            userDao.deleteUser(id);
            flag=true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public User findUserByName(String userName) {
        return userDao.findByName(userName);
    }

    @Override
    public User findUserById(int userId) {
        return userDao.findById(userId);
    }

    @Override
    public User findUserByAge(int userAge) {
        return userDao.findByAge(userAge);
    }
}

BookService.java

package com.bijian.service;

import com.bijian.entity.Book;

public interface BookService {

    boolean addBook(Book book);

    boolean updateBook(Book book);

    boolean deleteBook(int id);

    Book findBookByName(String bookName);

    Book findBookById(int bookId);
}

BookServiceImpl.java

package com.bijian.service.impl;

import com.bijian.dao.BookDao;
import com.bijian.entity.Book;
import com.bijian.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean addBook(Book book) {
        int res = bookDao.addBook(book);
        if(res == 1) {
            return true;
        }
        return false;
    }

    @Override
    public boolean updateBook(Book book) {
        int res = bookDao.updateBook(book);
        if(res == 1) {
            return true;
        }
        return false;
    }

    @Override
    public boolean deleteBook(int id) {
        int res = bookDao.deleteBook(id);
        if(res == 1) {
            return true;
        }
        return false;
    }

    @Override
    public Book findBookByName(String bookName) {

        return bookDao.findByName(bookName);
    }

    @Override
    public Book findBookById(int bookId) {

        return bookDao.findById(bookId);
    }
}

OrderService.java

package com.bijian.service;

import com.bijian.dto.AddOrderRsp;
import com.bijian.dto.OrderRsp;
import com.bijian.dto.OrderRsp2;
import com.bijian.entity.Order;

public interface OrderService {

    AddOrderRsp addOrder(Order order);

    OrderRsp findOrderById(int orderId);

    OrderRsp2 findOrderById2(int orderId);
}

OrderServiceImpl.java

package com.bijian.service.impl;

import com.bijian.dao.OrderDao;
import com.bijian.dto.AddOrderRsp;
import com.bijian.dto.OrderRsp;
import com.bijian.dto.OrderRsp2;
import com.bijian.entity.Book;
import com.bijian.entity.Order;
import com.bijian.entity.User;
import com.bijian.enums.ReturnCodeEnum;
import com.bijian.service.BookService;
import com.bijian.service.OrderService;
import com.bijian.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderDao orderDao;

    @Autowired
    private BookService bookService;

    @Autowired
    private UserService userService;

    @Override
    public AddOrderRsp addOrder(Order order) {

        AddOrderRsp addOrderRsp = new AddOrderRsp(ReturnCodeEnum.SUCCESS.getCode(), ReturnCodeEnum.SUCCESS.getMsg());
        int bookId = order.getBookId();
        Book book = bookService.findBookById(bookId);
        if(book.getRemainNum() < order.getBookNum()) {
            addOrderRsp.setRetCode(ReturnCodeEnum.FAIL.getCode());
            addOrderRsp.setRetMsg("库存少于订单数量");
            return addOrderRsp;
        }

        order.setBookName(book.getName());
        order.setBookPrice(book.getPrice());

        int userId = order.getUserId();
        User user = userService.findUserById(userId);
        order.setUserName(user.getName());

        int res = orderDao.addOrder(order);
        if(res == 1) {
            long remainNum = book.getRemainNum() - order.getBookNum();
            book.setRemainNum(remainNum);
            bookService.updateBook(book);
            return addOrderRsp;
        }
        addOrderRsp.setRetCode(ReturnCodeEnum.FAIL.getCode());
        addOrderRsp.setRetMsg("下单失败");
        return addOrderRsp;
    }

    @Override
    public OrderRsp findOrderById(int orderId) {
        OrderRsp orderRsp = new OrderRsp();
        System.out.println("orderId:" + orderId);
        Order order = orderDao.findById(orderId);
        System.out.println(order.getBookId() + "," + order.getBookName());
        orderRsp.setOrder(order);
        Book book = bookService.findBookById(order.getBookId());
        orderRsp.setNowPrice(book.getPrice());
        orderRsp.setRemainNum(book.getRemainNum());
        return orderRsp;
    }

    @Override
    public OrderRsp2 findOrderById2(int orderId) {
        OrderRsp2 orderRsp = new OrderRsp2();
        Order order = orderDao.findById(orderId);
        orderRsp.setBookId(order.getBookId());
        orderRsp.setBookName(order.getBookName());
        orderRsp.setBookNum(order.getBookNum());
        orderRsp.setBookPrice(order.getBookPrice());
        orderRsp.setId(order.getId());
        orderRsp.setUserId(order.getUserId());
        orderRsp.setUserName(order.getUserName());
        Book book = bookService.findBookById(order.getBookId());
        orderRsp.setNowPrice(book.getPrice());
        orderRsp.setRemainNum(book.getRemainNum());
        return orderRsp;
    }
}

 

五.控制器层

UserRestController.java

package com.bijian.web;

import com.bijian.entity.User;
import com.bijian.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value="/api/user")
public class UserRestController {
    @Autowired
    private UserService userService;

     @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public boolean addUser(@RequestBody User user){
         System.out.println("开始新增......");
         System.out.println(user.getId() + "," + user.getName() + "," + user.getAge());
         return userService.addUser(user);
     }

     @RequestMapping(value = "/updateUser", method=RequestMethod.PUT)
    public boolean updateUser(User user){
         System.out.println("开始更新.......");
         return userService.updateUser(user);
     }

     @RequestMapping(value = "/deleteUser", method = RequestMethod.DELETE)
    public boolean delete(@RequestParam(value="userId", required =true) int userId){
         System.out.println("开始更新.......");
         return userService.deleteUser(userId);
     }

     @RequestMapping(value="/userName", method=RequestMethod.GET)
    public User findByUserName(@RequestParam(value = "userName",required = true) String userName){
         System.out.println("开始查询...");
         return userService.findUserByName(userName);
     }

    @RequestMapping(value="/userId", method=RequestMethod.GET)
    public User findByUserId(@RequestParam(value = "userId",required = true) int userId){
        System.out.println("开始查询...");
        return userService.findUserById(userId);
    }

    @RequestMapping(value="/userAge", method=RequestMethod.GET)
    public User findByUserAge(@RequestParam(value = "userAge",required = true) String userAge){
        System.out.println("开始查询...");
        return userService.findUserByName(userAge);
    }
}

BookRestController.java

package com.bijian.web;

import com.bijian.entity.Book;
import com.bijian.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value="/api/book")
public class BookRestController {

    @Autowired
    private BookService bookService;

     @RequestMapping(value = "/addBook", method = RequestMethod.POST)
    public boolean addUser(@RequestBody Book book){
         System.out.println("开始新增......");
         System.out.println(book.getId() + "," + book.getName() + "," + book.getPrice() + "," + book.getRemainNum());
         return bookService.addBook(book);
     }

     @RequestMapping(value = "/updateBook", method=RequestMethod.PUT)
    public boolean updateBook(Book book){
         System.out.println("开始更新.......");
         return bookService.updateBook(book);
     }

     @RequestMapping(value = "/deleteBook", method = RequestMethod.DELETE)
    public boolean delete(@RequestParam(value="bookId", required =true) int bookId){
         System.out.println("开始更新.......");
         return bookService.deleteBook(bookId);
     }

     @RequestMapping(value="/bookName", method=RequestMethod.GET)
    public Book findByBookName(@RequestParam(value = "bookName",required = true) String bookName){
         System.out.println("开始查询...");
         return bookService.findBookByName(bookName);
     }
}

OrderRestController.java

package com.bijian.web;

import com.bijian.dto.AddOrderRsp;
import com.bijian.dto.OrderRsp;
import com.bijian.dto.OrderRsp2;
import com.bijian.entity.Order;
import com.bijian.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping(value="/api/order")
public class OrderRestController {

    @Autowired
    private OrderService orderService;

    @RequestMapping(value = "/addOrder", method = RequestMethod.POST)
    public AddOrderRsp addOrder(@RequestBody Order order){
         System.out.println("开始新增......");
         System.out.println(order.getId() + "," + order.getUserId() + ","  + order.getBookId() + ","  + order.getBookNum());
         return orderService.addOrder(order);
     }

    @RequestMapping(value="/orderId", method=RequestMethod.GET)
    public OrderRsp findByOrderId(@RequestParam(value = "orderId",required = true) int orderId){
        System.out.println("开始查询..." + orderId);
        return orderService.findOrderById(orderId);
    }

    @RequestMapping(value="/orderId2", method=RequestMethod.GET)
    public OrderRsp2 findByOrderId2(@RequestParam(value = "orderId",required = true) int orderId){
        System.out.println("开始查询..." + orderId);
        return orderService.findOrderById2(orderId);
    }
}

 

六.DTO

AddOrderRsp.java

package com.bijian.dto;

public class AddOrderRsp {

    private String retCode;
    private String retMsg;

    public AddOrderRsp(String retCode, String retMsg) {
        this.retCode = retCode;
        this.retMsg = retMsg;
    }

    public String getRetMsg() {
        return retMsg;
    }

    public void setRetMsg(String retMsg) {
        this.retMsg = retMsg;
    }

    public String getRetCode() {
        return retCode;
    }

    public void setRetCode(String retCode) {
        this.retCode = retCode;
    }
}

OrderRsp.java

package com.bijian.dto;

import com.bijian.entity.Order;

import java.math.BigDecimal;

public class OrderRsp {

    private Order order;
    private long remainNum;
    private BigDecimal nowPrice;

    public Order getOrder() {
        return order;
    }

    public void setOrder(Order order) {
        this.order = order;
    }

    public long getRemainNum() {
        return remainNum;
    }

    public void setRemainNum(long remainNum) {
        this.remainNum = remainNum;
    }

    public BigDecimal getNowPrice() {
        return nowPrice;
    }

    public void setNowPrice(BigDecimal nowPrice) {
        this.nowPrice = nowPrice;
    }
}

OrderRsp2.java

package com.bijian.dto;

import com.bijian.entity.Order;

import java.math.BigDecimal;

public class OrderRsp2 extends Order {

    private long remainNum;
    private BigDecimal nowPrice;

    public long getRemainNum() {
        return remainNum;
    }

    public void setRemainNum(long remainNum) {
        this.remainNum = remainNum;
    }

    public BigDecimal getNowPrice() {
        return nowPrice;
    }

    public void setNowPrice(BigDecimal nowPrice) {
        this.nowPrice = nowPrice;
    }
}

 

七.枚举类

ReturnCodeEnum.java

package com.bijian.enums;

public enum ReturnCodeEnum {

    SUCCESS("0", "处理成功"),
    FAIL("1", "处理失败");

    private String code;

    private String msg;

    ReturnCodeEnum(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

 

八.服务启动类

UserSpringbootGradeDemoApplication.java

package com.bijian;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class UserSpringbootGradeDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserSpringbootGradeDemoApplication.class, args);
    }
}

 

九.项目配置文件

application.properties

## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## Mybatis 配置
# 配置为 com.pancm.bean 指向实体类包路径。
mybatis.typeAliasesPackage=com.bijian.entity

 

十.gradle配置文件

build.gradle

buildscript {
    ext {
        springBootVersion = '2.1.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.user.springboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
    implementation('mysql:mysql-connector-java:5.1.46')
    runtimeOnly('org.springframework.boot:spring-boot-devtools')
    runtimeOnly('mysql:mysql-connector-java:5.1.46')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
    testImplementation('junit:junit:4.12')
    testImplementation('org.mockito:mockito-all:1.10.19')
}

 

十一.启动UserSpringbootGradeDemoApplication,运行项目

1.新增用户

  查看t_user表,内容如下:

  用postman工具测试新增用户如下:

  再次查看t_user表,name为bijian的用户新增成功。

 

2.新增书籍

   查看t_book表,内容如下:

  用postman工具测试新增书籍如下:

  再次查看t_book表,name为Linux的书新增成功。

 

3.新增订单

  查看订单表,内容如下:

  用postman工具测试下单如下:

 

  再次查看t_order表,新增订单信息如下:

  接口查询订单信息如下:

  其它功能测试就不再一一测试了。整个项目工程代码详见《SpringBoot小项目实例》。

posted on 2019-01-06 23:32  bijian1013  阅读(434)  评论(0)    收藏  举报

导航