Spring JPA的使用

Spring JPA的使用

  1. 搭建环境的步骤
    1. 创建maven,引入坐标

      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.hibernate.version>5.0.7.Final</project.hibernate.version>
      </properties>
      
      <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </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>
      
          <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.17</version>
          </dependency>
      
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.8</version>
          </dependency>
      </dependencies>
      
      
    2. 配置jpa的核心配置文件

      1. 配置到类路径下(resources文件夹下)的一个叫做META-INF的文件夹下(命名:persistence.xml)
      <?xml version="1.0" encoding="UTF-8"?>
      <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
          <!--需要配置persistence-unit结点
              持久化单元:
                  name:持久化单元名称,随便写
                  transaction-type:事务管理的方式
                      JPA:分布式事务管理(不同的表分散到不同的数据库使用JPA)
                      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
                      数据库地址:javax.persistence.jdbc.url
                  -->
                  <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:///eesy"/>
      
                  <!--可选的配置,配置jpa实现方(Hibernate的配置信息)的配置信息
                      显示sql:false|true
                      自动创建数据库表:hibernate.hbm2ddl.auto
                          create:程序运行时创建数据库表(如果有表,先删除表,再创建表)
                          update:程序运行时创建数据库表(如果有表,不会创建表)
                          none:不会创建表
                  -->
                  <property name="hibernate.show_sql" value="true"/>
                  <property name="hibernate.hbm2ddl.auto" value="create"/>
              </properties>
          </persistence-unit>
      </persistence>
      
    3. 编写实体类

    4. 配置实体类和表,类中的属性和表中字段的映射关系

      import javax.persistence.*;
      /**
       * 配置映射关系
       *  1.实体类和表的映射关系
       *       @Entity:声明此类是个实体类
       *       @Table:实体类和表的映射关系
       *          name属性:配置数据库表的名称
       *  2.实体类中属性和表中字段的映射关系
       */
      @Entity
      @Table(name = "customer")
      public class Customer {
          /**
           *  @Id:声明主键的配置
           *  @GeneratedValue:配置主键的生成策略
           *      GenerationType.IDENTITY:自增(底层数据库必须支持自动增长---mysql数据库)
           *      GenerationType.SEQUENCE:序列(底层数据库必须支持序列---oracle数据库)
           *      GenerationType.TABLE:jpa提供的一种机制,通过一张新的数据库表的形成帮助我们完成自增
           *      GenerationType.AUTO:由程序自动的选择主键生成策略
           *  @Column:配置属性和字段的映射关系
           *      name:数据库表中字段的名
           */
          @Id   //声明主键的配置
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Column(name = "id")
          private Integer id;
      
          @Column(name = "name")
          private String name;
      
          @Column(name = "source")
          private String source;
      
          @Column(name = "industry")//客户来源
          private String industry;
      
          @Column(name = "level")//客户所属行业
          private String level;
      
          @Column(name = "address")//客户级别
          private String address;
      
          @Column(name = "phone")
          private String phone;
      }
      
    5. 保存客户到数据库中

      public class JpaTest {
      
          /*
          * 测试jpa的保存(保存一个客户到数据库中)
          * JPA的操作步骤
          *   1.加载配置文件创建工厂(实体管理类工厂)对象
          *       Persistence 静态方法createEntityManagerFactory(根据持久化单元名称创建实体管理器工厂)
          *       EntityManagerFactory:实体管理器工厂,用来(createEntityManager方法)创建实体管理器
          *           内部维护了很多内容:
          *               维护了数据库信息
          *               维护了缓存信息
          *               维护了所有的实体管理类对象
          *               在创建EntityManagerFactory的过程中会根据配置创建数据库表
          *           EntityManagerFactory的创建过程比较浪费资源,是线程安全的对象(多个线程访问同一个EntityManagerFactory不会有线程安全问题)
          *   2.通过实体管理类工厂获取实体管理类
          *       EntityManager对象,实体类管理器
          *           presist:保存
          *           merge:更新
          *           remove:删除
          *           find/getRefrence:根据id查询
          *   3.获取事务对象,开启事务
          *   4.完成增删改查
          *   5.提交事务(或回滚)
          *   6.释放资源
          * */
          @Test
          public void testSave(){
              //1.加载配置文件创建工厂(实体管理类工厂)对象,参数:持久化单元名称
              EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
              //2.通过实体管理类工厂获取实体管理类
              EntityManager em = factory.createEntityManager();
              //3.获取事务对象,开启事务
              EntityTransaction tx = em.getTransaction();  //获取事务对象
              tx.begin();  //开启事务
              //4.完成增删改查(保存客户到数据库中)
              Customer customer = new Customer();
              customer.setName("传智播客");
              customer.setIndustry("IT");
              em.persist(customer);  //保存操作
              //5.提交事务(或回滚)
              tx.commit();
              //6.释放资源
              em.close();
              factory.close();
          }
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值