快速搭建Springboot进行CRUD

如果你想要

  • 需要快速搭建个后台进行增删改查,而暂时不想要系统学习Spring框架
  • 前端开发想要更好的模拟后端数据的返回
  • 大学生期末大作业的后台CRUD

通过学习此文,你可以

  • 快速搭建Springboot进行CRUD

为什么选择Springboot

  • 传统SSM需要通过一些配置才能跑起来,而Springboot几乎开箱即用

前期准备

需要掌握的知识

  • Java语言
  • mysql

安装的环境和工具(可自行替换)

  • IntelliJ IDEA 2019.3.3
  • mysql 5.7
  • navicat

项目初始化

新建项目

1.新建项目,选择Spring InitializrJDK选择 1.8,默认创建方式,然后点击Next

image-20211227185545028

2.Java Version选8,其他可以默认,点击Next

image-20211227185826003

3.选择依赖(按下方选择),选择完成可以看到右边的选择列表,然后点击Next

  • Web
    • Spring Web
  • Template Engines
    • Thymeleaf
  • SQL
    • JDBC API
    • MySQl Driver
    • Mybatis Framework

image-20211227190341847

4.点击finish

image-20211227190451955

5.如果有以下询问,点击new window

image-20211227190521558

6.打开项目后,点击右下角

  • Enable Auto Import
    • 自动导入依赖

image-20211227190553801

配置数据库

1.用navicat新建数据库mybatisdb,并新建一张表user

image-20211227191415683

2.修改配置文件

image-20211227191037152

  • 数据库名称对应上面数据库名称
  • url:jdbc:mysql://localhost:3306/数据库名称?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
  • 用户名和密码修改为你自己的
1
2
3
4
5
6
7
8
9
10
#数据库名称
spring.datasource.name=mybatisdb
#数据库连接url
spring.datasource.url= jdbc:mysql://localhost:3306/mybatisdb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
#用户名
spring.datasource.username=root
#密码
spring.datasource.password=root
#数据库驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

启动项目

在项目启动类中添加一句数据,点击运行后就可以看到项目已经可以跑起来了!

1
System.out.println("SpringBoot Start");

image-20211227191850567

CRUD

准备工作

1.在demo下新建几个包

  • controller:处理事务,处理请求和响应
  • mapper:操作数据库
    • 编写SQL语句,对数据库进行增删查改
  • model:对象模型
    • 数据库user表有name和age字段,则该包中就可以有一个类User,有name和age属性
  • service:编写业务代码
  • utils:工具包,存放通用代码

image-20211227192200800

模型

模型对象数据库中的表

  • get、set快捷键
    • 生成一个属性的get和set:在该行后面alt+enter
      • 若电脑delete键与insert键是共用一键,则使用fn+alt+insert
    • 生成多个属性的get和set:alt+insert

在model新建User

使用@Entity标签来说明它是一个实体类

使用@Table(name = "students")标签将实体类与数据库中的表进行映射

1
2
3
4
5
6
7
@Entity
@Table(name = "user")
public class User {
private String name;
private int age;
// get set省略
}

image-20211227194302265

映射层

有两种写sql语句的方法(二选一即可)

1.通过注释

1
2
3
4
5
6
7
8
public interface UserMapper {
/**
* 查询所有用户信息
* @return 用户信息列表
*/
@Select("select * from user")
List<User> selectAllUser();
}

2.通过配置文件写sql

修改全局配置application.properties,新增以下内容

  • 配置映射文件
    • 该路径为配置文件路径,即存放sql语句的路径
  • 配置实体类
    • 该路径需要修改为你自己的包路径

配置映射文件和实体类一一映射

1
2
3
4
5
#mybatis配置
#配置映射文件
mybatis.mapper-locations=classpath:mapper/*.xml
#配置实体类
mybatis.type-aliases-package=com.ehxie.demo.model

在mapper新建UserMapper接口

1
2
3
4
5
6
7
public interface UserMapper {
/**
* 查询所有用户信息
* @return 用户信息列表
*/
ArrayList<User> selectAllUser();
}

在resources下新建mapper文件夹,在该文件夹中新建UserMapper.xml

  • UserMapper.xml的命名需要与mapper中映射的类对应
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ehxie.demo.mapper" >
<select id="selectAllUser" resultType="com.ehxie.demo.model.User">
select * from user
</select>
</mapper>

编写sql语句后最好先测试一下是否达到预期

image-20211227195908801

2.

注入mapper

在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring。

  • 但是如果每一给mapper都添加@mapper注解会很麻烦
  • 可以使用@MapperScan注解来扫描包

新增注解:@MapperScan(“com.ehxie.demo.mapper”)

1
2
3
4
5
6
7
8
@SpringBootApplication
@MapperScan("com.ehxie.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
System.out.println("SpringBoot Start");
}
}

服务层

在service新建UserService接口

  • 接口定义规范
1
2
3
4
5
6
7
8
// ...
public interface UserService {
/**
* 获取所有用户信息
* @return
*/
ArrayList<User> getAllUser();
}

为接口做实现

  • 在service中新建impl包
  • 在impl包中新建UserService接口的实现类UserServiceImpl

该类需要注释:@Service

自动导入Bean:@Autowired

1
2
3
4
5
6
7
8
9
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public ArrayList<User> getAllUser() {
return userMapper.selectAllUser();
}
}

image-20211227200315629

控制层

在controller新建UserController接口

需要添加注释:@Controller

映射路径注释:@RequestMapping(value = “/user”)

需要将服务层对象注入:@Autowired

1
2
3
4
5
6
7
8
9
10
11
12
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;

@RequestMapping(value = "/getAll")
@ResponseBody
public List<User> getAllUser() {
return userService.getAllUser();
}
}

启动项目,访问http://localhost:8080/user/getAll

image-20211227221013120

pom

一些比较常用的依赖

  • JSON格式化
1
2
3
4
5
6
<!--    将实体对象转换为JSON对象    -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
  • 生成唯一key需要导入的包
    • @Id注解
    • @GeneratedValue(strategy = GenerationType.IDENTITY)
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>

数据库操作

对数据库的CRUD实际上就是在写mapper

修改下数据库的user

image-20211227222518733

1
2
3
4
5
6
7
8
9
CREATE TABLE `user` (
`id` bigint(20) NOT NULL,
`name` varchar(255) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`gender` int(2) DEFAULT NULL COMMENT '性别:0-未知,1-男,2-女',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`register_date` datetime DEFAULT NULL COMMENT '注册日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=ascii;

修改model下的User

  • @Id 标注用于声明一个实体类的属性映射为数据库的主键列
  • @GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。
    • 默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
    • 在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
      –IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
      –AUTO: JPA自动选择合适的策略,是默认选项;
      –SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
      –TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
1
2
3
4
5
6
7
8
9
10
11
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private int age;
private String gender;
private String password;
private Long register_date;
// get set省略
}

CRUD代码示例

注解版代码示例