A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

1. 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>
                <!-- hibernatejpa的支持包 -->
                <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();
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马