JPA框架学习

                  JPA入门

1.JPA认识

    1.1什么是JPA

      JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据他的作用是简化对mysql的操作

      1.2JQP的优缺点

        优点: 1.JPA的主要目标之一就是提供更加简单的编程模型

               2.JPA拥有可媲美JDBC的查询能力

               3.JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句

        缺点:    1.不能干预sql语句的生成

                   2.一个项目中,如果对sql语句的优化要求比较高,不适合用JPA

                   3.如果一张表的数据非常大的时候也不能用JPA 

     1.2  ORM    :ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中

 

        1.3JPA的配置

          1.首先导入依赖的包

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com</groupId>
<artifactId>wjx</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 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>

</project>

然后Ctrl +Shift+s大开页面配置JPA

 

 点击加号在下面找到JPA文件

然后在点击生成的JPA里面的加号找到加号直接配置生成文件  拖到你 工程里面

 放在resource里面

 

在进行一下配置框起来的地方改成你数据库的名字

 

      1.4第一个JPA程序

           1.1创建一个实体类对象

给于字段提供get  set方法

提供一个测试类进行测试

 

 然后就是完成一个用JPA对数据库的CRUD(分层domain  dao )

      1.6 一级缓存和二级缓存

 

一级缓存:比如:

 

Customer customer1 = entityManager.find(Customer.class, 1);

 

Customer customer2 = entityManager.find(Customer.class, 1);

他就只会查询一次因为第二次其实已经在一级缓存中了

但是,
Customer customer1 = entityManager.find(Customer.class, 1);

//开启事务

transaction.begin();
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();

//提交事务
transaction.commit();

//关闭事务

entityManager.close();
Customer customer2 = entityManager.find(Customer.class, 1);
这样他就回打印两次

二级缓存,就是要在不同的entityManager中,只查询一次

 

1.7单表映射配置细节

 

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; //要求:主键,使用数据库的自动生成策略
@Column(length = 20,nullable = false,unique = true,name ="username")
private String name; //要求:varchar(20),数据库名称为username,不能为空,唯一
private String password;
@Column(insertable = false,columnDefinition = "int(10) default(25)")
private Integer age = 25; //要求:默认值是25,在插入数据时不允许覆盖(添加数据时不操作该字段)
private Boolean sex;// 数据库没有布尔类型,bit对象
@Column(columnDefinition = "decimal (19,2)")
private BigDecimal salary;// 19,2
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;//包含年月日时分秒,不允许修改

@Temporal(TemporalType.DATE)
private Date birthday;//包含年月日
@Temporal(TemporalType.TIME)
private Date time;//包含时分秒
@Lob
private String text;//这是一个大文本
@Transient
private String temp;//这一个字段不要同步到数据库

 

posted on 2019-07-24 01:04  悠悠紫荆  阅读(6103)  评论(1编辑  收藏  举报

导航