JPA概述及helloworld
一、JPA概述
1. 是什么
- JPA全称
Java Persistence API
:意思是 Java 持久化 API- 它是Java EE5.0平台指定的的 ORM 规范,使得应用程序以统一的方式访问持久层
2. JPA和 hibernate 的关系(JPA是hibernate的创作者提出的...)
- JPA 是 hibernate 的一个抽象(就像是 JDBC 和 JDBC 驱动之间的关系)
- JPA是规范:JPA是一种ORM规范,而不是ORM框架,它只是提供了接口,具体的实现由ORM厂商实现
- hibernate 是实现:hibernate 除了是 ORM 框架以外,也是JPA的实现
- 从功能上说,JPA是hibernate的子集
3. JPA有哪些实现
- hibernate(毕竟JPA就是它的作者提出来的)、OpenJPA、TopLink
4. JPA 包括什么
- ORM 映射元数据:主要学习注解方式
- API
- 查询语言(JPQL):类似于 hibernate 的 hql
二、hello world
1. 创建项目
-
导包(依赖)
<properties> <hibernate.version>5.0.7.Final</hibernate.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <c3p0.version>0.9.5.4</c3p0.version> <mysql.version>5.1.28</mysql.version> </properties> <dependencies> <!-- junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.18.Final</version> </dependency> <!-- c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies>
-
编写配置文件
-
log4j
# 为了直观的看输出结果和sql,我设置了打印级别为ERROR级 log4j.rootLogger=ERROR log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
-
JPA配置文件:路径必须是
META_INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <!-- transaction-type:指定 JPA 的事务处理策略。 RESOURCE_LOCAL:默认值,数据库级别的事务,只能针对一种数据库,不支持分布式事务。 如果需要支持分布式事务,使用JTA:transaction-type="JTA" name 属性用于定义持久化单元的名字, 必选 --> <persistence-unit name="jpa01" transaction-type="RESOURCE_LOCAL"> <!-- 配置ORM映射产品来实现JPA映射 实际上是 javax.persistence.spi.PersistenceProvider的实现类 如果项目中只有一个JPA实现产品,则不需要配置该节点 --> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!-- 添加持久化类 --> <class>cn.ann.entity.User</class> <properties> <!-- 连接数据库的基本信息 --> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/jpa_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="password" /> <!-- ORM 框架的基本信息 --> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence>
-
-
创建实体类(getter和setter略)
@Entity // 表明这是一个与数据库表对应的实体类 @Table(name = "t_user") // 表明关联的表名称 public class User implements Serializable { private static final long serialVersionUID = -5201721404180914044L; @Id // 表明该字段是主键 private Long id; @Column(name = "last_name") private String lastName; private Integer age; private String email; }
2. 测试
-
编写测试类
public class JpaDemo { @Test public void JpaTest_persistence() { // 1. 创建实体管理工厂:EntityManagerFactory EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa01"); // 2. 创建实体管理类:EntityManager EntityManager entityManager = factory.createEntityManager(); // 3. 获取事务 EntityTransaction tx = entityManager.getTransaction(); try { // 4. 开启事务 tx.begin(); // 5. 操作 for (int i = 1; i <= 100; i++) { User user = new User(); user.setLastName("程序员"+i+"号"); user.setAge(20 + i%20); user.setEmail("john"+i+"@ann.cn"); entityManager.persist(user); } // 6.1 提交事务 tx.commit(); } catch (Exception e) { // 6.2 发生异常就回滚事务 tx.rollback(); e.printStackTrace(); } finally { // 7. 释放资源 entityManager.close(); factory.close(); } } }
本节代码:点击此处