2.9 controller直接使用repository

一.controller类直接使用一个repository类
repository只管数据库的增删查改的操作,而且一个repository接口对应一个数据库表。
下面是controller直接只用repository的一个例子:
package com.example.controller;
import com.example.demo.User;
import com.example.repos.UserRepository;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController 
public class GreetingController{
    private final UserRepository userRepository;
    public GreetingController(UserRepository userRepository){
        this.userRepository=userRepository;
    }
    @CrossOrigin 
    @GetMapping("/index")
    public String index(String username){
        User user=this.userRepository.findByUsername(username);
        return user.getNickname();
    }
}
这里要注意的是,userRepository被定义为一个私有属性,然后是GreetingController类的一个构造函数初始化了这userRepository,这是SpringBoot的一个机制:
自动注入实现类
UserRepository只是一个接口,我们并不需要编写它的实现,但按照上面的做法,就可以直接使用此接口。
测试的时候,使用这样的请求:localhost:8081/index?username=2423080338
username自行修改

二.涉及多个表的请求
这是一个新用户在codessp注册的行为,需要在User表以及UserClass表都新增一条记录。
package com.example.controller;
import com.example.demo.User;
import com.example.demo.UserClass;
import com.example.repos.UserClassRepository;
import com.example.repos.UserRepository;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController 
public class GreetingController{
    private final UserRepository userRepository;
    private final UserClassRepository userClassRepository;
    public GreetingController(UserRepository userRepository,UserClassRepository userClassRepository){
        this.userRepository=userRepository;
        this.userClassRepository=userClassRepository;
    }
    @CrossOrigin 
    @GetMapping("/index")
    public String index()throws IOException{
        User user=this.userRepository.findByUsername("abcd");
        return user.getNickname();
    }
    @GetMapping("/register")
    public String register(String username,String password,String nickname){
        //新增用户
        User user=new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setNickname(nickname);
        user.setIsValid("1");
        user.setRole("0");
        user.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        this.userRepository.save(user);
        //给用户分配班级
        UserClass userClass=new UserClass();
        userClass.setUsername(username);
        userClass.setClassId(65);
        userClass.setDatetime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        this.userClassRepository.save(userClass);
        return "注册成功";
    }
}

UserClass.java如下:
package com.example.demo;
import javax.persistence.*;
@Entity@Table(name="user_class")
public class UserClass{
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id",nullable=false)
    private Integer id;
    @Column(name="username",nullable=false)
    private String username;
    @Column(name="class_id",nullable=false)
    private Integer classId;
    @Column(name="datetime",length=19)
    private String datetime;
    public Integer getId(){
        return id;
    }
    public void setId(Integer id){
        this.id=id;
    }
    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username=username;
    }
    public Integer getClassId(){
        return this.classId;
    }
    public void setClassId(Integer classField){
        this.classId=classField;
    }
    public String getDatetime(){
        return datetime;
    }
    public void setDatetime(String datetime){
        this.datetime=datetime;
    }
}
UserClassRepository.java,里面什么都不需要写
package com.example.repos;
import com.example.demo.UserClass;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository 
public interface UserClassRepository extends CrudRepository<UserClass,String{
}

测试的时候,可按照这样格式发起请求:localhost:8081/register?username=dddddd&password=223&nickname=John
username、password、nickname参数可自行修改