JPA笔记 您所在的位置:网站首页 jpa笔记 JPA笔记

JPA笔记

2023-09-06 10:14| 来源: 网络整理| 查看: 265

resources/META-INF/persistence.xml org.hibernate.jpa.HibernatePersistenceProvider EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default"); //2.通过实体管理器工程获取实体管理器 EntityManager entityManager = entityManagerFactory.createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); entityManager.persist(customer); transaction.commit(); entityManager.close(); entityManagerFactory.close(); package com.liyuan.model; import javax.persistence.*; /** * 客户实体类 * 1、实体类和表的映射关系 * 2.属性和字段的映射关系 */ @Entity @Table(name = "customer") public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name="address") private String address; @Column(name = "name") private String name; @Column(name = "level") private String level; @Column(name = "source") private String source; @Column(name = "industry") private String industry; @Column(name = "phone") private String phone; @Override public String toString() { return "Customer{" + "id=" + id + ", address='" + address + '\'' + ", name='" + name + '\'' + ", level='" + level + '\'' + ", source='" + source + '\'' + ", industry='" + industry + '\'' + ", phone='" + phone + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getIndustry() { return industry; } public void setIndustry(String industry) { this.industry = industry; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } } 2 2.1.主键生成策略

@GeneratedValue(strategy = GenerationType.IDENTITY)

(1)strategy = GenerationType.IDENTITY 数据库该字段需要有 auto_increment,对id自动增长

(2) strategy = GenerationType.SEQUENCE 序列,适用于oracle数据库

(3)strategy = GenerationType.TABLE 通过数据库表的形式帮助我们完成主键自增

(4)strategy = generationType.AUTO 由程序自动帮助我们选择主键生成策略

2.2 配置属性和字段映射关系

@Column name:数据库表中字段名称

2.3.一些方法

EntityManager beginTransaction:创建事务对象 persist :保存(增) merge :更新(改)

Customer customer1 = entityManager.getReference(Customer.class, 1); customer1.setAddress("this is a new address!"); System.out.println(customer1.toString()); entityManager.merge(customer1);

remove :删除(删)

Customer customer1 = entityManager.getReference(Customer.class, 2); // System.out.println(customer1.toString()); entityManager.remove(customer1);

find/getReference:根据id查询(查) getReference -> 产生了代理

Transaction: begin:开启事务 commit:提交事务 rollback:回滚

2.4. JPQL查询

Java Persistence Query Language SQL:查询的是表和表中的字段; JPQL:查询的是实体类和类中的属性

1.查询全部

TypedQuery from_customer = entityManager.createQuery("from Customer order by id desc", Customer.class); List resultList = from_customer.getResultList(); System.out.println(Arrays.toString(resultList.toArray()));

2.分页查询(我测试时失败)

TypedQuery from_customer = entityManager.createQuery("from Customer", Customer.class); from_customer.setFirstResult(0); from_customer.setMaxResults(10); System.out.println(from_customer.getResultList());

3.统计查询

TypedQuery query = entityManager.createQuery("select count(id) from Customer ", Long.class); Long singleResult = query.getSingleResult(); System.out.println(singleResult);

4.条件查询

TypedQuery query = entityManager.createQuery("from Customer where id=?1", Customer.class); query.setParameter(1, 2); Customer singleResult = query.getSingleResult(); System.out.println(singleResult);

5.排序

p32

Spring Data JPA 1.概述

Spring基于ORM的框架的JPA框架; Java Persistence API为一套规范,内部由接口和抽象类组成,hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以将HIbernate成为JPA的一种实现方式,我们使用JPA的API规范,意味着站在更高的角度上看待问题(面向接口编程)

2.基本操作 3.运行过程及原理 4.复杂查询 4.0.0 org.example JPALearning 1.0-SNAPSHOT spring-boot-starter-parent org.springframework.boot 2.3.2.RELEASE org.hibernate hibernate-core org.hibernate hibernate-entitymanager org.springframework.data spring-data-jpa org.springframework spring-context org.springframework spring-beans org.springframework spring-core org.springframework spring-orm javax.el javax.el-api 2.2.4 org.glassfish javax.el 3.0.1-b11 com.mchange c3p0 0.9.5.5 mysql mysql-connector-java junit junit test ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml"); CustomerDao customerDao = (CustomerDao) applicationContext.getBean("customerDao"); Optional byId = customerDao.findById(2); System.out.println(byId.toString()); public interface CustomerDao extends JpaRepository, JpaSpecificationExecutor { }

P47 动态代理了该CustomerDao接口, JdkDynamicAopProxy 在这里插入图片描述 最终得到的代理类为SimpleJpaRepository

1 通过JdkDynamicAopProxy创建动态代理对象

2 动态代理对象:simpleJpaRepository

3 由下可知simpleJpsRepository也实现了JpaRepository方法,可知其为接口JpaRepository具体实现类

3.1 public class SimpleJpaRepository implements JpaRepositoryImplementation

3.2 public interface JpaRepositoryImplementation extends JpaRepository, JpaSpecificationExecutor

4 通过entityManager完成查询操作

5 JPA规范

6 Hibernate封装jdbc查询数据库

立即加载以及延迟加载; JPQL;查询实体类 e.g.根据客户名称查询客户

@Query(value = "from Customer where name= ?1") List queryByName(String customerName);

p54



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有