JPA笔记 | 您所在的位置:网站首页 › jpa笔记 › JPA笔记 |
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 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 实验室设备网 版权所有 |