简述
ORM思想是将实体类与表关系的映射,属性与字段映射,操作实体类就相当于操作数据库表,快速的增删改查。
JPA是一种规范,内部是接口和抽象类,hibernate是一个实现框架,SpringDATAJPA是Spring的集成。
jpa全称java presistence api。
依赖
<dependencies>
<!--hibernate对jpa的支持-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.7.Final</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--c3p0-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.0.7.Final</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
</dependencies>
jpa的核心配置文件
配置到路径下一个叫做META-INF的文件夹下
命名:persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!--配置持久化单元
需要配置持久化单元名称name
事务管理方式transaction-type:jtp=分布式事务管理
RESOURCE_LOCAL=本地事务管理
-->
<persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
<!--jpa的实现方式-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!--可选信息-->
<properties>
<!--数据库信息-->
<!--
用户名,javax.persistence.jdbc.user
密码, javax.persistence.jdbc.password
驱动,javax.persistence.jdbc.driver
url,javax.persistence.jdbc.url ///代表本地数据库3306端口
-->
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>
<!--可选配置:配置jpa实现方(即hibernate)的配置信息-->
<!--显示sql-->
<property name="hibernate.show_sql" value="true"/>
<!--自动创建数据库表
create:程序运行时,创建数据库表,如果有表现删除表
update:程序运行时,创建表,如果有表不会创建表
none:不会创建表
-->
<property name="hibernate.hdm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
实体类:
运行步骤
/**
* 保存一个客户到数据中
* Jpa操作步骤
* 1.加载配置文件创建工厂(实体管理类工厂)对象
* 2.通过实体管理类工厂获取实体管理器
* 3.获取事务对象,开启事务.
* 4.完成增删改查
* 5.提交(回滚)
* 6.释放资源
*/
EntityManagerFactory的创建过程比较浪费资源:
· 内部维护了数据库信息
· 维护了缓存信息
· 维护了所有实体管理器对象
· 根据配置信息创建了数据库表。
· 是一个线程安全的对象。
解决思路,创建一个公共的对象,静态代码块的形式创建EntityManagerFactory。
entityManager方法:
presist:保存
merge:更新
remove:删除
find/getRefrence:根据id查询 区别是立即加载与延迟加载
getRefrence不会立即发送sql语句查询数据库,当调用查询结果对象的时候,才会发送。getRefrence获取的对象是动态代理的对象。
transaction事务:
begin:开启事务
commit:提交事务
rollback:回滚
释放的时候与创建顺序相反
//根据实体类增加
em.persist(customer);//保存操作
// 根据id查询 class:实体类字节码,参数2主键的取值
Customer customer = entityManager.find(Customer.class, 1L);
// . 根据主键删除 先查再删除,不能直接new一个实体类set主键
em.remove(customer)
// 更新 同样是查到以后在修改实体类,再merge
jpql查询
java Persistence query language
jap提供的面向对象的查询
jpql与sql的语法相似
步骤:
1.创建query对象entityManager.createQuery(String)
2.对参数赋值
3.发送查询并封装结果
1.查询全部
2.分页查询
3.统计查询
4.条件查询
5.排序
查询全部以及倒序查询
查询总数 count
唯一结果query.getSingleResult();
分页查询
在entityManager.createQuery(jpql)与getResultList之间进行赋值。
条件查询
query.setParameter(int index,Object o)参数一是占位符的位置,起始1,参数2为插入的字符。