SpringBoot+MyBatis-Plus实现CRUD

目录

1.创建SpringBoot项目

2.配置MySQL数据库

3.集成MyBatis-Plus

4.SpringBoot三层架构

编写 Entity层

编写 Mapper层

编写 Service层

编写 Controller 层

5.编写增删改查接口

1). 在Service接口内编写方法

2).方法实现

保存修改

删除修改

查询修改

6.编写Controlelr层

1)、增加 修改

2)、删除 批量删除

3)、查询,分页查询

7.Postman测试APi接口

1)、新增

2)、修改

3)、单个删除

4)、批量删除

5)、分页查询

6)、模糊查询

8.SpringBoot项目解决跨域问题

添加注解

配置文件

问题总结

栈溢出

值转换

分页失效


1.创建SpringBoot项目

新建SpringBoot项目

创建完成后,启动 SpringBoot 项目

出现如图所示,代表SpringBoot项目创建成功

2.配置MySQL数据库

  • 创建数据库 springboot_vue

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '用户名称',
  `password` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '用户密码',
  `email` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '用户邮箱',
  `city` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '所在城市',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
  • 添加测试数据

INSERT INTO `user` VALUES (1, 'Un1', '123456', '123456@qq.com', '上海');
INSERT INTO `user` VALUES (2, 'Un2', '123456', '123456@qq.com', '上海');
INSERT INTO `user` VALUES (3, 'Un3', '123456', '123456@qq.com', '上海');
INSERT INTO `user` VALUES (4, 'Un4', '123456', '123456@qq.com', '北京');
INSERT INTO `user` VALUES (5, 'Un5', '123456', '123456@qq.com', '北京');
INSERT INTO `user` VALUES (6, 'Un6', '123456', '123456@qq.com', '北京');
INSERT INTO `user` VALUES (7, 'Un7', '123456', '123456@qq.com', '深圳');
INSERT INTO `user` VALUES (8, 'Un8', '123456', '123456@qq.com', '深圳');
INSERT INTO `user` VALUES (9, 'Un9', '123456', '123456@qq.com', '深圳');
INSERT INTO `user` VALUES (10, 'Un10', '123456', '123456@qq.com', '杭州');
INSERT INTO `user` VALUES (11, 'Un11', '123456', '123456@qq.com', '杭州');
INSERT INTO `user` VALUES (12, 'Un12', '123456', '123456@qq.com', '杭州');
INSERT INTO `user` VALUES (13, 'Un13', '123456', '123456@qq.com', '广州');
INSERT INTO `user` VALUES (14, 'Un14', '123456', '123456@qq.com', '广州');
INSERT INTO `user` VALUES (15, 'Un15', '123456', '123456@qq.com', '广州');

  • 在SpringBoot中配置数据库

(1.)修改文件名

(2.)添加数据库配置信息

修改用户名,密码,数据库名称

3.集成MyBatis-Plus

1.导入Mybatis-Plus依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
</dependency>

2.添加一个mybatis-plus的config配置防止全表删除更新

从官网找到对应代码段,添加到项目中

4.SpringBoot三层架构

  1. Entity数据库实体层:数据库实体层是指与数据库中的表一一对应的Java类,它们定义了表中的字段、数据类型、关系等信息。这一层的主要工作是完成Java对象与数据库表之间的映射关系,以及提供对数据库的基本9操作方法。

  2. Mapper数据持久层:数据持久层是指负责与数据库进行交互的代码,它们主要负责将Java对象转换为数据库中的数据,并将数据库中的数据转换为Java对象。这一层的主要工作是完成数据库的增删改查操作,以及与数据库的连接和事务管理等工作。

  3. Service数据库服务层:数据库服务层是指为控制器层提供数据服务的代码,它们主要负责处理控制器层传递过来的请求,并根据请求的类型调用数据持久层完成相应的操作。这一层的主要工作是将数据持久层的操作封装成服务,以便控制器层进行调用。

  4. Controller控制器层:控制器层是指负责处理用户请求的代码,它们主要负责接收用户的请求,并根据请求的类型调用数据库服务层完成相应的操作。这一层的主要工作是将用户请求转换为数据库服务层的调用,并将数据库服务层的结果返回给用户。

构建三层架构项目结构

编写 Entity层

根据数据库中表字段名来创建实体类

package com.example.entity;
​
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
​
@Data
public class User {
    /**
     * 用户id
     */
    private Integer id;
    /**
     * 用户名称
     */
    private String username;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 所在城市
     */
    private String city;
    /**
     *  用户邮箱
     */
    private String email;
​
}

编写 Mapper层

编写 mapper层,要继承mybatis-plus的类BaseMapper<T> 传入创建的实体类 User

package com.example.mapper;
​
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

编写 Service层

先创建接口,在创建实现类

创建接口 继承 mybatis-plus的 IService<T> 传入创建的实体类 User

package com.example.service;
​
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;
​
public interface IUserService extends IService<User> {
}
​

