• JPA快速入门


    JPA概述:

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

      JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

    JPA快速入门:

      由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要导入JPA的提供商的jar包。

      这里选择Hibernate作为JPA的提供商,所以需要导入Hibernate的maven坐标。

      1.导入坐标

    <properties>
            <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 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
        </dependencies>

      2.配置JPA的核心配置文件

        工程的resources路径下创建一个名为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:事务类型
                 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" /> <!-- 显示SQL -->
                <property name="hibernate.format_sql" value="true" /> <!-- 格式化SQL语句 -->
                <!-- 自动创建数据库表 取值:create 如果有表先删除再创建
                                       update 如果有表,不会创建表
                                       none 不创建表 -->
                <property name="hibernate.hbm2ddl.auto" value="update" />
            </properties>
        </persistence-unit>
    </persistence>

      3.创建客户的数据库表(这里采用自动生成数据库表)和客户的实体类

    public class Customer implements Serializable {
    
        private Long custId;
        private String custName;
        private String custSource;
        private String custIndustry;
        private String custLevel;
        private String custAddress;
        private String custPhone;
        
        /*************** get和set方法 ***************/
    }

      4.编写实体类和数据库表的映射配置

    @Entity
    @Table(name = "cst_customer")
    public class Customer implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 配置主键的生成策略
        @Column(name = "cust_id")
        private Long custId;
        @Column(name = "cust_name")
        private String custName;
        @Column(name = "cust_source")
        private String custSource;
        @Column(name = "cust_industry")
        private String custIndustry;
        @Column(name = "cust_level")
        private String custLevel;
        @Column(name = "cust_address")
        private String custAddress;
        @Column(name = "cust_phone ")
        private String custPhone;

      /*************** get和set方法 ***************/ }

        常用注解的说明:

          @Entity
            作用:指定当前类是实体类。
          @Table
            作用:指定实体类和表之间的对应关系。
            属性:name:指定数据库表的名称
          @Id
            作用:指定当前字段是主键。
          @GeneratedValue
            作用:指定主键的生成方式。。
            属性:strategy :指定主键生成策略。
            取值:

              IDENTITY:主键由数据库自动生成(主要是自动增长型)  mysql

              SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。  Oracle

                @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="指定序列")

              AUTO:主键由程序控制

              TABLE:使用一个特定的数据库表格来保存主键
          @Column
            作用:指定实体类属性和数据库表之间的对应关系
            属性:
              name:指定数据库表的列名称。
              unique:是否唯一
              nullable:是否可以为空
              inserttable:是否可以插入

              length:长度
              updateable:是否可以更新
              columnDefinition: 定义建表时创建此列的DDL
          @secondaryTable: 指定注释的实体类的辅助表。指定一个或多个辅助表指示实体类的数据存储在多个表中。

      5.测试

    public class JPATest {
    
        @Test
        public void testSave() {
            /**
             * 创建实体管理工厂,借助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();
        }
    }
  • 相关阅读:
    毕业设计同学们的福利(将word表格导入PowerDesigner中实现快速创建PDM)
    (转载)彻底的理解:WebService到底是什么?
    Aptana常用快捷键总结
    解决nuxt中路由变化后vanlist触底不加载的问题
    vuepropertydecorator的装饰器及其功能(可能不全)
    前端基础复习篇DOM
    Docker如何制作镜像Dockerfile的使用
    接口测试及常用接口测试工具
    SVN快速入门3——整合eclipse(1)
    SVN快速入门1——SVN的安装及常用命令
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12371295.html
Copyright © 2020-2023  润新知