后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

1 前言&概述

这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug。

本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到的技术包括JacksonOkHttpbouncycastleSpring Data JPA

2 环境

  • Android 4.1.2
  • IDEA 2020.3.1
  • Spring Boot 2.4.2
  • MySQL 8.0.23
  • OpenJDK 11

环境准备就略过了。

3 后端

3.1 新建项目

在这里插入图片描述

依赖:

在这里插入图片描述

3.2 项目结构

在这里插入图片描述

3.3 实体类

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;
    private String password;
}

基本的Lombok注解+JPA中的两个注解:

  • @Id:标识主键
  • @GeneratedValue:主键生成策略,包括四个

主键生成策略如下:

  • GenerationType.TABLE:使用一个特定的数据库表格来保存主键,不依赖外部环境和数据库的具体实现,但是不能充分利用数据库特性,一般不会优先使用,且一般配合@TableGenerator使用
  • GenerationType.SEQUENCE:一些数据库不支持主键自增(如Oracle),这时就可以使用SEQUENCE,只有部分(Oracle/DB2/PostgreSQL)支持序列对象,一般不用于其他数据库
  • GenerationType.IDENTITY:一般意义上的主键自增长,插入数据时自动给主键复制,比如MySQL中的auto_increment
  • GenerationType.AUTO:主键生成策略交给持久化引擎,持久化引擎会根据数据库在以上三种主键策略中选择其中一种,这是JPA默认的主键生成策略

3.4 持久层

继承CrudRepository<T,ID>T为实体类,ID为主键类型:

@Repository
public interface UserRepository extends CrudRepository<User,Integer> {
   
    boolean existsByName(String name);
    User findByNameAndPassword(String name,String password);
}

一个需要注意的点是CrudRepository<T,ID>继承了Repository<T,ID>,而后者有一个叫查询方法的特性,就是说能根据一些方法中指定的关键字去生成对应的SQL,比如第一个方法existsByName,就根据name判断用户是否存在,参数为一个String name,返回boolean,具体的关键字以及例子参考如下:

在这里插入图片描述

3.5 业务层

@Transactional
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserService {
   
    private final UserRepository repository;

    public boolean exists(User user){
   
        return repository.existsByName(user.getName());
    }

    public User findByNameAndPassword(User user){
   
        return repository.findByNameAndPassword(user.getName(),user.getPassword());
    }

    public boolean insert(User user){
   
        repository.save(user);
        return true;
    }

    public boolean update(User user){
   
        if(repository.findById(user.getId()).isEmpty()){
   
            return false;
        }
        repository.save(user);
        return true;
    }

    public boolean deleteById(int id){
   
        if(!repository.existsById(id)){
   
            return false;
        }
        repository.deleteById(id);
        return true;
    }
}

注解解释如下:

  • @Transactional
  • @Service:标识为业务层,实际效果等价于@Component
  • @RequiredArgsConstructorLombok中的一个注解,主要是为了解决如下的警告:

在这里插入图片描述

其他一些根据方法名就知道含义的方法就不解释了。

3.6 控制层

@RestController
@RequestMapping("/")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserController {
   
    private final UserService service;

    @PostMapping("sign/in/up")
    public ResponseBody signInUp(@Reque
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值