编写实现类 继承mybatis-plus的ServiceImpl<T> 传入创建的接口和实体类 实现 创建的Service接口

package com.example.service.impl;
​
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.IUserService;
​
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
​

编写 Controller 层

TestController

package com.example.controller;
​
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
​
import java.util.List;
​
@RestController
public class TestController {
    @Autowired
    private UserMapper userMapper;
​
    @GetMapping("/test")
    public List<User> list(){
        return userMapper.selectList(null);
    }
}
​

直接使用Mybatis-Plus里面的selectList方法,返回一个List<User>集合 测试项目结构

出现数据库数据,代表结构正确

5.编写增删改查接口

1). 在Service接口内编写方法

  • 查询中 单条查询、分页查询、模糊查询合并

Page<User> page(Integer current,Integer size,String username);

  • 新增和修改所传入的参数都为User实体类 所以可以合并成一个 saveOrUpdateById方法

boolean saveOrUpdateById(User user);

  • 删除和批量删除

boolean deleteBatchIds(List<Integer> Ids);

package com.example.service;
​
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;
​
import java.util.List;
​
public interface IUserService extends IService<User> {
    Page<User> page(Integer current,Integer size,String username);
​
    boolean saveOrUpdateById(User user);
​
    boolean deleteBatchIds(List<Integer> Ids);
}

2).方法实现

通过IDEA快捷方式,实现方法

保存修改

思路分析:保存和修改的不同之处只在于传入的实体类的 id是否为空,当传入的参数为空时为保存操作不为 空时,执行修改操作

@Override
    public boolean saveOrUpdateById(User user) {
        if (user.getId() != null){
            return updateById(user);
        }else{
            return save(user);
        }
    }

删除修改

思路分析:直接删除执行操作

@Override
    public boolean deleteBatchIds(List<Integer> Ids) {
        return deleteBatchIds(Ids);
    }

查询修改

思路分析:通过链式查询

获取数据方法,page()分页 list()列表

@Override
    public Page<User> page(Integer current, Integer size, String username) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        if(!"".equals(username)){
            wrapper.like(User::getUsername,username);
        }
​
        Page<User> page = page(new Page<>(
                current,
                size
        ),
                wrapper
        );
        return page;
    }

6.编写Controlelr层

1)、增加 修改


@PostMapping("/save")
    public boolean save(@RequestBody User user){
        return userService.saveOrUpdateById(user);
    }

2)、删除 批量删除


@PostMapping("/delete")
    public boolean delete(@RequestBody List<Integer> ids){
        return userService.deleteBatchIds(ids);
    }

3)、查询,分页查询


 @GetMapping("/page")
    public Page<User> page(
            @RequestParam("username") String username,
         //   @RequestParam(defaultValue = "") String username,
            @RequestParam(defaultValue = "1") Integer current,
            @RequestParam(defaultValue = "15") Integer size
    ){
        return userService.page(current,size,username);
    }

7.Postman测试APi接口

1)、新增

2)、修改

3)、单个删除

4)、批量删除

先通过新增,添加批量删除测试数据

5)、分页查询

6)、模糊查询

8.SpringBoot项目解决跨域问题

添加注解

在Controller层添加CrossOrigin注解

配置文件

在Config目录下添加CorsConfig配置类

package com.example.config;//package com.example.config;
​
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
​
@Configuration
public class CorsConfig {
​
    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;
​
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

问题总结

栈溢出

  1. 这个错误表示在处理请求时,出现了一个递归调用的无限循环,导致栈溢出。

在impl中的方法实现类内,定义方法时,如果方法名和内部使用的方法名相同时,会出现递归调用,

修改方法:修改两方法名中的一个

值转换

  1. 当分页查询时,因为usernam没有赋默认值,状态码会 400

修改方法:给username赋一个初始值

分页失效

  1. 当使用 MyBatis-Plus 来实现分页查询时,要安装分页插件

可见分页无效,通过MyBatis-Plus文档可知,分页查询要配置分页插件

解决方法:在config目录下的MyBatisPlusConfig配置类中配置

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 首先在pom.xml文件中添加mysql驱动依赖: ``` <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 在application.properties文件中配置mysql数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/数据库名 spring.datasource.username=用户名 spring.datasource.password=密码 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 在启动中添加注解@EnableJpaRepositories和@EntityScan,用于扫描实体和JPA接口: ``` @SpringBootApplication @EnableJpaRepositories(basePackages = "com.example.demo.repository") @EntityScan(basePackages = "com.example.demo.entity") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 4. 在实体中添加注解@Entity和@Id,用于映射数据库表和主键: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; // 省略getter和setter方法 } ``` 5. 在JPA接口中继承JpaRepository,用于实现基本的CRUD操作: ``` @Repository public interface UserRepository extends JpaRepository<User, Long> { } ``` 6. 在Service中注入UserRepository,用于调用JPA接口中的方法: ``` @Service public class UserService { @Autowired private UserRepository userRepository; // 省略其他方法 } ``` 以上就是使用Spring Boot配置MySQL数据库的基本步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值