1. 环境准备(SpringBoot+SSM)
1.1 表结构与数据
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`book_id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(50) DEFAULT NULL,
`book_date` datetime DEFAULT NULL,
`book_price` decimal(10,2) DEFAULT NULL,
`book_cover` varchar(200) DEFAULT NULL,
`category_id` int(11) DEFAULT NULL,
PRIMARY KEY (`book_id`),
KEY `fk_book_category` (`category_id`),
CONSTRAINT `fk_book_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `book` VALUES ('1', '西游记', '2020-05-19 17:48:04', '50.23', null, '4');
INSERT INTO `book` VALUES ('2', '穿越到明朝', '2020-05-06 17:48:48', '30.60', null, '1');
INSERT INTO `book` VALUES ('3', 'X战机', '2020-04-29 17:49:46', '60.50', null, '2');
INSERT INTO `book` VALUES ('4', '七匹狼', '2020-05-05 17:50:23', '70.70', null, '3');
INSERT INTO `book` VALUES ('5', '红楼梦', '2020-05-08 17:50:54', '80.00', null, '4');
INSERT INTO `book` VALUES ('6', '水浒传', '2020-05-11 17:51:14', '55.00', null, '4');
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `category` VALUES ('1', '历史');
INSERT INTO `category` VALUES ('2', '军事');
INSERT INTO `category` VALUES ('3', '教育');
INSERT INTO `category` VALUES ('4', '名著');
1.2 项目结构
1.3 引入依赖
pom.xml
<!-- 继承依赖spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<!-- mysql数据驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- mybatis-plus启动依赖 -->
<!-- 不需再引入mybatis包 -->
<!-- 不需再引入jdbc包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- mybaits plus3.1以后把日期类型映射成jdk1.8新增的LocalDateTime丶LocalDate丶LocalTime,会出现转换异常问题 -->
<!-- mybatis-typehandlers-jsr310依赖可以解决转换异常问题 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>1.0.2</version>
</dependency>
<!-- mybatis-plus代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<!-- freemarker模版引擎(用于代码生成器) -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
</dependencies>
1.4 数据源配置
application.properties
# 数据源连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# 控制台打印sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
1.5 SpringBoot启动类
package com;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.mapper") //设置扫描Mapper的包
public class BookApplication {
public static void main(String[] args) {
SpringApplication.run(BookApplication.class,args);
}
}
1.6 使用代码生成器生成各层代码(也可以手动创建)
- 代码生成器参考:https://blog.csdn.net/u013087359/article/details/106954885
- 设置CodeGenerator类常用的私有静态属性值
- 执行CodeGenerator的main方法,会生成各层文件
- 把生成的各层代码复制到项目的src/main/java文件夹下(因为用的是注解方式,mapper.xml可以不用复制)
1.7 添加控制器方法
package com.controller;
import com.entity.Book;
import com.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@RestController
@RequestMapping("//book")
public class BookController {
@Autowired
private IBookService bookService;
//查询所有数据
@RequestMapping("findAll")
private List<Book> findAll(){
List<Book> list = bookService.list();
return list;
}
//新增数据
@RequestMapping("add")
private Book add(){
Book book=new Book();
book.setBookName("书籍02");
// book.setBookPrice(new BigDecimal(10.2)); //错误用法,精度会丢失,会出现一串小数
// book.setBookPrice(new BigDecimal("10.2")); //正确用法1
book.setBookPrice(BigDecimal.valueOf(10.2)); //正确用法2
book.setBookDate(LocalDateTime.now());
bookService.save(book);
return book;
}
}
1.8 访问控制器方法
- 启动BookApplication
- 在浏览器中输入http://localhost:8080/book/findAll和http://localhost:8080/book/add进行访问