千家信息网

Spring boot与数据持久化Spring Data JPA集成实战

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,数据持久化Spring Data JPA项目集成了spring boot+spring data JPA+thymeleaf前台代码地址:https://blog.51cto.com/13501268
千家信息网最后更新 2025年01月31日Spring boot与数据持久化Spring Data JPA集成实战

数据持久化Spring Data JPA
项目集成了spring boot+spring data JPA+thymeleaf
前台代码地址:
https://blog.51cto.com/13501268/2319622
1.JPA理解:是用于管理Java EE和Java SE环境中的持久化,1.以及对象/关系映射的Java API

2.核心概念:

(1)实体:实体表示关系数据库中的表

(2)每个实体实例对应于该表中的行

(3)类必须用javas.persistence.Entity注解

(4)类必须有一个public或protected的的无参构造函数

(5)实体实例被当做值以分离对象方式进行传递(例如通过会话bean的远程业务接口),则该类必须实现Serializable接口

(6)唯一的对象标识符:简单主键(javax.persistence.Id),复合主键(javax.persistence.Embeddedld和javax.persistence.IdClass)

3.关系:

(1)一对一:@OneToOne

(2)一对多:@OneToMany

(3)多对一:@ManyToOne

(4)多对多:@ManyToMany

4.EntityManager接口:

(1)定义用于与持久化上下文进行交互的方法

(2)创建和删除持久化实例,通过实体的主键查找实体

5.Spring Data JPA:

(1)是更大的Spring Data家族的一部分

(2)对基于JPA的数据访问层的增强支持

(3)更容易构建基于使用Spring数据访问技术栈的应用

6.Spring Data JPA常用接口:

(1)CurdRepository:

(2)PagingAndSortingRepository:


7.Spring Data JPA自定义接口:

(1)根据方法名查询,方法名命名一定要遵循规则

8.Spring Data JPA,Hibernate与Spring Boot的集成

(1)环境配置:MySql数据库,Hibernate框架,以及Mysql连接驱动

(2)修改pom.xml文件,添加Spring Data JPA以及数据库连接驱动的依赖:

    4.0.0    com.dhtt.spring.boot.blog    spring.data.action    0.0.1-SNAPSHOT    jar    spring.data.action    Demo project for Spring Boot            org.springframework.boot        spring-boot-starter-parent        2.1.0.RELEASE                         UTF-8        UTF-8        1.8                            org.springframework.boot            spring-boot-starter-data-jpa                            org.springframework.boot            spring-boot-starter-thymeleaf                            org.springframework.boot            spring-boot-starter-web                            org.springframework.boot            spring-boot-devtools                            org.springframework.boot            spring-boot-starter-test            test                                                    mysql            mysql-connector-java            5.1.46                                    org.hibernate            hibernate-core            5.3.7.Final                                                    org.springframework.boot                spring-boot-maven-plugin                        

(3)启动项目进行测试,我们发现项目正常启动,说明我们的环境已经配置好了

9.集成后台编码:

(1)User实体:加@Entity注解,唯一标识@Id注解,制定主键生成策略,无参构造改造为protected,防止直接使用,加toString方法,实现Serializable接口;

package com.dhtt.spring.boot.blog.spring.data.action.entity;import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;/** * user实体 *  * @author QT */@Entitypublic class User implements Serializable {    private static final long serialVersionUID = 516988700978313579L;    @Id // 主键    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增策略    private Long id; // 用户的唯一标识    private String name; // 用户名    private String email; // 用户邮箱    protected User() { // 防止直接使用        super();    }    public User(Long id, String name, String email) {        super();        this.id = id;        this.name = name;        this.email = email;    }    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 String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", email=" + email + "]";    }}

(2)资源库:写userRepository接口继承JpaRepository接口

package com.dhtt.spring.boot.blog.spring.data.action.repository;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;import com.dhtt.spring.boot.blog.spring.data.action.entity.User;/** * User Repository接口 * @author  QT * */@Repositorypublic interface UserRepository extends JpaRepository{}

(3)编写userController类,用于与前台进行交互

package com.dhtt.spring.boot.blog.spring.data.action.web.user;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.dhtt.spring.boot.blog.spring.data.action.entity.User;import com.dhtt.spring.boot.blog.spring.data.action.repository.UserRepository;@Controller@RequestMapping("/users")public class userController {    @Autowired    private UserRepository userRepository;    /**     * 查询所有用户     *      * @param model     * @return     */    @GetMapping    public ModelAndView getList(Model model) {        model.addAttribute("userList", userRepository.findAll());        model.addAttribute("title", "用户管理");        return new ModelAndView("users/list", "userModel", model);    }    /**     * 根据Id查询用户     *      * @param id     * @param model     * @return     */    @GetMapping("{id}")    public ModelAndView view(@PathVariable("id") Long id, Model model) {        User user = userRepository.getOne(id);        model.addAttribute("user", user);        model.addAttribute("title", "用户查询");        return new ModelAndView("users/view", "userModel", model);    }    /**     * 创建用户     *      * @param id     * @param model     * @return     */    @GetMapping("/form")    public ModelAndView createForm(Model model) {        model.addAttribute("user", new User(null, null, null));        model.addAttribute("title", "创建用户");        return new ModelAndView("users/form", "userModel", model);    }    /**     * 新增或修改用户     *      * @param user     * @return     */    @PostMapping    public ModelAndView saveOrUpdateUser(User user) {        user = userRepository.save(user);        return new ModelAndView("redirect:/users", "userModel", user);    }    /**     * 获取删除用户     *      * @param id     * @return     */    @GetMapping("/delete/{id}")    public ModelAndView deleteUser(@PathVariable("id") Long id) {        userRepository.deleteById(id);;        return new ModelAndView("redirect:/users"); // 重定向到list页面    }    /**     * 获取修改用户界面     *      * @param id     * @param model     * @return     */    @GetMapping("/modify/{id}")    public ModelAndView modify(@PathVariable("id") Long id, Model model) {        User user = userRepository.getOne(id);        model.addAttribute("user", user);        model.addAttribute("title", "修改用户");        return new ModelAndView("users/form", "userModel", model);    }}

前台与上一个项目一样,直接粘贴复制就好

前台代码项目地址:

https://blog.51cto.com/13501268/2319622

接下里,启动项目,项目运行正常说明集成成功,下一步我们就将数据进行持久化到数据库中

10.将数据持久化到数据库中
(1)进行数据库配置,配置文件如下

#thymeleaf配置spring.thymeleaf.encoding=UTF-8#热部署静态文件,不需要缓存,实时观察文件修改效果spring.thymeleaf.cache=false#使用html5标准spring.thymeleaf.mode=HTML5spring.thymeleaf.suffix=.htmlspring.resources.chain.strategy.content.enabled=true#数据库连接配置spring.datasource.url=jdbc:mysql://localhost:3306/blog_test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=falsespring.datasource.username=rootspring.datasource.password=qitao1996spring.datasource.driver-class-name=com.mysql.jdbc.Driver#jpa配置spring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=create-drop

(2)接下来启动数据库,建立数据库

接下来我们启动项目进行操作,我们会发现数据库表成功创建,也可以操作表中数据

至此,Spring boot+Spring Data Jpa+mevan+Thymeleaf集成成功完成

0