依旧跟着大佬学习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 + '\'' +
'}';
}
}

User

2、修改资源库

import com.example.demo.domain.User;
import org.springframework.data.repository.CrudRepository; import java.util.List; public interface UserRepository extends CrudRepository<User , Long> { }

UserRepository

同时删除原本的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);
}
}

UserController

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可以看到项目的运行效果

springBoot学习(二):初学JPA的更多相关文章

  1. SpringBoot学习(二)-->Spring的Java配置方式

    二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...

  2. SpringBoot学习<二>——SpringBoot的默认配置文件application和多环境配置

    一.SpringBoot的默认文件appliction 上一篇文章已经说明,springboot启动会内嵌tomcat,端口也是默认的8080,如果我们想要改变端口如果做呢? 在springboot项 ...

  3. SpringBoot学习(二):配置文件

    1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoo ...

  4. springboot学习二:配置文件配置

    springboot默认读取application*.properties #######spring配置####### spring.profiles.active=dev //引入开发配置文件 a ...

  5. SpringBoot学习(二)

    spring-boot-starter-parent Maven的用户可以通过继承spring-boot-starter-parent项目来获得一些合理的默认配置.这个parent提供了以下特性: 默 ...

  6. springboot学习(二十二)_ 使用@Constraint注解自定义验证注解

    最近项目在使用如@NotNull @Max 等配合@vaild 注解进行验证传过来的参数校验,然后通过统一异常处理,直接返回给前端,不用在业务代码中对这些参数进行校验.但是官方提供的并不能全部满足项目 ...

  7. springboot 学习笔记(二)

    springboot 学习笔记(二) 快速创建一个springboot工程,并引入所需要的依赖 1.利用Spring initializr 来创建一个springboot项目,登陆http://sta ...

  8. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  9. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  10. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

随机推荐

  1. AJAX with JSP and Servlet(代码)

    欢迎任何形式的转载,但请务必注明出处. 本章内容来自YouTube需翻墙(点击进入视频学习) 服务器配置等可以参看我其他文章.注释等后续再加 效果图 结构   <body> <fie ...

  2. DBShop后台RCE之曲线救国

    本文最早发布在朋友的公众号 黑客信徒 中,文章是自己写的 不存在抄袭  特此申明 --------------------- 前言 DBShop是一款基于ZendFramework2框架的电子商务系统 ...

  3. PLSQL 设置 里面timestamp显示的格式

    转自: https://blog.csdn.net/dietime1943/article/details/52672813# PL/SQL下timestamp日期显示格式问题 现象: 日期检索出来显 ...

  4. 如何实现高性能的IO及其原理?

    程序运行在内存以及IO的体现 首先普及一下常识,如图所示: 1.在整个内存空间中,跑着各种各样的程序,有Java程序.C程序,他们共用一块内存空间. 2.对于Java程序,JVM会申请一块堆空间,通过 ...

  5. MySql 安装及实用笔记

    安装 更新 rpm 包 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm 安装MySql yum - ...

  6. C++——同名隐藏 和 赋值兼容规则

    同名隐藏 一旦子类定义了与父类同名的方法,则父类里面该名字的所有方法都被隐藏了.必须显示指定是父类的方法才可以 #include<iostream> using namespace std ...

  7. HTML&CSS基础-清除浮动

    HTML&CSS基础-清除浮动 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看浮动效果 1>.HTML源代码 <!DOCTYPE html> &l ...

  8. Win 2008 R2——由于管理员设置的策略,该磁盘处于脱机状态

    操作系统:Windows 2008R2 现象描述: 1.原系统为Windows 2012挂载了2T的存储,因业务要求重新安装为Windows 2008R2,并没有在磁盘存储空间上重新做映射. 2.系统 ...

  9. 基于Java+Selenium的WebUI自动化测试框架(二)-----页面操作接口

    在有了基础的Position类之后,我们需要考虑我们在寻找完页面元素之后,需要做什么.这个“做”什么,可以理解为我们在页面上需要对应的一系列动作.比如:点击,输入,切换窗口,寻找元素,判断元素是否存在 ...

  10. ES6中let、const和var的区别

    一.let 1.基本用法 ES6 新增了let命令,用来声明变量. let 的用法类似于 var,但所声明的变量只在 let 命令所在的代码块内有效(一个“{}”相当于一个代码块) { let a = ...