本文共 4885 字,大约阅读时间需要 16 分钟。
Java Persistence API
就是一款ORM规范
jdbc是操作数据库的唯一技术 ,sun公司只提供了jdbc规范
sun公司在jdbc很难用的情况下 推出了第一款EJB企业级的javabean
特点:功能强大提供了非常多的api的文档 简单理解就是他对domain,dao,service进行了强大的封装,你要完成对应的crud,直接调用方法即可 缺陷:太过笨重了hibernate是一款轻量级的orm框架
主要是解决DAO层领域的问题 但是在hibernate推出的这一时期出现了很多出名的orm框架 比如toplink mybatis 于是 sun公司就找到hibernate的坐着gavin king 说你的hibernate太优秀了 来我们公司制定一些orm框架吧 没过多久 一个强大的orm规范就出来了 这就是jpaObject Relational Mapping(对象关系映射)
o:object R:关系型数据库 M:对象映射关系型数据库使用jpa或者hibernate的好处:在使用框架的时候,不需要写sql 语句 只需要传入对应的对象 就能完成相应的crud
持久化单元 简单理解持久化单元就是我们以前的连接池
name:持久化单元的名字 transaction-type:事务类型使用方法的好处:它底层会根据你使用的方言来自动生成sql语句
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
显示sql <property name="hibernate.show_sql" value="true"/>
格式化sql
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
//持久化单元名String unitname = "cn.itsource.unit";//根据持久化单元名加载jpa的核心配置文件(1.检查jpa核心配置文件,配置语法是否有问题// 2.它会把xml解析的信息放到EntityManagerFactory内部,3.它会扫描所有交给jpa管理的domain,会进行一一映射数据库中)EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(unitname);//创建EntityManager对象(简单把它看成就是一个连接对象)EntityManager entityManager = entityManagerFactory.createEntityManager();//在使用持久化框架的时候,操作数据,必须要提交事务//开启事务entityManager.getTransaction().begin();User user = new User();user.setUsername("王天霸");user.setAge(22);user.setEmail("123@qq.com");//保存数据entityManager.persist(user);//提交事务entityManager.getTransaction().commit();//关闭entityManager对象entityManager.close();
import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;public class JPAUtils { private static EntityManagerFactory entityManagerFactory; static{ entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.unit"); } public static EntityManager openEntityManager(){ return entityManagerFactory.createEntityManager(); }}
//保存数据entityManager.persist(user);//查询对象entityManager.find(User.class,1L);//修改数据entityManager.merge(user);//删除数据entityManager.remove(user);//查找多行数据 String jpql = "from User";//获取到query对象Query query = entityManager.createQuery(jpql);//查询所有的数据ListresultList = query.getResultList();
Persistence:它主要是用来创建EntityManagerFactory对象
他是一个重量级的对象也就是说我们创建一个EntityManagerFactory是非常不容易的 所以一般我们不会去轻易的销毁
使用EntityManagerFactory我们有一句口号叫1:1:1
一个项目对象一个EntityManagerFactory对应一个数据库它是由EntityManagerFactory创建的一个轻量级对象
OID(对象id):cn.itsource._02cache.CacheDomain#1
CacheDomain domain = cache.get(cn.itsource._02cache.CacheDomain#1);if(domain==null){ domain = 发送sql语句到数据库中查询对应的对象; if(domain!=null){//把查询出来的数据放到一级缓存中 cache.put(cn.itsource._02cache.CacheDomain#1,domain); } } return domain;
实例:
EntityManager entityManager = JPAUtils.openEntityManager(); //它底层代码实现原理: 首先通过oid在一级缓存中查找对应的对象,如果找到了,直接引用,如果没找到则发送sql语句到数据库中进行查找,把查找对象放到一级缓存中 CacheDomain cacheDomain = entityManager.find(CacheDomain.class, 1L); System.out.println(cacheDomain); System.out.println("==============================="); //由于上一个把查询的对象放到一级缓存中了,这时候我通过oid直接在一级缓存中找到对应的对象,所以就没有发送sql语句 CacheDomain cacheDomain1 = entityManager.find(CacheDomain.class, 1L); System.out.println(cacheDomain1);
转载地址:http://zjphn.baihongyu.com/