JPA的入门案例

227 阅读2分钟
.
JPA
概述
JPA
的全称是
Java Persistence API
, 即
Java
持久化
API
,是
SUN
公司推出的一套基于
ORM
的规范,内部是由一系列的接口和抽象类构成。

2.
案例:
实现保存一个客户到数据库的客户表中
2.1
新建
maven
工程
导入坐标
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.hibernate.version>5.0.7.Final</project.hibernate.version>
</properties>
<dependencies>
<!--
junit
-->
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--
hibernate
jpa
的支持包
-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>
hibernate
-
entitymanager
</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>
hibernate
-c3p0</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<!-- log
日志
-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--
Mysql
and MariaDB -->
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql
-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
2.2
创建客户的数据库表和客户的实体类
CREATE TABLE cst_customer (
cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '
客户编号
(
主键
)',
cust_name varchar(32) NOT NULL COMMENT '
客户名称
(
公司名称
)'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
@Entity //
声明实体类
@Table(name="cst_customer") //
建立实体类和表的映射关系
public
class
Customer {
@Id//
声明当前私有属性为主键
@GeneratedValue(strategy=GenerationType.
IDENTITY
) //
配置主键的生成策略
@Column(name="cust_id") //
指定和表中
cust_id
字段的映射关系
private
Long custId;
@Column(name="cust_name") //
指定和表中
cust_name
字段的映射关系
private
String custName;
省略
getXX,setXX
方法
}
2.3 配置JPA的核心配置文件
java
工程的
resources
路径下创建一个名为
META-INF
的文件夹,在此文件夹下创建一个名为
persistence.xml
的配置文件
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<persistence xmlns=
"http://java.sun.com/xml/ns/persistence"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version=
"2.0"
>
<!--
配置持久化单元
name
:持久化单元名称
transaction-type
:事务类型
RESOURCE_LOCAL
:本地事务管理
JTA
:分布式事务管理
-->
<persistence-unit name=
"myJpa"
transaction-type=
"RESOURCE_LOCAL"
>
<!--
配置
JPA
规范的服务提供商
-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!--
数据库驱动
-->
<property
name=
"javax.persistence.jdbc.driver"
value=
"com.mysql.jdbc.Driver"
/>
<!--
数据库地址
-->
<property
name=
"javax.persistence.jdbc.url"
value=
"jdbc:mysql://localhost:3306/jpa"
/>
<!--
数据库用户名
-->
<property name=
"javax.persistence.jdbc.user"
value=
"root"
/>
<!--
数据库密码
-->
<property name=
"javax.persistence.jdbc.password"
value=
"root"
/>
<!--
jpa
提供者的可选配置:我们的
JPA
规范的提供者为
hibernate
,所以
jpa
的核心配置中兼容
hibernate
的配
-->
<property name=
"hibernate.show_sql"
value=
"true"
/>
<property name=
"hibernate.format_sql"
value=
"true"
/>
<property name=
"hibernate.hbm2ddl.auto"
value=
"create"
/>
</properties>
</persistence-unit>
</persistence>
2.4
实现保存操作
@Test
public
void
test() {
/**
*
创建实体管理类工厂,借助
Persistence
的静态方法获取
*
其中传递的参数为持久化单元名称,需要
jpa
配置文件中指定
*/
EntityManagerFactory factory = Persistence.
createEntityManagerFactory
("myJpa");
//
创建实体管理类
EntityManager em = factory.createEntityManager();
//
获取事务对象
EntityTransaction tx = em.getTransaction();
//
开启事务
tx.begin();
Customer c =
new
Customer();
c.setCustName("
传智播客
"
);
//
保存操作
em.persist(c);
//
提交事务
tx.commit();
//
释放资源
em.close();
factory.close();
}

更多技术资讯可关注:gzitcast