一.课程介绍
1. 介绍什么是JPA、为什么需要JPA、JPA优缺点/ORM的概念;(了解)
2. 第一个JPA程序(掌握)
3. JPA CRUD;(重点掌握)
4. JPA的核心API认识(理解)
5. 配置自动生成表;(掌握)
6. 单表映射细节(掌握)
1什么是JPA
(1)Java持久层API,jpa就是做持久层,操作数据库
(2)它是对象映射框架(ORM)的规范
ORM: 对象关系映射(Object Relational Mapping,简称ORM)
JPA和Hibernate的关系
JPA是持久化规范,Hibernate是实现
JPA的优缺点
本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装
优点:
1.程序员操作很简单,代码简单 entityManager.persist(employee);
2.直接面向持久对象操作
3.提供世界级数据缓存(现在几乎所有的ORM框架的缓存都是学的Hibernate)
一级缓存,二级缓存,查询缓存(空间换速度)
4.数据库移植性很强,很少的修改(通过配置方言搞定)
把各种数据库抽取了一个方言接口
不同数据库实现一个方言接口,如果换了数据库,必须修改方言实现,驱动jar文件,连接数据库信息。
缺点:
不能干预sql的生成 ,查询一个数据 find 默认查询所有字段 (select * from )
(2)有些优化 jpa做不了,比如特别大数据量的时候,jpa也不适合,mybatis也解决不了 (架构策略 分库 分表 (分布式))
(3)一个项目里面 对sql要求比较高,就不适合jpa
2.ORM概念
ORM 就是通过将Java对象映射到数据库表,通过操作Java对象,就可以完成对数据表的
操作
3.第一个jpa程序
先配置,在导包
配置pom.xml和persistence.xml
还有JPA工具类的完成
@Entity
@Table(name="t_user")
public class User {
@Id
@GeneratedValue
private long id;
@Column(name = "username",length = 120)
private String name;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
然后利用JPA框架对数据库进行增删改查
public class TestJPA {
@Test
public void testJpa() throws Exception{
EntityManagerFactory factory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
factory.close();
}
@Test
public void testadd() throws Exception{
User user = new User();
user.setName("哈麻皮");
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();//开启事务
entityManager.persist(user);
entityManager.getTransaction().commit();//提交事务
entityManager.close();
entityManagerFactory.close();
}
@Test
public void testUpdate() throws Exception{
User user = new User();
user.setId(1L);
user.setName("公鸡");
//获取entityManager
EntityManager entityManager = JpaUtil.getEntityManager();
entityManager.getTransaction().begin();
entityManager.merge(user);
entityManager.getTransaction().commit();
entityManager.close();
}
@Test
public void testQueryOne() throws Exception{
EntityManager entityManager = JpaUtil.getEntityManager();
//User Long
User user = entityManager.find(User.class, 1L);
System.out.println(user);
}
@Test
public void testQueryAll() throws Exception{
EntityManager entityManager = JpaUtil.getEntityManager();
String jpql = "select o from User o";
Query query = entityManager.createQuery(jpql,User.class);
List<User> list = query.getResultList();
for (User o : list) {
System.out.println(o);
}
list.forEach(user->{
System.out.println(user);
});
}
@Test
public void testDel() throws Exception{
EntityManager entityManager = JpaUtil.getEntityManager();
//持久化的状态
User user = entityManager.find(User.class, 1L);
entityManager.getTransaction().begin();
if(user != null) {
entityManager.remove(user);
}
entityManager.getTransaction().commit();
entityManager.close();
}
}