构建项目及初始配置
创建项目
配置yml配置文件
tips: 默认是application.properties,自己再新建一个application.yml即可
server:
port: 8088 #自己喜欢哪个端口用哪个
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2b8 #改成自己的数据库
username: root # 改成自己的mysql用户
password: root # 改成自己的密码
mybatis:
mapper-locations: classpath:mapper/*.xml
创建不同的包 controller,service,mapper,entity…
tips:注意包的位置,别放错了。创建包:右键点击new package即可。
- controller 对应控制器,用于对接接口的映射
- service 用于业务处理(当然目前的这个小demo非常简单,只作用于一个传递的功能)
- mapper 就是一些增删改查的接口
- entity 实体类,数据库中的每一张表对应于一个实体类(当然,可以有更详细的vo,bo之类的,只不过当前的demo比较简单,就一个数据库对应一个实体类啦)
- resource/mapper 用于编写实际sql的xml的地方
编写代码
编写实体类 User
在包entity下,创建User类,然后提供与数据库对应的字段作为属性,我这边使用lombok提供的注解(对应的getter和setter以及有参无参构造器和toString方法),其实就是传统的javabean。
package com.robin.springbootscaffold.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private int id;
private String name;
private String password;
private String sex;
private int age;
private String phone;
}
编写mapper接口
这里因为是入门嘛,所以就直接对应一张表的crud,增删改查,以及一个列表查询,然后左侧的小鸟是装了一个mybatis的插件(它可以帮助提示,你的每个mapper接口和mapper.xml的映射关系)。
package com.robin.springbootscaffold.mapper;
import com.robin.springbootscaffold.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> getAllUsers();
int addUser(User user);
int updUserById(User user);
User findUserById(@Param("id") int id);
int delUserById(@Param("id") int id);
}
编写mapper.xml(Resource目录下)
这里需要注意的是
- namespace命名空间,要指定你的mapper接口的完整路径
- 增删改查分别对应于四个标签 insert delete update select
- 每个sql对应于你的mapper接口中的方法,我们需要通过id去指定你当前的sql是哪个接口方法的
{xxx} 这是mybatis提供的一种占位符,就是之前sql中学的 ? 占位符
- resultType 结果类型,如果是实体类的话也需要通过指定完整的类路径
<?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.robin.springbootscaffold.mapper.UserMapper">
<!-- public List<User> getAllUsers(); -->
<select id="getAllUsers" resultType="com.robin.springbootscaffold.entity.User">
select * from user
</select>
<!-- 添加用户方法 用户id为自增主键,所以这里我们不需要传入id值 -->
<insert id="addUser" >
insert into user
(name,password,sex,age,phone)
values (#{name},#{password},#{sex},#{age},#{phone})
</insert>
<!-- 根据用户id进行更新操作 -->
<update id="updUserById">
update user
set name = #{name},
sex = #{sex},
phone = #{phone},
age = #{age}
where id = #{id}
</update>
<!-- 根据用户id查询用户详情 -->
<select id="findUserById" resultType="com.robin.springbootscaffold.entity.User">
select * from user where id = #{id}
</select>
<!-- 根据id删除用户 -->
<delete id="delUserById">
delete from user where id = #{id}
</delete>
</mapper>
编写service
每个方法基本是见名知意,我就不一一注释了。
package com.robin.springbootscaffold.service;
import com.robin.springbootscaffold.entity.User;
import com.robin.springbootscaffold.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getAllUsers(){
return userMapper.getAllUsers();
}
public int addUser(User user){
return userMapper.addUser(user);
}
public int updUserById(User user){
return userMapper.updUserById(user);
}
public User findUserById(int id){
return userMapper.findUserById(id);
}
public int delUserById(int id){
return userMapper.delUserById(id);
}
}
编写controller
package com.robin.springbootscaffold.controller;
import com.robin.springbootscaffold.entity.User;
import com.robin.springbootscaffold.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public List<User> getAllUsers(){
return userService.getAllUsers();
}
@PostMapping("/add")
public int addUser(@RequestBody User user){
return userService.addUser(user);
}
@PutMapping("/upd")
public int updUserById(@RequestBody User user){
return userService.updUserById(user);
}
@GetMapping("/find/{id}")
public User findUserById(@PathVariable("id") int id){
return userService.findUserById(id);
}
@DeleteMapping("/delete/{id}")
public int delUserById(@PathVariable("id") int id){
return userService.delUserById(id);
}
}
首先解释一下 @RestController 这个注解,可以将你的每个接口的返回值转换为一个json,@RequestMapping 用于指定接口的映射规则,这个的话,接着往下看就明白啦。
然后 @GetMapping @DeleteMapping @PutMapping @PostMapping 都是 @RequestMapping 的衍生注解,分别对应不同的请求方式,然后有一些细节是不同的,这里不做过多的描述。
如果 @RequestBody @PathVariable 这两个注解不懂的话,可以看我的这篇文章 springbootWeb常用注解使用
接口测试,使用postman
启动项目,然后使用postman测试接口(如果没使用过postman的话,去了解一下)
注意观察每个接口的请求方式,以及请求的参数和请求体
查询用户列表
新增用户
因为我们controller中使用的是@RequestBody注解 ,所以使用postman发送请求的话需要选择body->row,然后以json的数据格式发送。
查询单个用户信息
路径变量,就是在/后面多加一个变量,用于保存一些信息,然后使用@PathVarible注解就可以获取到对应的变量的值。
修改用户信息
删除用户信息
SQL代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '姓名',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密码',
`sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '性别',
`age` int(0) NULL DEFAULT NULL COMMENT '年龄',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '张三', '123456', '男', 25, '18888889999');
INSERT INTO `user` VALUES (3, 'robin', '123456', '男', 22, '14424567789');
SET FOREIGN_KEY_CHECKS = 1;
数据库比较简单,考虑到小白,我直接贴sql代码了(数据库名为springboot,表名为user)。
完整代码zip
这个demo的完整代码,我已经上传到了百度网盘需要的直接下载就行
链接: https://pan.baidu.com/s/1gghcUrajoMDpAQbEnfOOuw 提取码: 41xs
小结
后续看情况,可以做一下前后端分离的小demo