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参数可自行修改