JPA基础学习

1.什么是JPA

     JPA(中文名Java持久层API)是一种ORM规范

    ORM:对象(java)关系(数据库)映射

    本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装

    Hibernate是一个开放源代码的对象关系映射(ORM)框架。

    优缺点( Hibernate):

           开发效率高

           性能不高

          兼容性强

          有缓存机制

         jpql是面向对象的语言 (最终会转化为sql语句)

   

2.JDBC

      JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访  问,它由一组用Java编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

     本质:处理Java对象和关系型数据库表之间的转换

    JDBC优缺点:

         性能好:最底层(但是要是那种比较牛的人,会缓存)

         开发效率低

        数据库移植比较麻烦,兼容性不强

        sql语句不是面向对象的语言     

    

3.使用JPA完成基础的CRUD(增删改查)

3.1导包

     

<!-- hibernate的包 -->

        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-core</artifactId>

            <version>4.3.8.Final</version>

        </dependency>

        <!-- hibernate对于jpa的支持包 -->

        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-entitymanager</artifactId>

            <version>4.3.8.Final</version>

        </dependency>

        <!-- mysql的驱动包 -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.6</version>

        </dependency>

        <!-- junit的测试包 -->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

        </dependency>

    </dependencies>

    <build>

        <finalName>pss</finalName>

        <plugins>

            <plugin>

                <!-- Maven的编译插件-->

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>

        </plugins>

</build>

3.2Domain:使用注解创建表

         @Entity//建表
	 @Table(name="xx")//给表一个名字
	    
         public class Product{
                @Id//一个类必需要加主键
	        @GeneratedValue//自动给值
	        private Long id;

                public void setId(Long id){
                   this.id=id
                }
                 public Long getId(){
                   return id;
                }
   

         }
     

3.3.代码完成

   1.获取EntityManager 对象

     EntityManagerFactory f =Persistence.createEntityManagerFactory();

     EntityManager eg = f.createEntityManager();

    2.开启事务(同生共死,要么都成功,要么都失败)

        entityManager.getTransaction().begin();

    3.提交事务

        entityManager.getTransaction().commit();

    4.关闭事务

        entityManager.close();

        entityManagerFactory.close();

     5.增删改需要添加事务

        save:persist();

        edit:merge();

        delect:先查在删   remove()

    查询不要事务的:

       queryOne:find()

       queryAll:  creatQuery() 然后 getResultList();

3.4.WEN-INF/persistence.xml

<property name="hibernate.<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--
      persistence-unit:持久化单元(一个数据库对应一个持久化单元)
              name="" :为持久化单取个名字
              transaction-type:事务类型
                      RESOURCE_LOCAL:本地(数据库自带)
                      JTA:用于分布式系统
              我要操作数据库->最少配置基本属性:driven,url,username,password
                自带连接池
  -->
    <persistence-unit name="cn.itsource.jap" transaction-type="RESOURCE_LOCAL">
        <!--
            properties:属性配置
            全部可以在:   \hibernate-release-4.3.8.Final\project\etc\hibernate.properties
           -->
        <properties>
            <!-- 操作数据库的四个基本属性 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url" value="jdbc:mysql:///jpa" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="root" />
            <!-- 配置方言:根据不同数据库的特性去生成SQL -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <!--
                创建表
                ddl:建库建表建约束
            -->
hbm2ddl.auto" value="update" />
            <!-- 显示SQL -->
            <property name="hibernate.show_sql" value="true" />

        </properties>
    </persistence-unit>
</persistence>

4.建表策略

create-drop -> 删 - 建 -删(保存关闭EntityManagerFactory)

create -> 删 -建

update -> 修改(如果没有表会创建)【只增不减】

validate -> 验证 【只验证domain中有的数据】

5.四大对象

1.Persistence:

          工具类,创建EntityManagerFactory(解析xml)

2.EntityManagerFactory:

        重(连接池,sql,二级缓存,domain关系等)

        线程安全  

        一个应用程序对应一个EntityManagerFactory:一个数据库   1:1:1

       创建EntityManager

3.EntityManager:

     轻(连接,一级缓存)

     线程不安全的

     一个请求(线程)一个EntityManager

     一级缓存命中:同一个EntityManagerFactory,同一个EntityManager,同一个OID

   OID:对象的全限定名#id的值

4.Transaction:

       EntityManager拿到的事务是同一个:

       3.提交事务

        entityManager.getTransaction().commit();

     4.关闭事务

        entityManager.close();

        entityManagerFactory.close();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值