SpringBoot之初始化项目,并实现增删改查,分页

初始化springboot项目

新建项目

创建项目名称,这里输入框随便填就行,注意选中java版本,这里选中java8,直接下一步

这里选择包,为了方便后面开发,我们这里选择 Lombok, Spring Web,MySQL Driver,MyBatis Framework,然后我们直接点完成,编辑器就会为我们自动创建项目并安装包。

完成后的项目目录:

此时,我们直接启动会报错,因为我们选择了mysql,所以我们需要在application.properties中配置下mysql数据库信息(mysql需要自己下载,这里就不演示了) 不好意思,账号这里写错了,name应改为username,下面yml文件会改过来。

我们再次启动,成功!

我们再测试下,写个hello word的Controller:

postman测试下:

mysql创建user表

我这里使用的是MySQL Workbench

随便创建几条数据:

Springboot集成MyBatis 查询数据库数据

将application.properties改为application.yml

yml文件阅读起来比properties更简洁:

application.yml 复制代码
# 应用服务 WEB 访问端口
server:
  port: 8080


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/my_db_01?serverTimezone=GMT%2B8
    username: root
    password: admin123

创建User实体类

我们可以使用 ALT + INSERT 快速为类创建getter与setter

User实体类:

java 复制代码
package com.dengpeng.demo.entity;

public class User {
    private Number id;
    private String username;
    private String nickname;
    private String department;
    private String adress;

    public Number getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public String getAdress() {
        return adress;
    }

    public void setAdress(String adress) {
        this.adress = adress;
    }
}

我们可以使用Lombok的 @Data 注释,省略User的getter与setter,这样,既方便又简洁:

User.java 复制代码
package com.dengpeng.demo.entity;

import lombok.Data;

@Data
public class User {
    private Number id;
    private String username;
    private String nickname;
    private String department;
    private String adress;
}

创建 UserMapper执行sql语句

UserMapper.java 复制代码
package com.dengpeng.demo.mapper;

import com.dengpeng.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;

@Mapper
public interface UserMapper {
    @Select("select * from user")
    List<User> findAll();
}

测试获取数据库user表中的所有用户

这里我们暂时不新建Controller,直接在启动类中测试下

我们使用postman测试下接口:

Springboot实现增删改查

新建Controller包,并新建UserController.java文件,将放在启动类的Controller放在UserController中:

UserController.java 复制代码
import com.dengpeng.demo.entity.User;
import com.dengpeng.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping
    public List<User> list(){
        return userMapper.findAll();
    }
}

新增用户

UserController.java 复制代码
@PostMapping("/add")
public Integer add(@RequestBody User user){
   return  userMapper.addUser(user);
}
UserMapper.java 复制代码
@Insert("insert into user (username,nickname,department,adress) values (#{username},#{nickname},#{department},#{adress})")
Integer addUser(User user);

postman测试下:

数据库刷新,新增成功:

删除用户

UserController.java 复制代码
@DeleteMapping("/{id}")
public Integer delete(@PathVariable Integer id){
    return userMapper.deleteUser(id);
}
UserMapper.java 复制代码
@Delete("delete from user where id=#{id}")
Integer deleteUser(Integer id);

postman测试下:

可以看出,id为5的用户已被删除:

修改用户

UserController.java 复制代码
@PutMapping("/edit")
public Integer edit(@RequestBody User user){
    return userMapper.editUser(user);
}
UserMapper.java 复制代码
@Update("update user set username=#{username},nickname=#{nickname},department=#{department},adress=#{adress} where id=#{id}")
Integer editUser(User user);

postman测试下:

接口没问题,但是把部门和地址清空了,大多数的时候,传空值时,我们只想修改有值的部分,所以这里需要动态的SQL:

mybatis的xml文件格式

mybatis的xml文件格式,用来写sql语句,需要在相同的目录结构下写xml文件

User.xml 复制代码
<?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接口的位置-->
<mapper namespace="com.dengpeng.demo.mapper.UserMapper">
<!--sql语句代码-->


</mapper>

先要xml文件能够被SpringBoot扫描到,需要配置文件中进行配置

yaml 复制代码
mybatis:
#能够是自己写的xml文件被SpringBoot扫描到
  mapper-locations: classpath:mapper/*.xml
  #打开mybatis的日志功能
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    

安装愤怒的小鸟

点这个小鸟,可以快速跳转到对应的Mapper:

注意,id要和UserMapper中的方法对相应。 这样,我们可以将 @Update("update user set username=#{username},nickname=#{nickname},department=#{department},adress=#{adress} where id=#{id}")

去掉并改为:

User.xml 复制代码
<?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接口的位置-->
<mapper namespace="com.dengpeng.demo.mapper.UserMapper">
    <!--sql语句代码-->
    <update id="editUser" >
        update user
        <set>
            <if test="username != null">
                username=#{username}
            </if>
            <if test="nickname != null">
                nickname=#{nickname}
            </if>
            <if test="department != null">
                department=#{department}
            </if>
            <if test="adress != null">
                adress=#{adress}
            </if>
        </set>
        <where>
            id=#{id}
        </where>
    </update>
</mapper>

再测试一下,发现数据没被空值替换掉:

分页查询

UserController.java 复制代码
@GetMapping
public List<User> list(@RequestParam Integer PageNum,
                       @RequestParam Integer PageSize){
    PageNum = (PageNum-1)*PageSize;
    return userMapper.getList(PageNum,PageSize);
}
UserMapper.java 复制代码
@Select("SELECT * FROM user limit #{PageNum},#{PageSize}")
List<User> getList(@Param("PageNum") Integer PageNum,@Param("PageSize") Integer PageSize);

postman测试一下:

分页查询数据并返回总数

UserController.java 复制代码
@GetMapping
public Map<String,Object> list(@RequestParam Integer PageNum,
                @RequestParam Integer PageSize){
    PageNum = (PageNum-1)*PageSize;
    Map<String,Object> res = new HashMap<>();
    List<User> data = userMapper.getList(PageNum,PageSize);
    Integer total = userMapper.getTotal();
    res.put("data",data);
    res.put("total",total);
    return  res;
}
UserMapper.java 复制代码
@Select("SELECT * FROM user limit #{PageNum},#{PageSize}")
List<User> getList(@Param("PageNum") Integer PageNum,@Param("PageSize") Integer PageSize);

@Select("SELECT count(*) FROM user")
Integer getTotal();

postman测试一下:

相关推荐
红烧柯基1 小时前
解决redis序列号和反序列化问题
java·数据库·redis
KAI_KD2 小时前
自定义JackSon配置
java
运维@小兵3 小时前
SpringBoot获取用户信息常见问题(密码屏蔽、驼峰命名和下划线命名的自动转换)
java·spring boot·后端
新时代苦力工3 小时前
Java实现使用EasyExcel按模板导出文件
java
小陈093 小时前
Java后端图形验证码的使用
java·开发语言·状态模式
27669582923 小时前
得物 小程序 6宫格 分析
java·python·小程序·得物·得物小程序·得物六宫格·六宫格验证码
知了一笑3 小时前
通过IP计算分析归属地
java·ip·ip定位·ip计算
沃野_juededa3 小时前
uniapp自定义选项卡
java·前端·javascript
问道飞鱼4 小时前
【springboot知识】配置方式实现SpringCloudGateway相关功能
java·spring boot·后端·gateway
樽酒ﻬق4 小时前
打造美观 API 文档:Spring Boot + Swagger 实战指南
java·spring boot·后端