1、springboot脚手架搭建(2.x)
环境配置
1、下载安装 jdk 1.8
2、下载安装 apache maven ( 3.8.1 )
大家不要嫌我复杂、啰嗦,如果不是初学者的话,这个文章对你也就没有用的(前期工作都很详细)
2、IDEA创建SpringBoot项目
打开 IDEA 点击 New Project,依次选择下面的操作
接着点击 Next
spingboot的版本不要选太高
3、修改maven仓库路径
然后在 setting 里设置 maven 路径
设置编码,改为 utf-8
4、连接数据库
改文件后缀,将 application 的后缀改为 yml
文件所在路径:src / main /resources / application.yml
application.yml
server:
port: 9090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/permissions?serverTimezone=GMT%2b8
username: root
password: 123456
server: port:9090 这个是自定义端口号
permissions:是我自己的数据库名
username:数据库连接账号
password:数据库连接密码
5、构造统一返回结果 Result.java
在 springboot 文件夹下创建 common 包
具体路径:com / example / springboot / common / Result.java
后面会大量使用自定义的返回结果,所以这个不可少
Result.java
/**
* 这段是我个人包的路径,如果不一样,则要改成你自己的
*/
package com.example.springboot.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
/**
* 功能:接口统一返回包装类
*/
public class Result {
public static final String CODE_SUCCESS = "200";
public static final String CODE_AUTH_ERROR = "401";
public static final String CODE_SYS_ERROR = "500";
private String code;
private String msg;
private Object data;
public static Result success() {
return Result.builder().code(CODE_SUCCESS).msg("请求成功").build();
}
public static Result success(Object data) {
return new Result(CODE_SUCCESS, "请求成功", data);
}
public static Result error(String msg) {
return new Result(CODE_SYS_ERROR, msg, null);
}
public static Result error(String code, String msg) {
return new Result(code, msg, null);
}
public static Result error() {
return new Result(CODE_SYS_ERROR, "系统错误", null);
}
}
6、在数据库建立用户表
在 navicat 里面创建数据库 permissions
数据库名:permissions
字符集:utf8mb4
排序规则:utf8mb4_unicode_ci
新建user表:
直接在数据库里面点击查询、新建查询,然后执行语句就行
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
`phone` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '电话',
`email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
`address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址',
`avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
添加 username 为唯一索引:点击表然后右键、设计表、索引
7、创建实体类(User.java)
在 com / example / springboot 下创建 entity 包
再在 entity 下创建 User.java
User.java
package com.example.springboot.entity;
import lombok.Data;
@Data
public class User {
private Integer id;
private String username;
private String password;
private String name;
private String email;
private String phone;
private String address;
private String avatar;
}
8、创建映射器( UserMappe.java)
在 com / example / springboot 下创建 mapper 文件包
然后新建 UserMapper 文件
以此类推:
在 com / example / springboot 下创建 service 包 然后在 service
下创建UserService.java 文件
在 com / example / springboot 下创建 controller 包 然后在 service
下创建UserController.java 文件
9、添加信息(增)
插入数据
UserMapper
package com.example.springboot.mapper;
import com.example.springboot.entity.User;
import org.apache.ibatis.annotations.*;
public interface UserMapper {
// 用户新增
@Insert("insert into `user` (username, password, name, phone, email, address, avatar) " +
"values (#{username}, #{password}, #{name}, #{phone}, #{email}, #{address}, #{avatar})")
void insert(User user);
}
UserService.java
结合上捕获异常
@Autowired
UserMapper userMapper;
public Result insertUser(User user) {
try {
userMapper.insert(user);
} catch (Exception e) {
if (e instanceof DuplicateKeyException) {
return Result.error("插入数据库错误");
} else {
return Result.error("系统错误");
}
}
return Result.success();
}
UserController.java
写控制层(接口)
package com.example.springboot.controller;
import com.example.springboot.common.Result;
import com.example.springboot.entity.User;
import com.example.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
public class UserController {
@Autowired
UserService userService;
/**
* 新增用户信息
*/
@PostMapping("/add")
public Result add(@RequestBody User user) {
userService.insertUser(user);
return Result.success();
}
}
10、修改信息(改)
根据id修改
UserMapper
在 “增” 的基础上添加以下代码
@Update("update `user` set username = #{username}, password = #{password}, name= #{name}, phone = #{phone}, " +
"email = #{email}, address = #{address}, avatar = #{avatar} where id = #{id}")
void updateUser(User user);
UserService
public void updateUser(User user) {
userMapper.updateUser(user);
}
UserController
/**
* 修改用户信息
*/
@PutMapping("/update")
public Result update(@RequestBody User user) {
userService.updateUser(user);
return Result.success();
}
11、删除信息
- 单个删除
UserMapper
// 单个的删除用户
@Delete("delete from `user` where id = #{id}")
void deleteUser(Integer id);
UserService
// 单个删除
public void deleteUser(Integer id) {
userMapper.deleteUser(id);
}
UserController
/**
* 删除用户信息
*/
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
userService.deleteUser(id);
return Result.success();
}
- 批量删除
UserService
先导入包
然后写
// 批量删除
public void batchDeleteUser(List<Integer> ids) {
for (Integer id : ids) {
userMapper.deleteUser(id); // 7 - 8
}
}
UserController
/**
* 批量删除用户信息
*/
@DeleteMapping("/delete/batch")
public Result batchDelete(@RequestBody List<Integer> ids) {
userService.batchDeleteUser(ids);
return Result.success();
}
12、查询信息(查)
- 简单的全部查询
UserMapper
@Select("select * from `user` order by id desc")
List<User> selectAll();
UserService
public List<User> selectAll() {
return userMapper.selectAll();
}
UserController
/**
* 查询全部用户信息
*/
@GetMapping("/selectAll")
public Result selectAll() {
List<User> userList = userService.selectAll();
return Result.success(userList);
}
- 单个的条件查询
按照条件的单条查询(此处以id查询为例) 想要按照什么查询可以参考这个,把 id 改为其他就好;
注意:这个只能返回一条,也就是查询的是唯一的,比如 id 是唯一的就可以查询,如果是 name
就有多个数据,这个时候会报错,解决方法就是不设置返回一个数据,而是一个 list 对象 极力推荐使用返回一个对象的代码
UserMapper
// 跟据id查询单个用户信息(区别:返回一个数据,查到多个就报错)
@Select("select * from `user` where id = #{id} order by id desc")
User selectById(Integer id);
// 根据name查询多个用户信息(区别于:返回的是List对象)
@Select("select * from `user` where name = #{name} order by id desc")
List<User> selectByName(String name);
UserService
// 跟据id查询单个用户信息(区别:返回一个数据,查到多个就报错)
public User selectById(Integer id) {
return userMapper.selectById(id);
}
// 根据name查询多个用户信息(区别于:返回的是List对象)
public List<User> selectByName(String name) {
return userMapper.selectByName(name);
}
UserController
/**
* 根据ID查询单个用户信息
* 跟据id查询单个用户信息(区别:返回一个数据,查到多个就报错)
*/
@GetMapping("/selectById/{id}")
public Result selectById(@PathVariable Integer id) {
User user = userService.selectById(id);
return Result.success(user);
}
/**
* 根据name查询多个用户信息(区别于:返回的是List对象)
*/
@GetMapping("/selectByName/{name}")
public Result selectByName(@PathVariable String name) {
List<User> userList = userService.selectByName(name); // 不知道多少条数据就返回一个List对象
return Result.success(userList);
}
- 多个的条件查询
UserMapper
// 多条件查询用户信息(区别:可同时跟据 username、name 查询),下面参数加上@Param()注解
@Select("select * from `user` where username = #{username} and name = #{name} order by id desc")
List<User> selectByMore(@Param("username") String username, @Param("name") String name);
UserService
// 多条件查询用户信息(区别:可同时跟据 username、name 查询)
public List<User> selectByMore(String username, String name) {
return userMapper.selectByMore(username, name);
}
UserController
/**
* 多条件查询用户信息(区别:可同时跟据 username、name 查询)
*/
@GetMapping("/selectByMore")
public Result selectByMore(@RequestParam String username, @RequestParam String name) {
List<User> userList = userService.selectByMore(username, name); // 不知道多少条数据就返回一个List对象
return Result.success(userList);
}
- 简单模糊查询
UserMapper
下面sql语句使用 and 就是需要同时满足两个条件才能查询出来,如果是 or 的话就是要满足其中一个就好
// 多条件模糊查询用户信息
@Select("select * from `user` where username like concat('%', #{username}, '%') and name like concat('%', #{name}, '%') order by id desc")
List<User> selectByObscure(String username, String name);
UserService
// 多条件模糊查询
public List<User> selectByObscure(String username, String name) {
return userMapper.selectByObscure(username, name);
}
UserController
/**
* 多条件模糊查询
*/
@GetMapping("/selectByMore")
public Result selectByObscure(@RequestParam String username, @RequestParam String name) {
List<User> userList = userService.selectByObscure(username, name); // 不知道多少条数据就返回一个List对象
return Result.success(userList);
}
- 分页多条件模糊查询
在 common 下创建 Page.java 文件
Page
package com.example.springboot.common;
import lombok.Data;
import java.util.List;
@Data
public class Page<T> {
private Integer total;
private List<T> list;
}
UserMapper
// 多条件模糊查询
@Select("select * from `user` where username like concat('%', #{username}, '%') and name like concat('%', #{name}, '%') order by id desc limit #{skipNum}, #{pageSize}")
List<User> selectByPage(@Param("skipNum") Integer skipNum, @Param("pageSize")Integer pageSize, @Param("username") String username, @Param("name") String name);
// 与多条件模糊查询一起的 sql 跟据条件统计总数:selectCountByPage
@Select("select count(id) from `user` where username like concat('%', #{username}, '%') and name like concat('%', #{name}, '%') order by id desc")
int selectCountByPage(@Param("username") String username, @Param("name") String name);
UserService
// 多条件模糊查询
public Page<User> selectByPage(Integer pageNum, Integer pageSize, String username, String name) {
Integer skipNum = (pageNum - 1) * pageSize;
Page<User> page = new Page<>();
List<User> userList = userMapper.selectByPage(skipNum, pageSize, username, name);
Integer total = userMapper.selectCountByPage(username, name);
page.setTotal(total);
page.setList(userList);
return page;
}
UserController
/**
* 多条件模糊查询
* pageNum:当前页码
* pageSize:每页查询的个数
*/
@GetMapping("/selectByPage")
public Result selectByPage(@RequestParam Integer pageNum,
@RequestParam Integer pageSize,
@RequestParam String username,
@RequestParam String name) {
Page<User> page = userService.selectByPage(pageNum, pageSize, username, name);
return Result.success(page);
}
到这里就结束了,这个只是给初学者了解的,这种 增删改查部分内容 在 MyBatis-Plus 里都不用写,UserMapper继承BaseMapper就行