springBoot学习(二):初学JPA
依旧跟着大佬学习JPA,在这里记下过程。
JPA主要做的事情是简化数据库操作,至少现在为止,我觉得还是挺方便简单明了的。在原本代码的基础下,更改UserController、User、UserRepository,删除UserRepositoryImpl
如何使用JPA
1、创建实体类
将User改成实体类,每一个User实例相当于数据库表格的一行。这个User类是最简单的那种,只包含了几个属性以及各个属性必须的getter和setter方法,其中id是自增的主键,不包含各种映射关系。
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity //实体 public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长策略 private Long id;//唯一标识 private String name; private Integer age; protected User() {//无参默认构造器 } public User(Long id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age='" + age + '\'' + '}'; } }
2、修改资源库
import com.example.demo.domain.User; import org.springframework.data.repository.CrudRepository; import java.util.List; public interface UserRepository extends CrudRepository<User , Long> { }
同时删除原本的UserRepositoryImpl 类
在不考虑复杂的数据处理的情况下,从CrudRepository继承的方法已经足够使用
3、修改controller
import com.example.demo.domain.User; import com.example.demo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.Optional; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserRepository userRepository; //查词所有用户 @GetMapping("/userlist") public ModelAndView userList(Model model){ model.addAttribute("userList",userRepository.findAll()); model.addAttribute("title","用户管理"); return new ModelAndView("user/list","userModel",model); } //根据id 查询用户 @GetMapping("{id}") public ModelAndView view(@PathVariable("id") Long id, Model model){ Optional<User> user= userRepository.findById(id); model.addAttribute("user",user.get()); model.addAttribute("title","查看用户"); return new ModelAndView("user/view" ,"userModel",model); } //获取创建表单页面 @GetMapping("/form") public ModelAndView createForm(Model model){ model.addAttribute("user",new User(null,null,null)); model.addAttribute("title","创建用户"); return new ModelAndView("user/form","userModel",model); } //保存用户 @PostMapping public ModelAndView saveOrUpdateUser(User user){ user =userRepository.save(user); return new ModelAndView("redirect:/user/userlist"); } //根据id删除用户 @GetMapping(value = "delete/{id}") public ModelAndView delete(@PathVariable("id") Long id){ userRepository.deleteById(id); return new ModelAndView("redirect:/user/userlist"); } //修改用户界面 @GetMapping(value = "edit/{id}") public ModelAndView editForm(@PathVariable("id") Long id,Model model){ Optional<User> user =userRepository.findById(id); model.addAttribute("user",user); model.addAttribute("title","编辑用户"); return new ModelAndView("user/form" ,"userModel",model); } }
4、使用MySQL 数据库
首先,创建名为test的数据库,编码为UTF-8 ,修改application.properties文件,增加数据库连接
# DataSource spring.datasource.url=jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8 #注意不是spring.datasource.data-username #注意不是spring.datasource.data-password spring.datasource.username=test spring.datasource.password=test spring.datasource.driver-class-name=com.mysql.jdbc.Driver # JPA spring.jpa.show-sql = true #每次应用启动,都会主动删除井创建数据库表 #spring.jpa.hibernate.ddl-auto=create-drop
其中spring.datasource.driver-class-name根据你当前mysql版本会有所不同。 5.7 以上的 mysql 要注意在url中增加 useSSL=false&serverTimezone=UTC选项
启动项目
可以发现, Hibernate 会自动在test数据库中创建表user。
通过浏览器访问http://localhost:8080/useruserlist可以看到项目的运行效果
当你深入了解,你就会发现世界如此广袤,而你对世界的了解则是如此浅薄,请永远保持谦卑的态度。