千家信息网

Spring+JPA如何集成Hibernate

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍Spring+JPA如何集成Hibernate,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.JPA简介Java Persistence API (JPA),
千家信息网最后更新 2025年11月09日Spring+JPA如何集成Hibernate

这篇文章主要介绍Spring+JPA如何集成Hibernate,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1.JPA简介

Java Persistence API (JPA),为开发人员提供了一种对象/关系映射(O-R Mapping)工具,用来管理 Java 应用中的关系数据。JPA是EJB3.0的一部分,现在公认为ORM行业标准。JPA本身只是一个规范,而不是产品; 它本身不能进行持续性或其他任何东西。JPA只是一组接口,需要一个实现。JPA允许通过标准的XML格式和注解格式声明,用于定义Java类如何映射到关系数据库表的映射规则。。JPA也定义了在对数据库中的对象处理查询和事务运行时的EntityManager的API。JPA定义一个对象级查询语言,JPQL,以允许从所述数据库中的对象的查询。JPA常用的解决方案:

EclipseLink (Eclipse)
Hibernate (RedHat)
Open JPA (Apache)
DataNucleus
Ebean (SourceForge)
TopLink Essentials (Glassfish)
TopLink (Oracle)
Kodo (Oracle)
JPA 规范也不是一成不变的。从2006年的JPA1.0,到2009年JPA2.0,最后到2013年JPA2.1。版本之间的特性具体参照

https://en.wikibooks.org/wiki/Java_Persistence/What_is_JPA%3F

https://en.wikipedia.org/wiki/Java_Persistence_API

2.Spring Hibernate JPA整合

准备

表CREATE TABLE `Employee` (  `id` int(11) unsigned NOT NULL,  `name` varchar(20) DEFAULT NULL,  `role` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.1项目结构

2.2 pom.xml

    4.0.0    org.springframework    gs-relational-data-access    0.1.0                        org.springframework.boot            spring-boot-starter-data-jpa                            com.h3database            h3                            mysql            mysql-connector-java                            org.springframework            spring-test                            junit            junit            4.12                                    spring-releases            Spring Releases            https://repo.spring.io/libs-release                            org.jboss.repository.releases            JBoss Maven Release Repository            https://repository.jboss.org/nexus/content/repositories/releases                                    spring-releases            Spring Releases            https://repo.spring.io/libs-release                                                    io.spring.platform                platform-bom                1.1.2.RELEASE                pom                import                        

使用了platform-bom,方便了包的依赖管理。

依赖树结构

2.3 persistence.xml

            org.hibernate.jpa.HibernatePersistenceProvider    

2.4 spring.xml

                                                                                                                        true                                                                                    

有的对象,不是必须的。为了保持完整性,做了保留。

可以配置entityManagerFactory的packagesToScan属性,没有配置也是可以的。

2.5 entity

package com.journaldev.spring.jpa.model;import javax.persistence.Entity;import javax.persistence.Id;@Entitypublic class Employee {    @Id    private int id;    private String name;    private String role;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getRole() {        return role;    }    public void setRole(String role) {        this.role = role;    }    @Override    public String toString() {        return "{ID=" + id + ",Name=" + name + ",Role=" + role + "}";    }}

2.6 接口

public interface EmployeeDAO {    //Create    public void save(Employee employee);    //Read    public Employee getById(int id);    //Update    public void update(Employee employee);    //Delete    public void deleteById(int id);    //Get All    public List getAll();}

实现类

package com.journaldev.spring.jpa.dao;import com.journaldev.spring.jpa.model.Employee;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.transaction.Transactional;import java.util.List;/** * Created by zhaoguoyu on 2016/6/22. */@Transactional@Repositorypublic class EmployeeDAOImpl implements EmployeeDAO {    @PersistenceContext    EntityManager em;    @Override    public void save(Employee employee) {        em.persist(employee);    }    @Override    public Employee getById(int id) {        return em.find(Employee.class, id);    }    public void update(Employee employee) {          em.merge(employee);    }    @Override    public void deleteById(int id) {        em.remove(this.getById(id));    }    @Override    public List getAll() {        CriteriaBuilder builder =em.getCriteriaBuilder();        final CriteriaQuery query = builder.createQuery(Employee.class);        return this.em.createQuery(query).getResultList();    }}

2.7测试

测试类

import com.journaldev.spring.jpa.dao.EmployeeDAO;import com.journaldev.spring.jpa.model.Employee;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;import javax.annotation.Resource;import java.util.Random;/** * Created by zhaoguoyu on 2016/6/22. */@RunWith(SpringJUnit4Cla***unner.class)@ContextConfiguration(locations = "classpath:spring.xml")public class SpringJPATest extends AbstractTransactionalJUnit4SpringContextTests {    @Resource    private EmployeeDAO employeeDAO;    @Test    public void testSave(){        Employee emp = new Employee();        int rand = new Random().nextInt(1000);        emp.setId(rand);        emp.setName("Pankaj");        emp.setRole("Java Developer");        employeeDAO.save(emp);    }    @Test    public void testUpdate(){        Employee emp = new Employee();        int rand = new Random().nextInt(1000);        emp.setId(rand);        emp.setName("Pankaj");        emp.setRole("Java Developer");        employeeDAO.save(emp);        emp.setName(emp.getName()+"_update");        employeeDAO.update(emp);    }}

OR

import com.journaldev.spring.jpa.dao.EmployeeDAO;import com.journaldev.spring.jpa.model.Employee;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Random;/** * Created by zhaoguoyu on 2016/6/22. */public class Main {    public static void main(String[] args) {        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");        final EmployeeDAO employeeDAO = ctx.getBean(EmployeeDAO.class);        Employee emp = new Employee();        int rand = new Random().nextInt(1000);        emp.setId(rand);        emp.setName("Pankaj");        emp.setRole("Java Developer");        employeeDAO.save(emp);        Employee employee = employeeDAO.getById(rand);        employee.setName(employee.getName() +"_update");        employeeDAO.update(employee);    }}

有一点需要说明。默认使用的日志是logback.号称比log4j更优秀的一款。

默认的日志配置logback.xml

                                        %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n                                                        

以上是"Spring+JPA如何集成Hibernate"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0