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更简洁:
# 应用服务 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实体类:
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,这样,既方便又简洁:
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语句
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中:
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();
}
}
新增用户
@PostMapping("/add")
public Integer add(@RequestBody User user){
return userMapper.addUser(user);
}
@Insert("insert into user (username,nickname,department,adress) values (#{username},#{nickname},#{department},#{adress})")
Integer addUser(User user);
postman测试下:
数据库刷新,新增成功:
删除用户
@DeleteMapping("/{id}")
public Integer delete(@PathVariable Integer id){
return userMapper.deleteUser(id);
}
@Delete("delete from user where id=#{id}")
Integer deleteUser(Integer id);
postman测试下:
可以看出,id为5的用户已被删除:
修改用户
@PutMapping("/edit")
public Integer edit(@RequestBody User user){
return userMapper.editUser(user);
}
@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文件
<?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扫描到,需要配置文件中进行配置
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}")
去掉并改为:
<?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>
再测试一下,发现数据没被空值替换掉:
分页查询
@GetMapping
public List<User> list(@RequestParam Integer PageNum,
@RequestParam Integer PageSize){
PageNum = (PageNum-1)*PageSize;
return userMapper.getList(PageNum,PageSize);
}
@Select("SELECT * FROM user limit #{PageNum},#{PageSize}")
List<User> getList(@Param("PageNum") Integer PageNum,@Param("PageSize") Integer PageSize);
postman测试一下:
分页查询数据并返回总数
@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;
}
@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测试一下:
转载自:https://juejin.cn/post/7354406980784635942